PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 20*4 Display am Mega2561 mit DCF -nach exakt 19sek Displ aus



Dani-Bruchflieger
02.11.2010, 00:39
Hallöchen,

ich hab mal wieder ein Problem, welches mich in den Wahnsinn treibt...
ich bin gerade dabei für einen mittleren Saal eine Steuerung der Heizung / Lüftung zu bauen - Hardware hab ich mittlerweile soweit fertig (kann in detils der Pinbelegung von Funktionen noch angepasst werden)
Mein Problem ist nun, daß ich in dieser Schaltung an einem Mega 2561 ein normales Reichelt Display 20*4 Zeichen angeschlossen habe (eigentlich 2 parallel - aber der Fehler tritt auch auf, wenn nur eins allein angeschlossen ist) Ich initialisiere zu Beginn des Programms die DCF-Uhr und lasse sie loslaufen... in der Werkstatt hatte ich nur das Phänomen beobachtet, daß jeweils exakt 19 sek nach Programmstart / Reset der Text auf dem Display für millisekunden verschwand, aber dann wiederkam. Im eingebauten Zustand im Schaltschrank verschwindet der Text nach den 19 sek jetzt aber komplett und kommt nicht wieder.

Display ist an Portc.0 - 5 angeschlossen; DCF-Pin ist B.1

zuvor hatte ich noch das Problem, daß das Display auch den Text nicht mehr anzeigte, wenn eines der 15 Relais für 230V schaltete - diese Störung konnte ich aber durch Umgestaltung der Relaiskarten im 19" Einschub minimieren.
Das seltsame ist dabei nur, daß ich auf dem Oszilloskop keinerlei Sörungen feststellen kann - weder irgendwelche Spannungsspitzen, noch Veränderungen an den Datensignalen für das Display. Der µC sendet unverändert die Datensignale auf den 6 Leitungen zum Display - nur daß jenes einfach nix mehr anzeigen will....

Hatte jemand schon mal ähnliche Probleme mit einem Display am µC bzw. gibt es bekannte "unverträglichkeiten" zwischen Display und dem verwendeten Port C am Mega2561?

andi84
02.11.2010, 05:25
stack overflow?
out of memory?
allokierst du irgendwelchen speicher, den du vllt nicht mehr freigibst?
oder springst du irgendwo komisch rum?
alles schon selbst gehabt. da passieren die lustigsten dinge.

wenn du nen jtag hast, schau mal nach, was der controller so treibt, wenn das lcd aus geht.
wenn du das nicht hat, pack mal (wenns C ist) folgenden code rein:


void print_mem() {
void * addr=malloc(256);
uint16_t xaddr=(uint16_t)addr;
uint16_t yaddr=(uint16_t)alloca(1);
free(addr);
//lcd code muss man anpassen
lcd_goto(20);
lcd_str_P(PSTR("RE:0x"));
put_hex(xaddr>>8);
put_hex(xaddr&0xff);
lcd_goto(30);
lcd_str_P(PSTR("SP:0x"));
put_hex(yaddr>>8);
put_hex(yaddr&0xff);
return;


EDIT: Die blockgröße kann man anpassen, die er allokieren soll. Wenn RE (RamEnd wächst mit der zeit, frisst irgendwas speicher, wenn SP immer weiter sinkt, läuft der stack über.
ersteres kommt, wenn man irgendwo dynamisch speicher belegt,
letzteres, wenn man funktionen/irqs nicht ordentlich verlässt

stefan_Z
02.11.2010, 09:58
Ich würde auch erstmal ganz grundsätzlich debuggen - Also alles raus bis auf config_LCD und eine schleife die immer weiter neues ausgibt.

Wenn die länger durchläuft, dann weißt du erstmal das die Hardware OK ist.

Manche Displays weichen hier und da von der Norm ab, hatte ich auch schon.

Dani-Bruchflieger
02.11.2010, 17:21
Hi,

erstmal danke für die Antworten, aber ich glaube ich hatte vergessen zu erwähnen, daß der Prozessor weiter sein Programm abarbeitet. Eine LED, die im Sekundentakt blinken ließ, blinkte unverändert weiter, und wenn ich die Signale vom Prozessor zum Display mit dem Oszilloskop betrachte, gibt es da auch keinen Unterschied zwischen den ersten 19 sek und danach. Die Signale sind nach wie vor vorhanden und unverändert - nur eben, daß das (die) Display(s) nichts mehr anzeigen wollen.
Da dies mein erstes Programm ist, in dem ich die Bascom-Routine der DCF-Uhr nutze, kann ich nicht beurteilen, ob dort vielleicht der Hund begraben liegt... - gibt es eine Info im DCF-Signal, die nach 19 sek decodiert wird, und daß die Routine beim ersten durchlaufen damit ein Problem haben könnte?



Edith: OK - ab Sekunde 20 wird die Zeitinfo übertragen vorher kommt das Wetter etc. - könnte durchaus sein, daß die Bascom-eigene DCF Routine da beim ersten Durchlauf ein Problem hat...?

peterfido
02.11.2010, 21:54
Ohne Deinen Code zu kennen, vermute ich das Problem trotzdem dort. Einfach mal alles außer Display und DCF rausschmeißen und die Uhr durchlaufen lassen. Wenn es dann immer noch aussteigt diesen Code hier komplett posten.

Dani-Bruchflieger
06.11.2010, 23:41
Hi,

ich glaube es gefunden zu haben:
ich hatte im Programm den Timer2 configuriert, den Interrupt definiert und freigegeben - den Timer aber nicht gestartet - aber auch nicht explizit gestoppt - und das scheint das Problem gewesen zu sein, denn dieser timer sollte nach 20 Sek ohne Tastenbetätigung das Display löschen und wieder in die Grundanzeige wechseln. (wenn er ungewollt aktiviert war, hat er zwar das Display gelöscht, aber die Grundanzeige dann nicht freigegeben...) habe erstmal eine Zeile stop timer2 eingefügt, aber bin am probieren es jetzt ohne timer umzusetzen...

also THX für die Tipps