Hallo, in einem Programm, das ich gerade entwickle, sollen ein DCF-Signal empfangen und abhängig von Uhrzeit und Datum verschiedene Texte etc. auf einem LCD (HD44780) angezeigt werden. Als Beispiel sag ich mal, er sollte die Uhrzeit am LCD anzeigen und darunter die Tageszeit (nachts, vormittags, abends ...). Das ganze wird noch etwas komplizierter, läuft aber im Prinzip darauf hinaus. Für den DCF-Empfang habe ich die Routine aus dem Forum verwendet, sie wird alle 10ms per Timer-Interrupt aufgerufen. Ich hatte bisher noch nie Empfangsprobleme. Treten diese nur sehr selten auf oder muss man ständig damit rechnen (RTC mitlaufen lassen)? Wenn der Empfang ab und zu (3x pro Woche) für einige Minuten ausfällt, könnte ich damit leben. Das LCD braucht mehr oder weniger lange Pausen zwischen den Befehlen. Sollte ich nun im Interrupt "Flags" setzen und in der Mainloop bearbeiten oder direkt im Interrupt alles anzeigen? Sollte das LCD immer komplett gelöscht und neu gemalt werden? Ich kann die einzelnen Teile programmieren, aber wie muss das gesamte Programm strukturiert werden, ohne Timing-Probleme zu bekommen?
Mahlzeit, nehm dir ein Blatt Papier, einen Bleistift und benutze Brain 2.0. Die meisten Fragen kannst du dir dann selber beantworten (nennt sich Planung). Danach können wir hier gerne weitermachen. MfG
Servus! Da Du schriebst, Du könnest programmieren, wundert mich Deine Frage schon etwas. Aber gut... Normalerweise sieht man zu, daß ein Interrupt immer sehr kurz nur ausgeführt wird. Das geht die anfallenden Arbeiten an wie auch die Sprache: Ich verwende meist Assembler. Hier werden dann Flaggen gesetzt, z.B. in einer globalen Statusvariablen. Im Hauptprogramm wird die Hauptlast der erforderlichen Arbeiten erledigt. Hierbei achte ich darauf, nur sehr kleine Arbeitsschritte pro Durchlauf zu erledigen, da ich es mir dann ersparen kann, z.B. einen nebenläufigen Prozeß (mit einem Betriebssystem auch noch, das dann gebraucht wird) zu generieren, um Tasteneingaben usw. zu erledigen. Um das alles zu schaffen, solltest Du Dich in Wikipedia z.B. mit dem Konzept der Statusmaschine vertrautmachen. Das ist eine einfache, aber effiziente Möglichkeit, auch komplexere Programmabläufe zu steuern. Wenn Du soviel Spaß in Dein Programm stecken willst, nur diejenigen Textteile an das LCD-Modul zu übertragen, die neu sind, bitte sehr. Ist allerdings normalerweise nicht nötig. Gruß - Wolfgang
Erstmal vielen Dank für die Antworten. Ich würde mich noch als Anfänger bezeichnen (sonst würd ich ja auch nicht sowas fragen ;) , aber da ich schon einige kleine Sachen programmiert habe, ist es kein Problem für mich, ein LCD anzusteuern etc. Jedoch habe ich noch nie ein Projekt mit mehreren, voneinander unabhängigen Teilen sinnvoll strukturiert. Das Prinzip der Statusmaschine ist mir schon bekannt, ich wüsste aber nicht, wie ich bei diesem Problem ansetzen müsste. Zur Zeit bin ich soweit, dass die DCF-Empfangsroutine im Interrupt das Signal entschlüsselt und im RAM abspeichert. In der Hauptschleife vergleiche ich die Uhrzeit mit den Grenzwerten und gebe dann Uhrzeit und Tageszeit aus. Der Prozessor ist also ständig damit beschäftigt, 4000 mal pro Sekunde die Uhrzeit zu vergleichen und das LCD neu zu bemalen, während sich die Zeit gar nicht ändert. Ist das gut so? Wie sieht es jetzt mit dem DCF77-Empfang aus? Ich habe noch nie Empfangsstörungen beobachten können, aber im Forum schon oft davon gelesen. Ist eine kleine RTC notwendig? Kann diese in den Interrupt hinein?
Hi >Der Prozessor ist also ständig damit beschäftigt, 4000 mal pro Sekunde >die Uhrzeit zu vergleichen und das LCD neu zu bemalen, während sich die >Zeit gar nicht ändert. Ist das gut so? Nein. Wozu 4000 mal? Es muss doch nur etwas verglichen und angezeigt werden, wenn sich etwas relevantes ändert. MfG Spess
Ich schrieb: > Ich hatte bisher noch nie Empfangsprobleme. Treten diese nur sehr selten > auf oder muss man ständig damit rechnen (RTC mitlaufen lassen)? Ne RTC ist einfach zu implementieren, also rein damit. Ansonsten, wenn die Hausfrau in der Nähe staubsaugt oder bei Gewitter wird Mumpitz angezeigt. Ich schrieb: > direkt im Interrupt alles anzeigen? Macht man nicht, da man sonst im Main nichts anzeigen darf. Außerdem macht das Interrupts langsam und andere Interrupts können verloren gehen. Ich schrieb: > Sollte das LCD immer > komplett gelöscht und neu gemalt werden? Sieht stümperhaft aus (sichtbares Flackern), daher besser alten Text mit neuen Text überschreiben. Ist der neue Text kürzer, schreibt man Leerzeichen. Ich schrieb: > Ich kann die einzelnen Teile programmieren, aber wie muss das gesamte > Programm strukturiert werden, ohne Timing-Probleme zu bekommen? PC ausschalten, Papier und Bleistift nehmen, Programmablaufplan aufmalen. Peter
Ich schrieb: > Wie sieht es jetzt mit dem DCF77-Empfang aus? Ich habe noch nie > Empfangsstörungen beobachten können, aber im Forum schon oft davon > gelesen Wenn Du Nähe Frankfurt wohnst brauchst Du dir keine Sorgen machen. Gruß Anja
Nein, wohne in Oberbayern ;) @peda Der Code, den ich aus den Forum habe, lässt die Zeit einfach stehen, wenn Müll reinkommt. Ich werd nochmal drüber nachdenken und das Programm umschreiben, bei Erfolg / Problemen meld ich mich wieder. @all: Danke für die hilfreichen Antworten!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.