Hallo, Ich möchte gerne das nach einer Minute mein Atmega 32 aus dem Hauptprogramm in ein Interupt springt das funktiert mit dem Timer aber nicht weil ich maximal acht sekunden zählen kann. Hat jemand eine Idee wie ich das hinbekommen kann? Ich benutze ein 16mhz Quarz LG
ich schrieb: > Hallo, > Ich möchte gerne das nach einer Minute mein Atmega 32 aus dem > Hauptprogramm in ein Interupt springt das funktiert mit dem Timer aber > nicht weil ich maximal acht sekunden zählen kann. acht ist schlecht, weil 60 (=1 Minute) nicht ganzzahlig durch 8 teilbar ist. Aber 6 würde zb gehen. Dann sagst du dir in der Interrupt Routine einfach: 1-ter Aufruf, interessiert mich nicht. Zurück wo wir her gekommen sind 2-ter Aufruf, immer noch uninteressant 3-ter Aufruf, --"--- 4-ter .. 5-ter .. ... 9-ter Aufruf, immer noch uninterdessant 10-ter Aufruf. AHA! Jetzt wirds interessant. 1 Minute ist vergangen.
Naja, du könntest im Interrupthandler erstmal ein Register hochzählen und gleich zurück ins Hauptprogramm gehen. Und dann z. B. beim achten Aufruf (nach jeweils 7,5 Sekunden) erst das tun, was eben nach einer Minute getan werden soll. Ich hab bisher noch nicht mit Interrupts und Timern gearbeitet, lese mich da aber gerade ein und glaube, dass sowas in der Art funktionieren dürfte.
Malte M. schrieb: > Ich hab bisher noch nicht mit Interrupts und Timern gearbeitet, lese > mich da aber gerade ein und glaube, dass sowas in der Art funktionieren > dürfte. Ja, das funktioniert so in der Art. Aber der Controller kann nicht bis 7.5 zählen, sondern nur bis 7 oder 8. Und damit passt es nicht mit 60. Deswegen 6s. mfg.
Hallo, Erstmal danke für die superschnelle Antwort. Werde ich morgen mal ausprobieren und dann wieder melden. Aber noch eine kleine Frage: Das hochzählen mit For Schleife und incr befehl oder? LG
ich schrieb: > Hallo, > Erstmal danke für die superschnelle Antwort. > Werde ich morgen mal ausprobieren und dann wieder melden. > Aber noch eine kleine Frage: Das hochzählen mit For Schleife und incr > befehl oder? nein. mit einer Variable, die bei jedem Aufruf um 1 erhöht wird. Ist sie nach dem Erhöhen kleiner als 10, dann war das einer der Aufrufe mit den Nummern 1 bis 9. Ist die Variable aber nach dem Erhöhen um 1 bei 10 angelangt, dann war das der 10 Aufruf - 1 Minute ist vergangen. Du machst das, was du jede Minute machen willst und setzt die Zählvariable wieder auf 0 zurück. auf dass sie beim nächsten Interrupt Aufruf wieder zu 1 wird, beim nächsten Aufruf zu 2 etc. etc. bis sie dann wieder irgendwann (d.h. nach 1 Minute) zu 10 geworden ist und dir anzeigt, dass schon wieder 1 Minute vergangen ist.
Thomas Eckmann schrieb: > Ja, das funktioniert so in der Art. Aber der Controller kann nicht bis > 7.5 zählen, sondern nur bis 7 oder 8. Und damit passt es nicht mit 60. > Deswegen 6s. Deswegen meinte ich ja, er soll bis 7,5 Sekunden zählen und das 8 mal ;) Denn auf ganze Sekunden ist er ja nicht beschränkt und mit CTC ist er ja relativ flexibel, oder?
Malte M. schrieb: > Deswegen meinte ich ja, er soll bis 7,5 Sekunden zählen und das 8 mal ;) > Denn auf ganze Sekunden ist er ja nicht beschränkt und mit CTC ist er ja > relativ flexibel, oder? Ja klar, so herum wird ein Schuh draus. mfg.
Hallo, Hat funktioniert danke dafür dafür. Wenn jmd. den Code haben will bitte bescheid sagen poste ihn dann nochmal. LG
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.