bascom timer

Gast #3986101
Lesenswert?

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
#3986109
Lesenswert?

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.
#3986112
Lesenswert?

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.
#3986174
Lesenswert?

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.
#3986275
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren