PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : timerinterrupt aufrufen



pebisoft
05.04.2005, 15:07
hallo, ich möchte alle 64us einen timerinterrupt aufrufen.
weis nicht , wie ich das jetzt anstellen soll. welche timer nimmt man.
ich habe den avr16 mit 8mhz der 3 timer hat, t0(8bit),t1(16bit) und t2(8bit).
wenn ich einen vorzähler festlege, für welchen timer ist er dann gültig.
manche setzen beim zählwert des timer ein zahl z.b. -56, was bewirkt die minuszahl beim zählen.
mfg pebisoft

meltronik
05.04.2005, 19:41
mit avr16 ist der atmega16 gemeint oder?
Bei dem kann man für jeden Timer einen eigenen vorteiler einstellen.
Für 64µs reicht der 8bit Timer0 aus wenn ein vorteiler von zb. 8 gewählt wird und der timer dann mit 191 (255-64) geladen wird.
Dann löst er beim überlauf von 255 auf 0 einen Interrupts aus, in dem fall genau nach 64µ

Das -56 dürfte eine Eigenheit der Programmierumbebung sein, ich hab das noch nirgens gesehen/benötigt. Könnte aber bedeuten 255-56 sodass der timer mit 199 geladen wird....

pebisoft
05.04.2005, 21:24
TCNT0 = -2; // 2 * 256 = 512 cycle
warum bewirkt die -2 in winavr 512 zycle
mfg pebisoft

Dino Dieter
05.04.2005, 23:01
Hallo Pebisoft

TCNT0 = -2; // 2 * 256 = 512 cycle

bewirkt nur, das in TCNT0 der Wert 254 eingetragen wird. Dieser entspricht dem Zweierkomplement von -2.

Ist nur für den besseren Überblick.Man braucht halt nicht immer zu rechenen. 256 - x = irgendwas

Die 512 Takte kommen in deinem Fall
nur Zustande, wenn der Vorteiler auf 256 gestellt wird.

Wie Peter Dannegger es in seinem RC5 Code es ja auch gemacht hat mit

TCCR0 = 1<<CS02; //divide by 256

MFG
Dieter