www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String LCD ATmega8


Autor: Pascal (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leute ich bins wieder,

habe beim Senden von String ans LCD ( 2x16 ) Probleme.

Problem Anzeige die Sein sollte :
Test

IstAnzeige:
||Test|||||||Test||
||Test|||||||Test||

Ungefär sowas, und jenachdem wieviel buchstaben ich verwende wenns zu
wenige oder zuviele sind dann rattet das gaze display dami tmeine ich
die buchstaben laufen alle durcheinander sehr shcnell im Display.

Quelltext im Anhang. HAbe mich versucht ans Turoial zu halten.
Super wäre Natürlich wenn jemand Sowas einfachs und funktionierendes
Hätte. ( 4 Bit LCD ) und (Tutorial LED-Routinen )

Danke

MFg
Pascal

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Initialisierungsroutine ist deiner Ansicht nach überflüssiger
Ballast?

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kommst du darauf ? bzw wie meinst du das ?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu ist wohl die Routine "lcd_init" gut?

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich denke ich weis worauf du hinaus willst. Wäre zwar einfahcer wenn dus
gesagt hättest ich probiere es heute mal aus. Danke.

Stimmt habe nicht bedacht das dies im Tutorial nicht beschreiben ist.

Autor: Pascal (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, habe es gemacht doch leider hats nicht wirklich geklappt
anstatt Test kommt jetzt der Text tseT und auch mit dnen schwarzen
Balken :-(

Autor: Qwerty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du da UART-Code recycled? Warum sendest du dem Display nach dem
print ein CR/LF ("Byte 10"/"Byte 13")? Ein LCD-Controller druckt
stattdessen nur zwei Sonderzeichen (sind das vielleicht die Zeichen
nach dem "Test"? BTW: In deinem Beispielcode gibt es auch keinen
String "Test", woher soll der kommen?). Ich kenne jetzt die von dir
verwendeten LCD-Routinen nicht, aber üblicherweise läuft es doch bei
allen LCD-Libs nach dem gleichen Schema ab (Achtung, Pseudo-Code!):

lcd_init();
lcd_clear();
lcd_print("Test 1");
tu_was();
lcd_gotoxy(1,1);         // Nur Cursor zurücksetzen, Display wird dabei
nicht gelöscht
lcd_print("Test 2");     // "Test 2" überschreibt "Test 1"

Das Display muss gelöscht werden, um die Balken von der Initialisierung
wegzubekommen. Dann kann man einen eigenen Text hinschreiben. Der
interne Cursor des Displays steht danach am Ende deines Textes. Machst
du dann nochmal "print", so schreibst du genau an dieser Stelle
weiter, und die Anzeige "läuft durch". Du musst also vor Ausgabe
eines neuen Textes entweder das Display erneut komplett löschen, oder
zumindest den Display-Cursor auf die gewünschte Stelle setzen.

PS: Habe mir gerade das Tutorial angesehen. Es gibt zumindest
lcd_clear. Diese Routine müsstest du dann aufrufen, bevor du was neues
schreibst. Später kannst du ja mal selbst ein "lcd_gotoxy" schreiben,
der Ansatz ist ja im Tutorial erklärt.

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der beschriebene schwarze balken weist auf einen Timingfehler während
der initialisierung hin! besorgen Dir mal bitte ein Datenblatt, und
schaue Dir ein paar Sätze zur Initialisierung an...

Autor: Qwerty (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stimmt, der Balken sollte nach korrekter Initialisierung automatisch
verschwinden. Habe ich falsch beschrieben. Ein zusätzlicher "clear"
schadet natürlich nicht.

Fällt mir gerade noch ein: Die Wartezeiten im Beispielcode sind
natürlich "busy waits", deren effektive Länge von der Taktfrequenz
abhängen. Passt die Taktfrequenz des Controllers auch zur Taktfrequenz
der Tutorial-Hardware, oder läuft er vielleicht schneller? Dann werden
eventuell die Wartezeiten zwischen den Befehlen zu kurz.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein zusätzlicher "clear" schadet natürlich nicht.

CLEAR ist aber einer der wenigen Befehle, der sehr lange dauert (siehe
Datenblatt des LCDs). Den sollte man daher nicht unnötig aufrufen.
Besonders wenn man das Busy des LCDs nicht abfragt und stattdessen mit
Warteschleifen oder Timer-Synchronisation arbeitet, ist CLEAR nach der
Erstinitialisierung tabu, es würde das gesamte Timing durcheinander
bringen.
Stattdessen setzt man die interne Cursorposition entsprechend (Set
DD-RAM-Adress) und überschreibt den alten Text.

...

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.