www.mikrocontroller.net

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


Autor: Christian Faust (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Eckhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Faust (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Faust (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.