EA DOGM und ARM7

Gast #885250
Lesenswert?

Gute Tag,

     Ich habe ein LCD EA DOGM162L-A mit einem ADuc7020 geschaltet und 
schein leider am Display nichts zu bewegen. Ich habe alle Pins getestet 
und es kommt bei High 3.3V. Anbei die Schaltung angehängt.

Vielen Dank für Ihre Hilfe.
Angehängte Dateien:
#885536
Lesenswert?

Ausgänge werden so auf high gesetzt: GP1SET = LCD_RS;
Also nicht '|=', sonder nur '='.
Rückgesetzt (auf low) werden sie so: GP1CLR = LCD_RS;
Also nicht das betreffende Bit in GP1DAT löschen, sondern das 
betreffende Bit in GP1CLR setzen!

Vielleicht solltest du dir einfach ein paar Makros schaffen:
1
#define lcd_set_rs() GP1SET = (1 << 23)
2
#define lcd_clear_rs() GP1CLR = (1 << 23)
3
#define lcd_set_e() GP1SET = (1 << 22)
4
#define lcd_clear_e() GP1CLR = (1 << 22)
5
#define lcd_set_rw() GP1SET = (1 << 20)
6
#define lcd_clear_rw() GP1CLR = (1 << 20)
außerdem muß die lcd_send_bits geändert werden (die clear_data kann 
damit entfallen)
1
void lcd_send_bits(int data)
2
{
3
    data &= 0x0F;
4
    GP1CLR = (0x0F << 16);
5
    GP1SET = (data << 16);
6
}
Probier's mal aus!
Gast #885614
Lesenswert?

Ich hab die makros benutzt, aber leider ohne Erfolg. Ich habe 2 LCD wo 
ich gerade ausprobiert habe. Das prb ich weiss nicht wie kann ich 
testen, ob die LCDs wirklich Daten bekommen, anders gesagt ob sie nicht 
kapput sind.
Gast #885685
Lesenswert?

Auf dem P1.x sind doch die SPI Signale, schließe das DOG Modul doch im 
SPI Mode an, dann werden nur noch 4 Leitungen für die Verbindung 
benötigt.

Das Schreiben der Bits/Clk macht dann der SPI, nur noch latchen, warten 
100us dann darf das nächste Byte geschrieben werden.

Ist doch viel einfacher, als das Display über 4-Bit-Bus anzusteuern.

Das Timing ist wichtig, z.B. der CLS Befehl benötigt wirklich die 
angegebenen ms vom Datenblatt.
Gast #887924
Lesenswert?

Die EADOG-M Displays sind sehr empfindlich was die Initialisierung 
angeht. Außerdem haben sie die nervige Eigenart, dass sie erst nach 
erfolgreicher Initialisierung etwas anzeigen. Mache Dir also keine 
Sorgen, die Dinger gehen meistens und können auch ein bisschen was ab. 
Suche mal nach Code für die Initialisierung (gibt's hier im Forum), 
passe sie auf Deinen Controller an und freue Dich über das Ergebnis!
Gast #895336
Lesenswert?

Wenn du ein Display mit 3.3V benutzt musst du (bin nicht sicher) die 
interne Ladepumpe zuschalten. Guck' besser nochmal genau ins Datenblatt.

Auch das Zuschalten der Betriebsspannung ist kritisch, lieber die 
Initialisierung erst nach 1s starten, wenn die Versorgung des Moduls 
stabil ist.
Gast #895439
Lesenswert?

Hallo,

Anbei mein C-Code, allerdings für einen ARM-Prozessor LPC23xx.

Initialisierung:
LCD_TaskInit(0);

Zyklischer Aufruf aus dem Main-Loop:
LCD_Task();

Im Interrupt wird die CS Leitung automatisch gelöscht.

Mit dabei sind vollständige Routinen:
LCD_Char(char Dat);
LCD_CLS(unsigned char Lines);
LCD_Locate(int X, int Y);
LCD_Text(char * sText);
LCD_Int(int iVal);
LCD_NibbleHex(unsigned char x);
LCD_ByteToHex(unsigned char cVal);
LCD_IntToHex(int iVal);
LCD_LongToHex(unsigned long iVal);
(Die LCD_Float Routine habe ich noch nicht gebraucht, daher auch nicht 
hinzuerfunden.)

Nur noch die IO's und den verwendetetn Timer anpassen und fertig. Meine 
Routinen warten nicht bis die Daten im LCD sind, sondern buffern diese 
im RAM. Erst der LCD_Task() macht die Ausgabe, getriggert über Timer. 
Damit bleibt die Applikation nicht wegen der LCD Ausgabe stehen. 
Schließlich hat der Prozessor ja noch eine Hauptaufgabe und die ist 
meistens nicht das LCD zu beschreiben.
Alle LCD Befehle die länger als 100us benötigen dürfen nicht verwendet 
werden, daher habe ich das LCD_CLS() anders gemacht.

@Jaouad: Wieso steuerst Du eigentlich das CS Signal nicht an (LOW) wenn 
Du Daten/Steuerwörter übertragen willst und nimmst es dann wieder weg 
(HI)?

Gruß MM
Angehängte Dateien:
Gast #895451
Lesenswert?

Wenn man experimentiert mit dem Display und schrott rein schreibt, dann 
ist die Funktion des Displays kaputt. Am besten man macht es vor jedem 
Versuch Spannungslos damit es sich resetet!
Sonst passiert es, dass man einen guten Quellcode hat aber im Display 
dennoch nichts zu sehen ist.
Gruß MM
Angehängte Dateien:
Gast #896237
Lesenswert?

@Thilo
da gibt es haeufig gravierende Unterschiede zwischen einem "warm reset" 
und einem "power-on reset". Auch noch zu beachten, die Kondensatoren auf 
einem Board verhindern oft einen power-on reset, wenn man ihnen nicht 
genug Zeit gibt sich zu entladen.

Just my 2 cents, Robert
Gast #896486
Lesenswert?

ich habe gerade bemerkt:

*(seite 55) Serial Clock Period : tSCYC  min = 200ns => 5Mhz
*(seite 66) Im Aduc7020 kann ich max "SPI speed in MHz = 3.482Mhz" 
erreichen.

Kann es daran liegen, dass es nicht funktioniert ?
Gast #896539
Lesenswert?

>Kann es daran liegen, dass es nicht funktioniert ?
SPI speed, nicht wirklich.
Das hier "*(seite 55) Serial Clock Period : tSCYC  min = 200ns => 5Mhz" 
ist etwas ungluecklich formuliert aber bedeutet ebenfalls 
Maximalgeschwindigkeit. Alsoe die Maximalgeschwindigkeit des Micros ist 
lansamer als die der Peripherie, dann sollte schon mal alles in Ordnung 
sein.

Robert
Gast #896546
Lesenswert?

Mach doch den SPI so langsam wie möglich, mann muss sowiso 100us warten 
bis man das nächste Byte schicken darf, so wie in meinem Codebeispiel.
Dadurch wird das ganze auch unempfindlicher wegen sonstigere Störungen.

An der Geschwindigkeit solltest Du erst anfangen zu Optimieren wenn es 
überhaupt mal funktioniert!
Gast #896579
Lesenswert?

man muss das timing bei diesen EADOG dingern genau einhalten. ich hatte 
mal das problem, dass 3 wollten und ein viertes nicht, weil ich irgendwo 
zu schnell war. also genau die timing-diagramme im datenblatt beachten, 
dann klappt das schon.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren