LCD flackert, spinnt (Pollin Board + Fleury lib)

Gast #936835
Lesenswert?

Hallo,

ich habe ein Problem mit einem 2x16Zeichen LCD (HD44780). das ich mit 
dem pollinboard 
(http://www.pollin.de/shop/images/article/big/G810038.JPG) verbunden 
habe. Achtung: Das ist nicht diese Zusatzboard mit Display von Pollin!

Die Anzeige spinnt irgendwie. Ich gebe im Testprogramm einfach nur etwas 
Text auf den zwei Zeilen aus. Normalerweise müsste das Display diesen 
einfach nur ausgeben und so verharren. Aber irgendwie Flackert es als ob 
ständig neu beschrieben wird, dabei springt der Text aus der zweiten 
Zeile manchmal in die Mitte der ersten Zeile. ???

Ich bin ratlos und brauche dringend Hilfe.
Angehängte Dateien:
#936860
Lesenswert?

>>Andreas Kaiser wrote:
>> Er startet neu.

>Ja? Macht er das?

Normaler Weise dürfte man das doch gar nicht, oder?
Ich meine es existiert dann ja keine Rücksprungadresse zu der gesprungen 
werden kann. Demnach würde er sich einen undefinierten Wert vom Stack 
holen und dahin springen. Da meist jedoch 0x00 im Speicher steht wird er 
wahrscheinlich immer wieder von vorne beginnen wodurch das Display eben 
flackert.

Richtig wäre also:
1
int main(void)
2
{
3
    lcd_init(LCD_DISP_ON);
4
   lcd_gotoxy(0,0);
5
    lcd_puts("LCD Test Line 1\n");
6
  
7
   lcd_puts("Andere Line 1");  
8
 
9
    while(1);
10
    return 0;
11
}
Das return 0 bleibt erhalten, damit der Compiler nicht meckert, denn 
eine int-Funktion muss auch nen int zurückgeben, sonst ist es void, dies 
ist jedoch bei der Main-Funktion nicht erlaubt.
#936865
Lesenswert?

Bimbi wrote:
> Selbst mit einer einer Endlosschleife (while(1)) am Ende der Main
> funktioniert es nicht.

Also die muss aber dann vor das "return".

Hast du evtl. nen Kurzschluss zwischen den Datenleitungen oder RS oder E 
deines Displays? Vielleicht bringt das den Controller zum Reset.

Also es muss wirklich exakt so aussehen, wie bei Timo's Beitrag.
Semikolon nach "while(1)" nicht vergessen.
#936868
Lesenswert?

Timmo H. wrote:

> Ich meine es existiert dann ja keine Rücksprungadresse zu der gesprungen
> werden kann.

Doch, üblicherweise schon. Weil der Startup-Code meist main() als ganz 
normale Funktion aufruft. Was danach passiert ist vom Compiler bzw. 
dessen Startup-Code abhängig. Einer stellt sich tot, der nächste fängt 
wieder von vorne an.

> Das return 0 bleibt erhalten, damit der Compiler nicht meckert,

Sollte er auch so nicht, denn ein nicht gänzlich verblödeter Compiler 
merkt, dass er da nicht hinkommt.

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