Forum: Mikrocontroller und Digitale Elektronik i2c Display EA 123A


von Martial (Gast)


Angehängte Dateien:

Lesenswert?

hallo zusammen

im Beitrag "Chipkarte mit Textdisplay" ist die Rede von einem EA T123
i2c display. ich habe einen atmega 32 und versuche dieses Display
anzusprechen. Dies leider ohne Erfolg :-(. ich wollte zum Test das
Beispiel aus dem Datenblatt ausführen, doch nicht mal dies klappt. ich
habe die Vermutung das ich die Daten als Paketschicken muss, doch weiss
nicht genau wie ich das machen soll.
Vielen Dank für Eure hilfe.
Gruss martial

von Ingo Henze (Gast)


Lesenswert?

Verwendest Du eine externe negative Kontrastspannung (Beschaltung siehe
Seite 11 im Datenblatt des EAT123) ?

Wenn nicht, mußt Du den interne Spannungsgenerator mit Bit G im
Funktion-Set Byte explizit einschalten. Das Beispiel geht von einer
externen Spannung aus.

Also als erstes (nach dem 0x00) nicht 0x2C sondern 0x2E senden.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

Hallo Ingo


ich verwende die single supply Schaltung, somit habe ich das
funktions-set geändert. Aber es funktioniert leider immer noch nicht.

gruss Martial

von Ingo Henze (Gast)


Angehängte Dateien:

Lesenswert?

Hmmmm,
ist denn alles richtig angeschlossen?
Wichtig sind die beiden Kondensatoren bei der "Single
Supply"-Beschaltung.

Außerdem ist zu beachten, das die Zählweise der Pins nicht in
Leserichtung, sondern von rechts nach links ist (wenn man von oben auf
das Display schaut, also die Pins oben link liegen).
Anschluß 1 (GND) liegt dann also ganz rechts, Pin 6 (SCL) ganz links
außen.

Ich sag das nur deshalb, weil ich bei meinem ersten Versuchsaufbau auf
dem Steckbrett einfach von links mit Pin 1 angefangen hatte. Hat dann
auch gar nichts funktioniert (logischerweise), aber glücklicherweise
haben es alle Teile überlebt :-)

Ansonsten habe ich bisher nur in Assembler programmiert. Hier mal meine
Initialisiereung:

.macro  LCD_INIT
  ldi    TWIadr, LCD_I2CADD+TWIwr ; Set device address and write
  rcall  TWI_start                ; Send start condition and address

  ldi    TWIdata, 0b00000000      ; Write Control-Byte
  rcall  TWI_do_transfer          ; Execute transfer

  ldi    TWIdata, 0b00101100      ; Function Set
  rcall  TWI_do_transfer          ; Execute transfer

  ldi    TWIdata, 0b00001110      ; Display/Cursor On
  rcall  TWI_do_transfer          ; Execute transfer

  ldi    TWIdata, 0b00000110      ; Set mode
  rcall  TWI_do_transfer          ; Execute transfer

  rcall  TWI_stop                 ; Send stop condition
.endmacro

Da ich eine externe LCD-Spannung verwende, hab ich das G-Bit nicht
gesetzt. Sonst sieht das ja fast aus, wie Deine Initialisiereung.
Wobei mir nicht klar ist, warum Du erst 0x0C und dann 0x0E sendest.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

hallo ingo

ich kann den kontrast mit dem Poti verstellen, daher sollte es schon
richtig angeschlossen sein. Wenn ich den Befehl 0x00 und nacher 0x0F
sende blinkt das Display auch. Daher glaube ich das der I2C richitg
konfiguriert ist, oder meinst Du das es zufall ist das dieser Befehl
durchkommt???

Gruss Martial

von Ingo Henze (Gast)


Lesenswert?

Was natürlich auch noch sein könnte, das Du zwischen den Befehlen warten
mußt, bis das Display sie verarbeitet hat. Laut Datenblatt sind das
normalerweise mindestens 20 µs, bei "Clear Display" sogar 1,1 ms.

Ich brauche das bei mir nicht zu berücksichtigen, weil ich meinen
Controller zum Strom sparen eh nur mit 32 kHz takte, da ist bei mir ein
Prozessortakt langsamer als diese 20 µs, so das ich mir die ganze
Warterei klemmen kann.

In den meisten Fällen sind die Probleme mit LCDs auf das ungenügende
Timing zurückzuführen, also speziell die Befehlsausführungszeit des
Displays muß beachtet werden. Zumidenst war das bei mir mit meinem
bisher verwendeten LCD-Modulen der Fall :-)

Gruß
Ingo

von Ingo Henze (Gast)


Angehängte Dateien:

Lesenswert?

So,
ich hab mal meinen AVR mit 1 MHz laufen lassen, und siehe da, es gibt
Probleme. Es müssen also unbedingt die Timings eingehalten werden.
Insbesondere muß man auch bereits nach dem Einschalten (Power-On)
mindestens 2 ms warten, bevor das Display überhaupt ordentlich
ansprechbar ist.

