Forum: Mikrocontroller und Digitale Elektronik OLED I2C Display fehlerhaft ?


von Manfred M. (opamanfred)


Lesenswert?

Wie kann man feststellen, ob ein OLED Display mit I2C-Bus defekt ist ?
Oder liegt es an der Programmierung ? Richtige Adresse ist eingestellt. 
Da zuckt nichts.

von Stefan F. (Gast)


Lesenswert?

Manfred M. schrieb:
> Wie kann man feststellen, ob ein OLED Display mit I2C-Bus defekt ist ?

Indem man es benutzt. Vorzugsweise mit einem Mikrocontroller und 
Programm, das nachweislich und überprüfbar in Ordnung ist.

> Oder liegt es an der Programmierung ?

Was liegt an der Programmierung?

von Manfred M. (opamanfred)


Lesenswert?

Habe einen ESP mit der Arduino-IDE programmiert und auch die richtigen 
Bibliotheken installiert. Kompiler hat nichts beanstandet.  Genau so wie 
bei AZ-Delivery angegeben. Ich dachte dabei an Möglichkeiten zum Messen.

von Joachim B. (jar)


Lesenswert?

hast du nur ein Display?

Ich bestelle derlei immer mindestens doppelt weil ein Display ist kein 
Display, bekam schon zu oft Schrott und konnte nicht prüfen Display oder 
mein Fehler.

Auch bekam ich welche mit anderen Controllern so das die Beispiel 
Programmierung nicht funktionierte, mit Glück gibt es mehrere 
Möglichkeiten in der LIB so das man alle durchprobieren kann.
Manchmal fehlt auch nur der R oder ist falsch bestückt das nicht I2C 
aktiv ist sondern SPI.

Und dann wieder die 3,3V zu 5V Problematik, auch mal mit Pegelwandler 
versucht?

: Bearbeitet durch User
von Hohmann (Gast)


Lesenswert?

Manfred M. schrieb:
> Ich dachte dabei an Möglichkeiten zum Messen.

Ist die Frage wirklich ernst gemeint?

Ich geh' mal davon aus...

Messen:

- Spannungen OK? Je nach OLED Typ brauchst Du ggf. zwei unterschiedliche 
Spannungen, z.B. 3.3V und 12V. Das Datenblatt verrät Dir mehr.

- I2C Bus in Ordnung? Takt gemessen? SDA und SCL plausibel? Pegel in 
Ordnung?

Damit man Dir helfen kann, braucht man hier mindestens mal die 
Bezeichnung des Displays und den Programmcode, mit dem Du das Display 
initialisierst sowie den Code, mit dem Du "Hallo Welt" auf das Display 
schreiben willst...

Sonst wird das nix.

von Manfred M. (opamanfred)


Lesenswert?

Läuft alles mit 3,3V. Habe bereits ein neues Display bestellt. Bin noch 
beim Einarbeiten, da ich bisher nur Grundkenntnisse habe. Versuche das 
ich alles alleine hin bekomme, nehme Hilfe vom Internet mit Übersetzer 
in Anspruch. Stures Abschreiben will ich nicht, ich will verstehen 
welchen Mist ich baue. Dann kann ich es besser machen.

von Manfred M. (opamanfred)


Lesenswert?

I2C Bus scheint i.O. zu sein, da ich den Temp.Fühler auslesen kann. Kann 
ich über die Arduino-IDE anzeigen lassen. Da war der nächste Schritt die 
Anzeige am Display. Wenn das neue Display kommt gehts weiter. Oszi habe 
ich nur einen Eigenbau bis etwa 5 MHz.

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

Manfred M. schrieb:
> Habe bereits ein neues Display bestellt

EIN?

also nicht verstanden?

Joachim B. schrieb:
> Ich bestelle derlei immer mindestens doppelt weil ein Display ist kein
> Display

auch sieht man das es je nach Bestückung auch SPI sein kann

: Bearbeitet durch User
von Andreas S. (Gast)


Lesenswert?

