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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.