Hallo ihr Bastelwütigen, ich möchte mir ein serielles LCD selber basteln, dass ich über einen Pegelwandler an den PC anschliesen will. Das ganze will ich in C programmieren - komme im Moment aber nicht so recht weiter (vielleicht kennt jemand eine Homepage mit einem ähnlichem Projekt - ich habe bisher nur sowas für asm entdeckt) Folgendes Problem: Die Funktion putchar_lcd funktioniert grundsätzlich wunderbar - kann beliebig oft aufgerufen werden und zeigt immer das passende ASCii zeichen an, wenn ich jetzt statt: putchar_lcd('d') einfach putchar_lcd(uartbuffer) hinschreibe (uartbuffer ist das per uart empfangene byte) verliert das Programm mehr als 50 % der Zeichen, obwohl ich nur 9600 bit eingestellt habe, die serielle Verbindung eigentlich funktioniert und das ganze Interrupt gesteuert ist - ich hab' den code mal gekürzt angehängt und hoffe stark auf eure Hilfe!! mfg Christian
Hallo, Du solltest die empfangenen Daten erst in einen Puffer schreiben und den dann zur Ausgabe auslesen. Die LCD´s sind einfach grottenlangsam und Du kannst evtl die Zeichen garnicht so schnell ausgeben wie ein neues kommt. Damit unterbricht sich deine ISR evtl. selbst. Ich würde auch dir Funktion putchar_lcd unbedingt aus der ISR rausnehmen. Bau Dir nen kleinen Empfangspuffer, den Du als Ring verwaltest und schau einfach nach ob dort was drin ist. wenn was drin ist dann gebe es aus. Eckhard
Hallo Eckhard, vielen Dank für die rasche Antwort - hatte schon fast befürchtet dass es auf sowas rauslaufen wird. Meine Methode wär halt simpelst gewesen, aber wenn s nicht funktionieren will...... Viele Grüße Christian
Hi der typische LCD-Befehl geht 37µs. Ein Byte bei 38400 Baud aber 260µs. Da sollte man noch ohne Puffer direkt aufs LCD schreiben können. Selbst wenn man das Busy-Bit nicht auswertet und hart mit Delays arbeitet mit z.B. 100µs ist da immer noch ein Faktor zwei an Zeit dazwischen. Einzig bei Cursor Home und Clear Display muß man aufpassen da die etwa 1,5ms gehen. Aber das kann man im seriellen Protokoll entsprechend abfangen. Für Clear Display z.B. 8 Bytes schicken. Ein Ringpuffer mit beispielsweise 32 Byte ist aber auch nicht verkehrt. Matthias
Hallo nochmal, ich hab's jetzt mit buffer gemacht - funktioniert bis auf eine Kleinigkeit ganz gut..... Vielen Dank für eure Hints!!! Viele Grüße Christian
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.