Forum: Mikrocontroller und Digitale Elektronik Timer in Bascom


von Henning (Gast)


Lesenswert?

hey leute, habe folgende frage und leider grad keinerlei möglichkeit es 
selbst zu testen.

wenn ein timer (in diesem fall timero) überläuft, springt er dann 
automatisch wieder auf 0 zurück oder ist er dann blockiert und mag net 
mehr arbeiten?

ich frage deshalb, da aus der bascom-hilfe usw. hervorgehen täte, dass 
man kein rücksetzen auf 0 in einer subroutine bräuchte, dies wird jedoch 
bei vielen beispielcodes trotzdem durchgeführt. daher die frage
-> braucht man das überhaupt?

und nun ins bett... ;)

von H.joachim S. (crazy_horse)


Lesenswert?

er läuft einfach weiter, wenn du nichts dagegen tust. Den Überlauf 
kannst du per Interrupt erkennen.
Es ist eigentlich ein Überlauf von 255 nach 256. Da das 9.Bit aber nicht 
mehr gezählt wird (8bit-Timer) ist das identisch mit Zählerstand 0.

von Henning (Gast)


Lesenswert?

mir ist schon klar, dass ich den überlauf erkennen kann. ;o)
es ging mir darum ob ich das bei überlauf in interrupt und interrupt 
setzt timer wieder auf 0 überhaupt benötige?
mehr tut der interrupt bei mir dann nicht, außer den timer wieder auf 0 
zu setzen, er zählt keine variablen da mein programm drumherum den 
direkten wert des timers ausliest.

stichwort software-pwm. timer0 zählt mit einem prescaler immer bis 255 
hoch und das programm schaltet meine ausgänge je nach inhalt des 
timerregisters. somit brauche ich keine zusätzlichen variablen.

also nochmals zur verdeutlichung folgende ablaufkette, bitte sagt mir 
welche >notwendig< ist:

1. config timer0, start timer0, on timer0 timer0 = 0

2. config timer0, start timer0

also wenn das timerregister wert 255 erreicht hat, springt dann der 
timer wieder VOLLautomatisch auf 0 und zählt wieder aufwärts oder bleibt 
er bei 255 oder 0 dann vorerst stehen?

von Karl H. (kbuchegg)


Lesenswert?

Henning wrote:
> mir ist schon klar, dass ich den überlauf erkennen kann. ;o)
> es ging mir darum ob ich das bei überlauf in interrupt und interrupt
> setzt timer wieder auf 0 überhaupt benötige?

Welchen Teil des Satzes "Er zählt einfach weiter. Und da es in einem
8 Bit Timer kein 9. Bit gibt, gehts halt dann mit 0 weiter"
verstehst du nicht?

> mehr tut der interrupt bei mir dann nicht, außer den timer wieder auf 0
> zu setzen,

wozu hast du dann einen Interrupt installiert? Der Timer zählt
munter vor sich hin, und wenn er bei seiner höchsten Zahl angelangt
ist, gehts wieder bei 0 weiter.

von roboterheld (Gast)


Lesenswert?

bascom hat seine eigenarten.
du musst schon mal zusehen, das man lesbaren asm-code bekommt um den mal 
zu lokalisieren.
die config-einstellung macht darüber keine aussage.

am besten nach winavr-c umsatteln, da siehste was der atmega macht.

von Henning (Gast)


Lesenswert?

ich hatte das schonv verstanden nur irritierte mich der zweite teil 
seiner antwort. daraus las ich, dass er auf 0 springt und dort bleibt.

von Roland Z. (r-zimmermann)


Lesenswert?

Hallo,

Der Timer springt in die Interruptroutine sobald der Timer überläuft. 
Dabei wird dieser gleich wieder auf 0 gesetzt, das geht in Bascom quasi 
"von allein".
Mit "On Timer1 <Subproggie_hier>" sagst du Bascom wo es sich 
hinzubegeben hat wenn der Timer beim Überlauf schreit. :)

Roland

von jack (Gast)


Lesenswert?

>Der Timer springt in die Interruptroutine sobald der Timer überläuft.

Der Timer springt nirgendwo hin, es wird lediglich ein Interrupt 
ausgelöst.

>Dabei wird dieser gleich wieder auf 0 gesetzt, das geht in Bascom quasi
>"von allein".

Das hat mit Bascom überhaupt nichts zu tun, der Timer im µ läuft einfach
durch.

von Roland Z. (r-zimmermann)


Lesenswert?

Hallo Jack,

daß der Timer durch den ausgelösten Overflow-Interrupt dafür sorgt daß 
das Programm in die ISR-Routine springt macht der natürlich nur wenn 
dies so mit dem Command "On TimerX <Sub> konfiguriert wird.
Das der Timer wieder auf 0 gesetzt wird meinte ich nicht Wörtlich, klar 
rennt der Timer durch, ich habe mich da vielleicht schlecht ausgedrückt, 
sorry.

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.