Das aber der Cursor (Unterstrich) nicht angezeigt wird, hat noch einen
ganz anderen Grund. Bei dem Display gibt es schlichtweg keine 8 Zeile
im Zeichen, die dafür eigentlich vorgesehen ist.
Das sieht man im Datenblatt von Electronic Assembly auf der letzen
Seite bei "Abmessungen" (siehe auch Bild im Dateianhang).
Man kann das auch gut erkennen, wenn man den Kontrast des Displays
soweit hochdreht, das alle Segemente dunkel werden.

Die Beispiele (und auch sonstigen Inhalte) aus dem Datenblatt sind
nahezu ausschließlich aus dem originalen Philips-Datenblatt des
verwendeten I2C-LCD-Controllers (PCF2116) kopiert worden.
Eben jenes Datenblatt habe ich mir auch geholt, hat mir bei manchen
Problemen besser weitergeholfen.
http://www.semiconductors.philips.com/acrobat/datasheets/PCF2116_FAM_4.pdf

Zum testen kannst Du ja mal den Block-Blink-Cursor einschalten, also
Bit B im Display/Cursor-On/Off Byte setzen.
Das wäre dann z.B. 0x0F, oder meintest Du das oben mit dem blinkenden
Display?
"...Wenn ich den Befehl 0x00 und nacher 0x0F sende blinkt das Display
auch..."

Dann war ja schon fast alles richtig :-)

Gruß
Ingo

von Martial (Gast)


Lesenswert?

Hallo Ingo

mit dem blinken habe ich genau diesen Cursor gemeint. Dann bin ich also
doch nicht so unfähig. Hast Du, das Du das blinken auf den display
geschickt hast, auch schon diese 2ms gewartet?

Ich werde jetzt mal das datenblatt das Du mir vorgeschlagen hast
studieren.  Ich danke Dir für die mühe.

Gruss martial

von Ingo Henze (Gast)


Lesenswert?

Hallo Martial,

ja, ich warte vor der gesamen LCD-Initialisierung einfach 2 ms (bei
meinem kleinen 1MHz Testprogramm).
Und dann erst starte ich TWI und das Sende der Steuerungs-Bytes.
Hängt natürlich auch von der Taktfrequenz Deines Controllers ab, und
davon, was Du vorher noch im Programm erledigen mußt (Initialisierung
sonstiger Komponenten).

Ich habe es so gemacht, das ich die LCD-Initalisierung als letztes
ausführe, bevor das eigentliche "Hauptprogramm" startet. Alles andere
erledige ich vorher, und habe damit schon eine gewisse Wartezeit für das
LCD, die ich aber sinnvoll nutzen kann.
Bei meinen 32 kHz Systemtakt brauchte ich dann keine zusätzliche
künstliche Verzögerung einbauen, weil sowieso bereits mehr als 2 ms
nach dem Power-On-Reset vergangen waren.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

Hallo Ingo
ich habe einen Teilerfolg erziehlt, doch ist dies noch nicht
zufriedenstellend ;o).
Ich kann jetzt auf das Display schreiben, doch es zeigt auf der ersten
und auf der dritten(letzten) das gleiche an. Hier meine init schritte:

write_i2c(0x00);  // 00 control byte
write_i2c(0x22);  // 22 funktions set 1 Linie
write_i2c(0x0E);  // 0E cursor on, display on
write_i2c(0x04);  // 04 entry mode set cursor
write_i2c(0x8B);  // 8B Anzeigepos

um zu schreiben sende ich :

write_i2c(0x40);  // controll byte

write_i2c(0xAA); // *
write_i2c(0xEF); // H
write_i2c(0xEC); // A
write_i2c(0xEC); // L
write_i2c(0xE1); // L
write_i2c(0xC8); // O
write_i2c(0xAA); // *

besten Dank und Gruss Martial

von Ingo Henze (Gast)


Lesenswert?

Da hast Du Dich jetzt an dem  Beispiel aus dem Philips Datenblatt
orientiert, denke ich mal.

Dort wird aber mit 0x22 "Function Set" nur ein einzeiliges Display
mit 24 Zeichen initialisiert (steht ja im Kommantar sogar dahinter
:-).
Das EA T123 ist aber dreizeilig zu je 12 Zeichen. Da es das explizit
nicht gibt, muß es wie ein vierzeiliges initialisiert werden.
Also Bit M,N im "Function Set" gesetzt, ergibt dann zusammen mit dem
G-Bit für die Kontrastspannung 0x2E.
Nach dem 0x00 nicht 0x22, sondern 0x2E senden.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

Hallo Ingo

Nein ich habe mich da an ein Beispiel von einem Leidensgenossen
gehalten fg. Das mit dem 0x2E habe das schon versucht und dann macht
es gar nichts mehr.

gruss Martial

von Martial (Gast)


Lesenswert?

Hmmm komische Sache plötzlich kann ich auf der 1.Zeile schreiben :-).
aber es gibt mir eine Fehlermeldung auf dem Bus. Ich glaube jetzt ist
wieder ein Zeit Problem. Mal schauen ob das auch noch weg ghet.$

gruss Martial

