Bitte um Hilfe beim Timer0 und einem Prescaler von 1024 beträgt die maximale Zeit 1200khz/1024 = 0,8504ms und somit bei einem Interrupt bei 256 (256x 0,8504ms=217ms Für eine Schaltzeit von zB 1500ms bräuchte man 1500/217ms = 6,9 x mehr Frage wie macht man das ? Gruß Uwe NS- ja .. mit einem Timer1 wäre das einfacher, doch der Attiny13 hat nun eben nur einen Timer0 (8Bit) Bisheriges Programm ... Config PortB.0=Output Config Timer0=Timer, Prescale=1024 Enable Timer0 Do if timer=> 255 then PortB.= 1 Else PortB.0 =0 End If Loop End
Uwe W. schrieb: > Bitte um Hilfe > beim Timer0 und einem Prescaler von 1024 beträgt die maximale Zeit > 1200khz/1024 = 0,8504ms und somit bei einem Interrupt bei 256 (256x > 0,8504ms=217ms > > Für eine Schaltzeit von zB 1500ms bräuchte man 1500/217ms = 6,9 x mehr > Frage wie macht man das ? Hat der Tiny13 beim Timer einen CTC Modus? Wenn ja, dann lass ihn eben nicht bis 255 laufen, sondern rechne dir aus, bis zu welcher Zahl er zählen muss, damit du wieder einen ganzzahligen Teiler bekommst.
Uwe W. schrieb: > Bisheriges Programm > > ... > > Config PortB.0=Output > Config Timer0=Timer, Prescale=1024 > Enable Timer0 > Do > if timer=> 255 then > PortB.= 1 > Else > PortB.0 =0 > > End If > Loop > End Das bringt dich nicht weiter. Du musst dir vom Timer einen Interrupt auslösen lassen, wenn er 'überläuft'. Und im Interrupt zählst du dann eine weitere Variable bis 6.9 Da du aber nicht bis 6.9 zählen kannst, musst du den Timer so hinkriegen, dass er eben nicht bei 255 den Überlauf auslöst sondern schon früher. Eben so weit, dass du in der Interrupt Routine wieder eine ganze Zahl hast. Wenn der Timer keinen CTC kann, dann muss man eben das Timer Register mit einem Wert vorladen, so dass er dann die ausgerechnete Anzahl SChritte braucht um wieder bei 255 einen Überlauf auszulösen. Aber CTC ist besser.
Wenn's nicht auf die Millisekunde genau sein soll, könntest du im Overflow-Interrupthandler ein Variable (mind. 16bit) hochzählen (um 217), wenn der Wert der Variable größer als 1500 ist, ist deine Schaltzeit vorbei bzw. dann musst du schalten und du ziehst von der Variable 1500 ab, und wartest wieder bis größer als 1500.
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.