Welches OLED / welcher Chip ?
Zur Not auch ein Foto vom Display oder ein Verweis zu
AZ-Delivery.
Was sagt der I2C Scanner ?
Die OLED sind unter Arduino leicht zu handeln.
Man muss allerdings auf den Chip und daher auch auf die
richtige Library und Anschluss achten.
Bei AZ-Delivery gibts es welche mit SSD1306 und SSH1106.
Ich vermeide zu viele Librarys - bei mir laufen die
OLEDs mit der Library von "olikraus"
Eine einzige Library für unzählige Displays:

https://github.com/olikraus/u8g2

Ein Beispiel von Dir - das übliche "Hello World" wäre auch
nicht schlecht.

von OMG (Gast)


Lesenswert?

Andreas S. schrieb:
> Eine einzige Library für unzählige Displays:
>
> https://github.com/olikraus/u8g2

Schrecklich .... diese vielen ASCII Zeichen ....
... und diese vielen Sourcen ...

von Andreas S. (Gast)


Lesenswert?

Danke !

falscher Link für Arduino - richtig ist dieser :

https://github.com/olikraus/U8g2_Arduino

von Hugo H. (hugohurtig1)


Lesenswert?

Ein gerne gemachter Fehler sind fehlende Pull-up-Widerstände. Wie hast 
Du das Display denn angeschlossen?

von Manfred M. (opamanfred)


Lesenswert?

Habe folgende bestellt :0,96 Zoll OLED Display I2C SDD1306 128x64 und 
3Stück bereits gestern. Wie schon gesagt stehe ich erst am Anfang. Habe 
jetzt als Rentner mehr Freizeit zur Verfügung. Ich werde dann mir alle 
Hinweise ansehen. Beispiele nehme ich meist von AZ-Delivery , weil 
weniger englisch dabei ist. Und ich suche auf deutsch-sprachigen Seiten. 
In den nächsten Tagen mache ich dann weiter. Danke Euch allen für die 
Hilfe.

von Joachim B. (jar)


Lesenswert?

Manfred M. schrieb:
> Habe folgende bestellt :0,96 Zoll OLED Display I2C SDD1306 128x64

von wo mit Link hast du immer noch nicht geschrieben, aber egal 
offensichtlich wurde dir ein

Manfred M. schrieb:
> SDD1306

angeboten, aber wie ich auch schon erfahren musste, manchmal ist auch 
ein

Andreas S. schrieb:
> SSH1106

drin,
manche Verkäufer wissen noch nicht mal was wirklich drin ist, deswegen 
eine LIB suchen die beides beinhaltet zum Probieren.

https://github.com/olikraus/u8g2

: Bearbeitet durch User
von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

Manfred M. schrieb:
> Kompiler hat nichts beanstandet

Ein Compiler kann eine SYNTAKTISCHE (grammatikalische) Prüfung einer 
Programmiersprache vornehmen, und schauen ob Variablen definiert und 
initialisiert sind.

eine SEMANTISCHE (inhalt, Bedeutung) Prüfung kann der Compiler nicht 
vornehmen.

Der folgende Satz einer natürlichen Sprache ist syntaktisch vollkommen 
korrekt:

"Der Hund hat gestern ein Fugzeug gefressen"

Sematisch ist dieser Satz Unsinn. Ein Compiler KANN ihn nicht anmeckern, 
da er das Modell der "Wirklichkeit" nicht kennt und nicht überprüft.Der 
Compiler kann es einfach nicht wissen, ob der Hund gestern das 
Flugzeug gefressen hat, noch ob Hunde generell Flugzeuge fressen.

--> deine Annahme, das ein Programm "korrekt" ist, nur weil ein Compiler 
nichts beanstandet, ist irrig.

FALLS Der Compiler meckert, weil die Syntax nicht stimmt (das ist für 
Maschinen-Übersetzer=Compiler eine zwingende Voraussetzung), dann ist 
erst mal im Vorfeld was im argen.

"nochmal nachdenken du musst".

-> die Syntax ist etwas verhuddelt, aber die Semantik ist wohl eher 
zutreffend.

Ein Compiler würde an der Syntax scheitern. Ein menschlicher Übersetzer 
kann den Syntax-Fehler ausblenden, und sich der Semantik zuwenden und 
diese bewerten.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Manfred M. schrieb:
> Habe einen ESP mit der Arduino-IDE programmiert und auch die richtigen
> Bibliotheken installiert.

