Forum: Compiler & IDEs Tiny26 und Timer0


von Bernd E. (edi)


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?

von Michael U. (Gast)


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

von Peter D. (peda)


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

von Bernd E. (edi)


Lesenswert?

In der ISR des Timer0 erhöhe ich nur einen Counter und setze den 
Counterwert des Timers wieder auf 215.

von Peter D. (peda)


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

von Bernd E. (edi)


Lesenswert?

Hallo Peter,
welcher Listing meinst du? (sorry bin leider kein so Profi...)

mfg
Bernd

von Michael U. (Gast)


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

von Bernd E. (edi)


Lesenswert?

Hallo,
also wäre es sicher mal von Vorteil, wenn ich auf einen 12MHz oder 16MHz 
Quarz wechseln würde!

von Peter D. (peda)


Lesenswert?

Bernd Edlinger wrote:
> Hallo Peter,
> welcher Listing meinst du? (sorry bin leider kein so Profi...)


avr-gcc.exe -xc -Os -mmcu=attiny26 -Wall -g -o test.out *.c

avr-objdump.exe -h -S test.out >test.lst



Peter

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.