Tagchen! Ich habe vor mir einen einstellbaren Countdown-Timer zu basteln, der nach Alauf einer in 10-Sekunden-Schritten einstellbaren Zeitspanne (max. im einstelligen Minutenbereich) eine Last abschaltet (->Belichter) und die verbleibende oder abgelaufene Zeit auf einem LCD ausgibt. Wenn ich die delay.h benutze, um in einer 40x-For-Schleife 25msec aufzurufen, komme ich auf eine Sekunde. Soweit kein Problem, Auflösung von einer sekunde langt mit absolut. Wenn ich jetzt aber nach jeder Sekunde die Zeit auf dem LCD ausgeben will, geht mir dafür ja auch Rechenzeit flöten und die nächste Ausgabe erfolgt erst 40*25ms+t(ausgabe) später, was bei z.B. 5 minuten schon 300*t(ausgabe) Abweichung ausmacht. Die LCD-routinen in C geschrieben, ich kann den Code nicht mit AVRStudio simulieren (ist so) und die Zeichenketten sind ja auch unterschliedlich lang (Textstring + 1 oder 2 oder 3 Stellen für die Sekunden). Kann ich die Zeitmessung nicht von der Ausgabe irgendwie entkoppeln, so dass das Ausgabe und "Zeitvertrödeln" quasi-simultan ablaufen? Und das auch noch auf noob-niveau? Für Hinweise, die zur Ergreifung... Danke, Henk
Du nimmst einen Timer (beim Mega 8 den Timer1) und stellst ihn so ein, dass er nach jeder Sekunde durch einen Überlauf einen Interrupt auslöst. Die Routine, die durch den Interrupt getriggert wird tut dann folgendes: - ein Zählregister herunterzählen - den Inhalt des Zählregisters auf das Display schreiben - prüfen ob Zählregister Null -> Abschalten - vom Interrupt zurückkehren. Wofür nun ein LCD notwendig ist? Zwei 7-Segmenter reichen doch auch... Gruß Sebastian
Danke für die Tips, Männers! @Seb. Da haste recht... Hab nur noch nie 7-Segmente angesteuert und schon gar nicht drei davon. Da gibts doch auch bestimmt n fertiges IC für, dass mir die Ansteuerung abnimmt... Hab zufällignoch ne Hand voll in der Bastelkiste liegen. Mal das pinout eruieren (tolles Wort) und gucken, ob das sehr aufwendig ist. Was der M8 kann, kann der M16 auch, oder? Hab nämlich nur 16er da (Werbegeschenke). Danke nochmal, Henkster
Achso... Und ist das wirklich so, dass der Timer vor sich hin rattert und gleichzeitig Programmcode ausgeführt wird, der nur von Timergetriggerten IRs unterbrochen wird? Wow...
Hallo Henk, ja, und ja! Dafür sind die Timer da! Deswegen die Geschichte mit dem Interrupt. Der Timer läuft vollständig selbstständig vor sich hin. Und löst bei der vorgegebenen Bedingung seinen Interrupt aus. Sonst wären die Timer auch ein wenig sinnlos. Ja, was der Mega8 kann, kann der Mega16 auch. Nur umgekehrt kann es sein, dass zu wenig Ports da sind. 7-Segmemter ansteuern ist einfach. Die IC's dafür sind überflüssig. Es reicht, je Anzeige ein Transistor (Feldwaldundwiesentransistor). Die Segmentleitungen werden einfach an einen Port des Controllers geklemmt. Dann wird einfach gemultiplext. Einfach heisst wirklich einfach: - Transistoren sperren, Bitmuster für Anzeige1 auf den Port, Transistor für Anzeige1 öffnen, Transistor sperren, Bitmuster 2 auf den Port, Transistor 2 öffnen usw... Wenn der Programmcode symmetrisch abläuft, sind die Anzeigen auch gleich hell. Und wahrscheinlich gibt es sogar noch eine Elegantere Lösung. Peter Dannegger hat hier mal eine Schaltung für ein Voltmeter gepostet: Beitrag "ADC mit Multiplexanzeige" Hat mir sehr geholfen. Danke Peter! Gruß Sebastian
Henk v.d. Wegen wrote:
> Ich verneige mich in Ehrfurcht : ) Danke.
Muß nicht sein.
Besser wäre:
"Ich habe noch die und die Frage"
oder:
"Ich habe das Beispiel verstanden" (super Kompliment)
oder:
"Ich habe das Beispiel verstanden und noch die und die Verbesserung"
(unschlagbares Kompliment)
Peter
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.