-
-
Erfahrener Benutzer
Robotik Einstein
timerinterrupt aufrufen
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
-
Neuer Benutzer
Öfters hier
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....
-
Erfahrener Benutzer
Robotik Einstein
TCNT0 = -2; // 2 * 256 = 512 cycle
warum bewirkt die -2 in winavr 512 zycle
mfg pebisoft
-
Erfahrener Benutzer
Roboter-Spezialist
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
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen