Sorry, dass ich den 1000000sten Eintrag zu dem Thema eröffne, aber ich
werd einfach nirgends fündig.
Ich habe ein LCD 2x16 (LMB162AFC) mit nem Mega16, 8MHz interner Osz. am
laufen. Ich verwende die Initialisierungen etc (lcdroutines.h) laut
Tutorial. Ausgeben möchte ich den ADC-Wert der an PA0 angelegten
Spannung. Beim laufenlassen nach dem Programmieren wird auf dem Display
nichts angezeigt, beim debugging werden die Zeichen aber wie gewollt
nacheinander ins LCD geschoben. Beim Step-by-Step debugging ist mir
aufgefallen, dass der Code in der Funktion lcd_string(char *data)
hängenbleibt, nachdem das letzte Zeichen geschrieben wurde.
Die Ausgabe auf dem LCD hat folgende Form: "ADC Wert: 222". Dabei wird
zuerst über lcd_string("ADC Wert: ") der immer gleichbleibende
textbaustein gesendet, in der nächsten zeile dann der aktuelle adc-wert
über lcd_string(Buffer), wobei in Buffer mit itoa der adc-wert
geschrieben wurde.
Setze ich beim debugging nen breakpoint nach dem senden der ersten
zeichen ("ADC Wert:") und lass das programm laufen, dann werden die
zeichen auch nicht gesendet, nur beim einzelschritt-debugging werden sie
gesendet.
Dann zum 1000sten Mal die Standardantwort für alle die es nicht im Tutorial oder den anderen Threads gefunden haben: 1. Es gibt ein Busy Flag bei den LCDs 2. Das ist dann mit 100%iger Sicherheit ein Timingproblem! Busy Flag nicht oder nicht sauber abgefragt und das LCD mit Daten überrannt! Es gibt dazu z.B. auf Sprut.de eine ausführliche Abhandlung oder im Datenblatt. Ist es denn so schwer die Dokus zu lesen oder die Suchfunktion im Forum zuu benutzen?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.