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... ;)
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.
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?
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.
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.
ich hatte das schonv verstanden nur irritierte mich der zweite teil seiner antwort. daraus las ich, dass er auf 0 springt und dort bleibt.
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
>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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.