Forum: Mikrocontroller und Digitale Elektronik LCD-Anzeige spinnt


von mini b. (minibot)


Lesenswert?

Hallo!


Zur zeit bastle ich an einer µC Uhr plus Augabe am LCD-Display(16*1), 
soweit funktioniert eigentlich alles sehr gut, doch irgendwo hat sich 
ein Fehlerteufel eingeschlichen der bei längerem Betrieb der Uhr aktiv 
wird

Auf den Bildern klar erkennbar:
http://s1.directupload.net/file/d/2982/wb5bxjnu_png.htm
http://s7.directupload.net/file/d/2982/gek9lfm7_png.htm

Nach mehreren Stunden Laufzeit(weiß nicht exakt wie lange) schickt mir 
das LCD-display nur noch Hieroglyphen :)

Die LCD-Anzeige wird jede Minute über folgenden Code aktualisiert:
1
else{          //gebe uhrzeit auf LCD aus
2
    
3
    char *buff = malloc(sizeof(char)*3);
4
    lcd_clear();
5
    
6
    itoa(zeit.std, buff, 10);
7
    lcd_string(buff);
8
9
    lcd_data(':');    
10
11
    itoa(zeit.min, buff, 10);
12
    lcd_string(buff);    
13
    
14
    lcd_setcursor(6, 0);
15
    lcd_string(wochentag_s[datum.wochtag-1]);
16
17
    lcd_setcursor(0,1);
18
    lcd_data(',');    
19
20
    itoa(datum.tag, buff, 10);
21
    lcd_string(buff);
22
23
    lcd_data('.');    
24
25
    itoa(datum.mon, buff, 10);
26
    lcd_string(buff);
27
 }

Das Programm hängt sich vermutlich nicht ganz auf, da ich noch 
Änderungen der Zeichen erkennen kann.


Mit freundlichen Grüßen

von Stefan (Gast)


Lesenswert?

Ich würde den Fehler in den Kommunikationsroutinen zum Display suchen. 
Vielleicht ist der Mikrocontroller zu schnell.

Du könntest auch Teile der Ausgabe auskommentieren, um zu sehen, ob der 
Fehler dann verschwindet.

Notfalls kommentiere die gesamte Ausgabe aus und gebe nur noch einen 
festen String aus. Wenn dann immer noch Hiroglyphen erscheinen, leigt 
der fehler nicht an den auskommentierten zeilen.

von test (Gast)


Lesenswert?

Gibst du den Speicher, den du für buff allokierst auch irgendwo mal 
wieder frei? Gerade bei Mikrocontrollern ist dynamischer Speicher in den 
meisten Fällen eh unnötig. Und in diesem Fall erst recht, da buff lokal 
ist und nirgendwo rausgegeben wird.
1
char buff[3];
sollte das heißen.

von devynf (Gast)


Lesenswert?

Mehr vom Code wäre nicht schlecht. Könnte eventuell ein Überschreiben 
des Puffers sein, je nachdem wie viele Zeichen du so ausgibst.
Wärme (Überhitzung) könnte auch sein, ebenso wie irgendetwas anderes im 
Code, was dein Timing oder die Übertragung an das Display stört (ISR 
oder ähnliche Sauereien)

von Ich (Gast)


Lesenswert?

Ich glaube test hat recht.
Wer sich mit malloc Speicher vom Heap holt, sollte es auch wieder frei 
geben ;-))

Gruß

von mini b. (minibot)


Lesenswert?

Klasse, funktioniert!

Jetzt wo ihr es erwähnt habt wirds mir auch langsam klar... auf diesen 
Käferchen ist nunmal kein platz für Sauereien :)

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.