Das heißt nicht viel. Für diese Displays gibt es viele unterschiedliche 
Bibliotheken mit unterschiedlicher Qualität. Und es gibt 
unterschiedliche Display-Module.

> Genau so wie bei AZ-Delivery angegeben.

Ich habe ein ESP8266 Board von AZ-Delivery verwendet, wo so ein Display 
fest drauf ist. Obwohl ich mich exakt an deren Anleitung hielt, 
funktionierte es nicht. Ursache war, das die Platine nicht dem 
Schaltplan entsprach und die Library nicht dazu passte.

Hohmann schrieb:
> Damit man Dir helfen kann, braucht man hier mindestens mal die
> Bezeichnung des Displays und den Programmcode, mit dem Du das Display
> initialisierst sowie den Code, mit dem Du "Hallo Welt" auf das Display
> schreiben willst...
>
> Sonst wird das nix.

Ja, volle Zustimmung

> Habe folgende bestellt :0,96 Zoll OLED Display I2C SDD1306 128x64

Das ist nicht eindeutig. Guck Dir mal die Fotos von Joachim an!

Besorge Dir einen "8CH Logic Analyzer", damit kannst du die I²C 
Kommunikation überprüfen.

von Olaf (Gast)


Lesenswert?

> Oder liegt es an der Programmierung ? Richtige Adresse ist eingestellt.
> Da zuckt nichts.

Das Problem wenn die Expertise nur noch aus kopieren und abschreiben 
besteht und sich keiner mehr mit den Grundlagen beschaeftigt besteht 
darin das man sich niemals Gedanken macht wofuer wohl ACK beim I2C wohl 
gedacht war...

http://www.ti.com/lit/an/slva704/slva704.pdf  (2.3 verstehen)

Ihr muesst also nur eure coolen Oszis benutzen und einmal auf den Bus 
kucken...

Olaf

von Manfred M. (opamanfred)


Angehängte Dateien:

Lesenswert?

Guten Morgen, habe diesen Typ bestellt

von Manfred M. (opamanfred)


Lesenswert?

Hallo Olaf, schaue mal, was ich bisher alles geschrieben habe. Das 
siehst du meine vorläufigen Grenzen. Wenn man das gelernt hat oder 
beruflich damit zu tun hat, ist es natürlich leicht, solche Aussagen zu 
treffe. Ich bin KEIN Profi. Manfred M.

von Olaf (Gast)


Lesenswert?

> Wenn man das gelernt hat oder beruflich damit zu tun hat, ist es natürlich
> leicht, solche Aussagen zu treffe. Ich bin KEIN Profi.

Als ich damals den PCF8574 in MCS48 Assembler programmiert habe war ich 
16J und auch noch kein Profi. Ich hab nur das Datenblatt gelesen.

Liess dir den Link durch den ich mitgeschickt habe. Danach sollte dir 
klar sein wie I2C funktioniert. Dann schaust du dir an ob du SCK und SDA 
so auf dem Bus wieder findest. Und dann schaust du nach ob dein Display 
bei einem Befehl ACK richtig setzt, es also mit seiner richtigen Adresse 
angesprochen wird.

Solltest du kein Oszi haben, normales I2C kann beliebig langsam sein. 
Also gerne auch 1Bit in 10s. Das kann man notfalls auch mit dem 
Multimeter sehen.

Wenn du dir sorgen machst die I2C-Hardware in deinem Mikrocontroller zu 
verstehen, sowas kann bei modernen Controllern manchmal verwirrend sein, 
das kann man in wenigen Zeilen Code komplett von Hand programmieren.

Olaf

von Manfred M. (opamanfred)


Lesenswert?

Danke Olaf für die Info. Ich habe damals nur die Grundlagen von Basic 
gelernt und mal mit dem C64 probiert. Sonst habe ich nur Hardware von 
ESER repariert. Für die Software hatten wir Spezialisten.  Kann ich den 
I2C Bus beim Arduino beeinflussen ? Assembler kann ich nicht und werde 
es sicher auch nicht mehr lernen. Ich kann nur etwas Basic und C .

