Forum: Mikrocontroller und Digitale Elektronik LCD Ansteuerung in C wiederholt dinge.


von C. H. (hedie)


Lesenswert?

Hallo

Ich steuere ein DISPLAYTECH 161A Display (1x16 Zeichen)
mittels diesem Code an:

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#LCD-Ansteuerung

Jetzt habe ich jedoch folgendes problem...

wenn ich diesen Code ausführe:
1
 while(1)
2
    { 
3
  delay(); //ca 0.5 Sekunden
4
  set_cursor(0,0);
5
  lcd_string("T");
6
  
7
    }

Dan steht auf dem Display nicht einfach "nur" T sondern
alle 0.5 Sekunden kommt eins Dazu also

T
TT
TTT
TTTT
TTTTT

Doch woran liegt das?

Was ich auch merkwürdig finde, ist das die ersten 8 Zeichen als 1. Zeile
gelten und um auf die zweiten 8 Schreiben zu können muss man die 2. 
Zeile umschalten.

Das dies mit dem Display zu tun hat ist mir jedoch klar.

Danke schonmal.

von holger (Gast)


Lesenswert?

>Dan steht auf dem Display nicht einfach "nur" T sondern
>alle 0.5 Sekunden kommt eins Dazu also

Das ist einfach. Der Fehler liegt in set_cursor().

von Bereits F. (Firma: D.ade) (bereitsfort)


Lesenswert?

an der while schleife?

von Bereits F. (Firma: D.ade) (bereitsfort)


Lesenswert?

wenn du nur einmal "t" senden willst gehört das delay, der cursor set 
und die textausgabe vor die while zeile

außerdem scheint der cursor set  so nicht zu funktionieren?

von henning (Gast)


Lesenswert?

Also ich weiß ja nicht was du vor hast, aber ich würde das Display nicht 
so direkt in die while(1) klatschen, kostet Rechenaufwand, wenn er alle 
0,5 Sekunden (in diesem Fall) die Displayroutine durchrattert obwohl 
sich eh nix ändert... Und der 0,5 delay in der while(1) bremst natürlich 
auch



Grüße

von fubu1000 (Gast)


Lesenswert?

Hallo,
wenn du in die erste Zeile , erstes Zeichen schreiben willst musst du:
set_cursor(0,1); benutzen.

Gruss

von C. H. (hedie)


Lesenswert?

Danke....

Hat Funktioniert

Der Tipp mit

set_cursor(0,1);

war der entscheidende :)

von Jochen M. (taschenbuch)


Lesenswert?

>>wenn du in die erste Zeile , erstes Zeichen schreiben willst musst du:
>>set_cursor(0,1); benutzen.

Keine Ahnung ob das stimmt, aber WENN das so ist, dann ist ein SEHR, 
SEHR schlechter Porgrammierstil. x zählt ab 0 und y ab 1? Und so ein 
Parameterinterface in einer Hochsprache? Sorry, das ist unakzeptabel, 
dumm, verwirrend und völlig unkonsistent. Welcher Depp programmiert so 
etwas?

@OP,
Kannst Du nicht deine aktuelle set_cursor Routine mal posten, dann klärt 
sich das bestimmt schnell. Die while-Schleife zu verdächtigen (wie 
einige geschrieben haben) ist unsinnig. Man darf an die gliche 
Cursor-Position das gleiche Zeichen schreiben SO OFT MAN WILL!
Ob es sinnvoll ist, darum geht es hier ja nicht. Gehen MUSS es, sonst 
stimmt woanders etwas im Programm nicht.

Jochen Müller

von Jochen M. (taschenbuch)


Lesenswert?

Ok, dann hat sich das ja geklärt.

ABER:
set_cursor(x,y) WOBEI x ab 0 zählt, y ab 1

Wieso wird so ein UNGLAUBLICH SCHLECHTER Programmierstil in Tutorials 
verwendet? Sollen die Anfänger darauf getrimmt werden, so schlecht zu 
arbeiten?

Jochen Müller

von fubu1000 (Gast)


Lesenswert?

Naja sehr sinnvoll ist es nicht, aber wenn man den Code liest ist es 
jedem klar.
Und wer es anders mag kann die das switch-case ja ändern.

Gruss

von henning (Gast)


Lesenswert?

@jochen,
die while(1) sollte man möglichst knapp halten und keine unötigen delays 
einfügen, genauso wie in einer Interruptroutine. Stattdessen sollte man 
eher durch if`s Funktionen aufrufen!! Sonst wir alles sinnlos 
durchgerattert und das kostet wertvolle Zeit.
Das nur so nebenbei, ich möchte dem guten Menschen der das hier gepostet 
hat nur wertvolle Tipps geben ;-)


Grüße

von Falk B. (falk)


Lesenswert?

@  Jochen Müller (taschenbuch)

>Wieso wird so ein UNGLAUBLICH SCHLECHTER Programmierstil in Tutorials

Nun lass mal die Kirche im Dorf. Zu JEDER Funktion gibt es eine 
Beschreibung, die den Wertebereich der Parameter klar definiert. Wer 
lesen kann . . .

MFG
Falk

von fubu1000 (Gast)


Lesenswert?

Wenigstens steht Falk zu seinem Code im Tutorial^^.
Nein nur Spaß.
Wie schon oben geschrieben wer lesen kann , der kann den Code ja einfach 
auf sich selbst anpassen.

Gruss

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.