serielles LCD selber basteln - C-Code Probleme

Gast #35790
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
Angehängte Dateien:
Gast #35791
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
Gast #35792
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
Gast #35793
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

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