von OMG (Gast)


Lesenswert?

Manfred M. schrieb:
> Danke Olaf für die Info.

Du laberst nur herum!

Fange klein an. Du hast es vermutlich überlesen, aber das ist
der erste Schritt (du brauchst dazu keine Messgeräte):

Andreas S. schrieb:
> Was sagt der I2C Scanner ?

Das ist ein eigenes Testprogramm für I2C. Hier z.B.:

https://playground.arduino.cc/Main/I2cScanner/

Zitat:
-------------------------------------------------------------------
This very simple sketch scans the I2C-bus for devices. If a
device is found, it is reported to the Arduino serial monitor.
This sketch is the first step to get the I2C communication working.
-------------------------------------------------------------------

Man beachte vor allem den letzten Satz.

von Einer K. (Gast)


Lesenswert?

Manfred M. schrieb:
> Guten Morgen, habe diesen Typ bestellt
Habe ich auch einige von im Einsatz.
Sehen exakt so aus.
Auch an ESP.

Der I2C Scanner findet sie an Adresse 0x3c, und so müssen sie dann auch 
benutzt werden.

10K Pullup sind schon drauf.
Ob das reicht/zuviel ist, zeigt das Osszi


Bisher keine Probleme mit.
Außer, dass sie fürchterlich schnell "einbrennen".

von Andreas S. (Gast)


Lesenswert?

Suche mal im Web nach "Hallo World" Beispiele.
Diese sind erprobt und zeigen auch bei intakten Display etwas
auf dem OLED an.
Die verwendete Library ist erst einmal egal - Du willst ja nur Dein
Display testen.

Ein Beispiel :
http://blog.simtronyx.de/ein-096-zoll-oled-display-i%C2%B2c-mit-128x64-pixel-und-ein-arduino/

von M. K. (sylaina)


Lesenswert?

Manfred M. schrieb:
> Wie kann man feststellen, ob ein OLED Display mit I2C-Bus defekt ist ?
> Oder liegt es an der Programmierung ? Richtige Adresse ist eingestellt.
> Da zuckt nichts.

1. Schritt: Schaun ob die serielle Kommunikation funktioniert, z.B. mit 
Timeouts arbeiten und sich hier eine Controll-Variable basteln deren 
Wert man visualisieren kann. So hab ich das gelöst und weiß somit 
schonmal, ob zumindest die Kommunikation funktioniert und das Display 
auch antwortet.

2. Schritt: Datenblatt des Displays studieren ;)

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Der I2C Scanner findet sie an Adresse 0x3c, und so müssen sie dann auch
> benutzt werden.

Sehr gut.

Die Aufgedruckte Adresse 0x78 ist offenbar um ein Bit verschoben.

Hier muss man aufpassen, welche Bibliothek man verwendet. Manche wollen 
den Input genau so verschoben haben (als 8bit 0x78) und manche wollen 
den Input nicht verschoben haben (als 7bit 0x3C).

von Besucher (Gast)


Lesenswert?

Servus,

ich hab ein 128x32 I2C OLED an einem Arduino Due.
3V3
GND
SDA
SCL

7 bit Adresse 0x3C
1
#include <Wire.h>
2
#include <Adafruit_GFX.h>
3
#include <Adafruit_SSD1306.h>
4
5
#define SCREEN_WIDTH 128 // OLED display width, in pixels
6
#define SCREEN_HEIGHT 32 // OLED display height, in pixels
7
8
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
9
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
10
11
void setup() {
12
  // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
13
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { 
14
    Serial.println(F("SSD1306 allocation failed"));
15
    for(;;); // Don't proceed, loop forever
16
  }
17
18
  display.clearDisplay();   // Clear the buffer
19
  display.display();        // buffer 2 Display
20
}
21
22
void loop() {
23
  display.setTextSize(1);
24
  display.setTextColor(SSD1306_WHITE);
25
  display.setCursor(0, 0);
26
  display.println("Hallo Welt");
27
  display.display();
28
}

