Tiny26 und Timer0

OP #574463
Lesenswert?

Hallo,
ich kämpfe gerade mal wieder mit dem Tiny26 und habe das Problem, dass 
ich dein Timer0 nicht richtig eingestellt bekomme. Ich hätte gerne, dass 
ich mit einer Frequenz von 100kHz (Taktfrequenz 4MHz) einen Interrupt 
bekomme.

Nach welcher Formel berechnet sich die Timerfrequenz beim Timer0, habe 
im Manual des Tiny26 leider nichts gefunden!

Gibt es bei diesem Timer keinen max. Wert bei dem der IR ausgelöst wird, 
muss dieser immer 255 sein, oder kann ich dies über den Timer reset Wert 
(TCNT0) einstellen?
Gast #574497
Lesenswert?

Hallo,

ohne jetzt im Datenblatt zu blättern...

Du willst durch 4000kHz/100kHz = 40 teilen.

Also Vorteiler 1 und Counter 40 oder Vorteiler 2 und Counter 20 oder 
Vorteiler 4 und Counter 10 usw. usw.

Welche Kombination Dir gefällt, hängt einmal davon ab, welche Vorteiler 
beim konkreten Timer möglich sind (Datenblatt) und welcher Mode möglich 
ist (CTC oder Standard). Bei CTC also z.B Vorteiler 1, Compareregister 
auf 40 und Compare-IRQ eintragen.

Bei Standardmode (zählt aufwärts) 255-40 in Counterregister, 
Overflow-IRQ eintragen und nicht vergessen, in der IRQ den Counter 
wieder auf 255-40 zu setzen.

PS: Ob da jetzt eine Differenz von 1 drin ist, mal im Datenblatt 
nachschauen, wie das genaue Verhalten bei CTC, Standard usw. ist, also 
Zählrichtung, wann wird der IRQ erzeugt, was macht der Timer danach.

Gruß aus Berlin
Michael
#574503
Lesenswert?

Bernd Edlinger wrote:
> Hallo,
> ich kämpfe gerade mal wieder mit dem Tiny26 und habe das Problem, dass
> ich dein Timer0 nicht richtig eingestellt bekomme. Ich hätte gerne, dass
> ich mit einer Frequenz von 100kHz (Taktfrequenz 4MHz) einen Interrupt
> bekomme.

40 Zyklen ist aber verdammt knapp.
Ein leerer Interrupt kostet ja schon 10 Zyklen.



Peter
#574537
Lesenswert?

Bernd Edlinger wrote:
> In der ISR des Timer0 erhöhe ich nur einen Counter

"nur" kannst Du zwar sagen, obs aber in 40 Zyklen paßt, heißt das noch 
lange nicht.

Du mußt schon in das Listing schauen.


> und setze den
> Counterwert des Timers wieder auf 215.

Wenn Du das nicht per Addition unter Berücksichtignung der für die 
Addition benötigten Zeit machst, kanns auch nie stimmen.

Schau mal ins Listing, wie spät das Reload gemacht wird.


Peter
Gast #574585
Lesenswert?

Hallo,

selbst wenn es "nur" 10 weitere Zyklen sind, macht das mit IRQ-Aufruf, 
SREG retten und zurück usw. ganz schnell 30 Zyklen. Das sind dann aber 
75% CPU-Last, was soll das Kerlchen dann sonst noch so machen?

Gruß aus Berlin
Michael

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