Forum: Mikrocontroller und Digitale Elektronik bascom timer


von ich (Gast)


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

von Karl H. (kbuchegg)


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.

von Malte M. (mmalte)


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.

von Thomas E. (thomase)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


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.

von Malte M. (mmalte)


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?

von Thomas E. (thomase)


Lesenswert?

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.

von ich (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.