mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EA DOGM und ARM7


Autor: Ka_deu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es handelt sich um einen Softwarefehler in Zeile 183.

Autor: Ka_deu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Softwarefehler meinen Sie ?

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte ein dezenter Hinweis darauf sein, dass man ohne den 
Programmcode zu sehen nichts zu dem Problem sagen kann.

Autor: Ka_deu (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Anbei Programmcode...

Autor: Kai F. (k-ozz)
Datum:

Bewertung
0 lesenswert
nicht 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:
#define lcd_set_rs() GP1SET = (1 << 23)
#define lcd_clear_rs() GP1CLR = (1 << 23)
#define lcd_set_e() GP1SET = (1 << 22)
#define lcd_clear_e() GP1CLR = (1 << 22)
#define lcd_set_rw() GP1SET = (1 << 20)
#define lcd_clear_rw() GP1CLR = (1 << 20)
außerdem muß die lcd_send_bits geändert werden (die clear_data kann 
damit entfallen)
void lcd_send_bits(int data)
{
    data &= 0x0F;
    GP1CLR = (0x0F << 16);
    GP1SET = (data << 16);
}
Probier's mal aus!

Autor: Ka_deu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke ich probier´s aus...

Autor: Ka_deu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Was anderes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jansus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jaouad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe nochmal mit spi geschaltet, und scheint immer noch nichts am 
display. anbei die schaltung

Autor: Jaouad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
und hier noch der Quellecode...

vielen danke für Ihre Hilfe!

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Was Anderes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Was Anderes (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Thilo M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>vor jedem Versuch Spannungslos damit es sich resetet!

Dafür hat das Ding einen Reset-Pin. ;)

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jaouad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, vielen dank für die Tipps, ich mache jetzt die Änderungen und hoffe 
dass es funktioniert...

Autor: Jaouad (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Robert Teufel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Was Anderes (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Jaouad (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Jaouad (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe die Wartezeiten mit einem Timer genauer beschrieben. Auch noch 
das CS-Signal betrachtet...Code im Anhang.

Autor: piepvogel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.