mikrocontroller.net

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


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

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas Kaiser wrote:
> Er startet neu.

Ja? Macht er das?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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$.

Autor: Bimbi (Gast)
Datum:

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

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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:

int main(void)
{
    lcd_init(LCD_DISP_ON);
   lcd_gotoxy(0,0);
    lcd_puts("LCD Test Line 1\n");
  
   lcd_puts("Andere Line 1");  
 
    while(1);
    return 0;
}
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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist der Watchdog ausgeschaltet (Fuses!) ?

Autor: Bimbi (Gast)
Datum:

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

Autor: Der Micha (steinadler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bimbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Magnus

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

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Magnus Müller (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

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.