von Ingo Henze (Gast)


Lesenswert?

Achso, na ich hatte in Erinnerung, daß sich das Philips-Beispile auf ein
einzeiliges Display bezieht, daher meine Annahme.
Es ist aber definitiv falsch, oder funktioniert das etwas bei dem
Leidensgenossen so?
Ich habe ja das gleich Display, und ich mache das "Function Set" mit
0x2E, an der Stelle wurde sogar das EA-Datenblatt korrekt geändert :-)
Andererseits kommt mir das 0x8B komisch vor, damit schreibst Du ja in
den nicht sichtbaren Bereich.
Beim "vierzeiligen" Display beginnen die Zeilen bei 0x00, 0x20, 0x40
und 0x60.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

ich habe einen weiteren fehler gefunden, und zwar hatte ich es noch auf
dekrement eingestellt, darum auch die addresse am anderen ende. aber
als ich dies noch geändert habe kann ich auch mit den "normalen"
adressen die zeilen ansprechen.
besten Dank und Gruss Martial

von Ingo Henze (Gast)


Lesenswert?

Ahso,
so genau hatte ich mir Deine Initialisierung im einzelnen nicht
angesehen, habe mich gleich auf den ersten Fehler gestürzt, der mir ins
Auge gesprungen war :-)

Na dann weiterhin viel Erfolg. Nun würde mich aber noch interessieren,
was das für ein Gerät werden soll (bin halt neugierig), denn das
EA-T123 ist nicht grad ein Mainstream-Display.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

es ist noch schwierig das in ein paar zeilen zu erklären, doch ich
versuche das mal ganz kurz zu erklären.
die ganze machine soll am schluss eine solarzelle so ausrichten, das
sie die grösste energie erzeugen kann. mit verschieden messinstrumenten
(gps, kompass, sonneneinstrahlwinkel messgerät(selbst gebaut)) wird die
position der zellen berechnet und dann die motoren angesteuert. mit dem
display kann man sich dann durch das steuermenue schalten und einige
einstellungen vornehmen.

gruss martial

von Ingo Henze (Gast)


Lesenswert?

Danke!
Klingt ja ganz interessant.

Hab erstmal kurz überlegen müssen, was da mit GPS und Kompass gemacht
werden soll. Ich würde einfach nur durch Lichtmessung auf größte
Helligkeit positionieren.
Aber mit den anderen Informationen kann man ja einfach die aktuelle
Position der Sonne berechnen und dann dirket darauf ausrichten, wenn
ich das richtig sehe. Tolle Sache, aber auch ein nicht unerheblicher
Aufwand...

Gruß
Ingo

von Martial (Gast)


Lesenswert?

Hallo Ingo

ich bin wieder am Display :o). ich kann wohl alles schreiben was ich
will, jedoch kann ich keine Pos. blinken lassen. dies brauche ich für
eine Zahlen eingabe, wenn diese Pos nicht blinkt weiss ich nicht bei
welcher Stelle ich mich gerade befinde. Obwohl ich bei der Init. eine
0x0E schreibe.

Besten Dank und Gruss Martial

von Ingo Henze (Gast)


Lesenswert?

Ja eben nich 0x0E, sondern 0x0F mußt Du für den Blinkenden Cursor bei
der Initilisierung schreiben.
0x0E schaltet ja nur den (nicht sichtbaren) Unterstrich-Cursor ein. Das
Bit0 (Bit B im Display Control Byte) muß gesetzt werden, also 0x0F.

Gruß
Ingo

von Martial (Gast)


Lesenswert?

hallo Ingo

danke für deine hilfe, jetzt muss ich es nur noch an die richtige pos
schieben. dies sollte ja mit dem gleichen befehl gehen wie man auf den
display schreibt.

gruss martial

von Martial (Gast)


Lesenswert?

hallo ingo

das projekt display ist für den moment beendet. ich kann alles so
schreiben und blinken lassen wie ich es will. :o)
komisch ist nur, das ich auf verschiedene addressblöcke zugreifen kann.
die blink positionen sind auf den standart vom datenblatt und schreiben
kann ich auf den anderen (zeile1 80; zeile2 94; zeile3 B4)
hauptsache es funktionert.

besten dank und gruss martial

von Ingo Henze (Gast)


Lesenswert?

Ich habe mich zugegebenermaßen in letzter Zeit nicht weiter mit dem
Display beschäftigte, denn bei "Chipkarte mit Textdisplay" ist es so
gut wie aus dem Rennen.
Als ich es noch genutzt hatte, war es nur für die Textausgabe gedacht,
so Sachen wie Cursor brauchte ich da nicht. Daher kann ich zu dem von
Dir beschrieben Effekt auch nichts weiter sagen.

Hauptsache aber, es macht nun alles zu Deiner Zufriedenheit :-)

Gruß
Ingo

von Klaus R. (klaus2)


Lesenswert?

...ich weiß, man öffnet keine alten Threads - aber ganz vll "hört" 
Martial ja noch mit? Kannst du noch ein paar Details zu deinen 
Problemlösungen posten?

Danke.

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.