von Einer K. (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Aufgedruckte Adresse 0x78 ist offenbar um ein Bit verschoben.
So ist es.
Das R/W Bit wird als Teil der Adresse betrachtet.


Stefan ⛄ F. schrieb:
> Hier muss man aufpassen, welche Bibliothek man verwendet.
Hier gibts zum Glück in der Arduinowelt die Einigung, das R/W Bit nicht 
zur Adresse zu zählen.
Es ist also recht egal, welche Library man verwendet, sofern sie auf 
Wire basiert, nutzt sie auch das Arduino Addressierungsschemata.

von Stefan F. (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Hier gibts zum Glück in der Arduinowelt die Einigung, das R/W Bit nicht
> zur Adresse zu zählen.

Gut zu wissen. Ich finde diese Design-Entscheidung vernünftig.

von M. K. (sylaina)


Lesenswert?

Stefan ⛄ F. schrieb:
> Die Aufgedruckte Adresse 0x78 ist offenbar um ein Bit verschoben.

Das ist ja auch völlig richtig. Man kann diese Displays nicht lesen 
sondern nur schreiben, deshalb ist nur die eine 8-bit-Adresse bei den 
OLEDs interessant. (R/W-Bit = 0 => Writemode) ;)

Arduino Fanboy D. schrieb:
> Hier gibts zum Glück in der Arduinowelt die Einigung, das R/W Bit nicht
> zur Adresse zu zählen.

So hab ich meine Lib auch aufgebaut was aber mehr mit meiner I2C-Lib zu 
tun hat, ich steuer damit nicht nur OLEDs an und ich denke die in der 
Arduino-Welt verwendete Lib für I2C ist da doch sehr ähnlich ;)

von Einer K. (Gast)


Lesenswert?

M. K. schrieb:
> und ich denke die in der
> Arduino-Welt verwendete Lib für I2C ist da doch sehr ähnlich ;)
Kann ich nicht beurteilen, kenne deine Lib nicht.
https://github.com/esp8266/Arduino/tree/master/libraries/Wire
https://github.com/arduino/ArduinoCore-avr/tree/master/libraries/Wire

Nahezu dasselbe Interface.
https://www.arduino.cc/en/Reference/Wire

von Thomas S. (thschl)


Lesenswert?

diese kleinen Displays sind über den farbigen Schnippsel an der 
Schutzfolie kodiert, je nach Farbe muss man einen anderen Typ für die 
Lib einstellen

von Einer K. (Gast)


Lesenswert?

Thomas S. schrieb:
> diese kleinen Displays sind über den farbigen Schnippsel an der
> Schutzfolie kodiert, je nach Farbe muss man einen anderen Typ für die
> Lib einstellen

Quelle?

von Johannes S. (Gast)


Lesenswert?

Bei den ST7735 von Adafruit gibt es diesen Mist mit den Bunten Tabs. Bei 
den Nachbauten ist das aber wieder anders. Und die ST7735 sind TFT, bei 
Oled habe ich diese komische Kennzeichnung noch nicht gesehen.

von Peter (Gast)


Lesenswert?


von Manfred M. (opamanfred)


Angehängte Dateien:

Lesenswert?

Hallo, melde mich mit Erfolg wieder. Das alte OLED ist defekt, die neuen 
funktionieren alle mit Adresse 0X3C . Habe eure Hinweise durchgearbeitet 
und bin im Programmieren einen Schritt weiter. Mit den richtigen 
Hinweisen und Quellen geht es voran. Schönes Wochenende

von Joachim B. (jar)


Lesenswert?

Manfred M. schrieb:
> Hallo, melde mich mit Erfolg wieder. Das alte OLED ist defekt

deswegen ja:

Joachim B. schrieb:
> hast du nur ein Display?
>
> Ich bestelle derlei immer mindestens doppelt weil ein Display ist kein
> Display, bekam schon zu oft Schrott und konnte nicht prüfen Display oder
> mein Fehler.

freut mich das es jetzt klappt und die Rückmeldung!

von Manfred M. (opamanfred)


Angehängte Dateien:

Lesenswert?

Programmiere jetzt weiter . Jetzt kommt die nächste Stufe dran , bei 
Irrtum wird nächstes probiert. Ich gebe nicht auf.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.