Forum: Mikrocontroller und Digitale Elektronik LCD flackert, spinnt (Pollin Board + Fleury lib)


von Bimbi (Gast)


Angehängte Dateien:

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.

von Andreas K. (a-k)


Lesenswert?

Was passiert deiner Meinung nach wenn das Hauptprogramm mit "return" 
beendet wird?

Er startet neu. Bei einem Controller ergibt "return" aus "main" schlicht 
keinen Sinn.

von Der M. (steinadler)


Lesenswert?

Andreas Kaiser wrote:
> Er startet neu.

Ja? Macht er das?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

@ Andreas Kaiser
>Bei einem Controller ergibt "return" aus "main" schlicht keinen Sinn.
Richtig, aber offenbar ertwartet Bimbi, dass der uC einfach stehen 
bleibt.
Ich habe hier den Tasking ST10-Compiler, der würde das so machen.
Bei dem steht in der "start.asm" nach dem Aufruf von main() ein jmp$.

von Bimbi (Gast)


Lesenswert?

Nein, daran kann es nicht liegen und es liegt auch nicht daran. Habe es 
schon ausprobiert...

von Timmo H. (masterfx)


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.

von Magnus Müller (Gast)


Lesenswert?

Ist der Watchdog ausgeschaltet (Fuses!) ?

von Bimbi (Gast)


Lesenswert?

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

von Der M. (steinadler)


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.

von Bimbi (Gast)


Lesenswert?

@Magnus

Es gibt nur einen Magnus Müller, es gibt nur einen....

Es lag tatsächlich am Watchdog bzw. der Fuse! Danke!!!!

von Andreas K. (a-k)


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.

von Magnus Müller (Gast)


Lesenswert?

Bimbi wrote:
> Es gibt nur einen Magnus Müller, es gibt nur einen....

Ups... (rotwerd)

> Es lag tatsächlich am Watchdog bzw. der Fuse! Danke!!!!

Bitteschön =)

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.