Forum: Mikrocontroller und Digitale Elektronik serielles LCD selber basteln - C-Code Probleme


von Christian Faust (Gast)


Angehängte Dateien:

Lesenswert?

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

von Eckhard (Gast)


Lesenswert?

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

von Christian Faust (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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

von Christian Faust (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.