LCD flackert, spinnt (Pollin Board + Fleury lib)

Gast #936835
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:
Moderator (Firma: Titel) Persönliche Seite #936858
@ 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$.
#936860
>>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
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
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.
Gast #936879
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 =)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.