PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16-Bit-Timer: Alle 20ms ein Interrupt



Goblin
05.07.2006, 13:32
Tagchen!

Wie bring ich nen 16-Bit-Timer dazu, nur alle 20 Millisekunden eine ISR aufzurufen? Ohne eine Schleife zu schreiben, die hochzählt oder sowas. Ich will ein Software-PWM mit geringer Periodendauer schreiben, um damit Magnetventile zu steuern. Gleichzeitig sollen die 4 PWM-Werte per RS232 eingelesen werden, weswegen ich mir die aktive Zählschleife nicht erlauben kann. Also, gibts ne Möglichkeit, den Timer soweit zu verlangsamen? Wenn das RS232 nicht wäre könnte man ja evtl an der Taktfrequenz rumpfuschen, also bei 1MHz-Quarz 100 MHz angeben oder so.
Eine Art Postscaler wäre eine Lösung, aber gibts das beim AVR? (AtMega8)

PicNick
05.07.2006, 13:58
Weiß jetzt nicht ? Bei 16 MHZ (geraten) hast du mit Prescale 8 und preload 25536 genau alle 20 mS einen Schnackler ?

Irgendwo steh ich auf'm Schlauch

Frank
05.07.2006, 14:30
Am einfachsten:
Hiermit passenden Timer-Code generieren lassen:

https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=169

Notfalls halt noch Zähler in die Timerroutine rein, wenn du nix passendes findest

Hanni
05.07.2006, 14:35
Hmm, mal grob überschlagen:

16 Bit macht einen Zählbereich von 0 - 65535

also ohne Prescaler: 65536 Takte
mit einem Prescaler vom 1024: 67108864 Takte

Fazit: es ist problemlos möglich (selbst bei 16 MHz).

Grüße,

da Hanni.