Forum: Mikrocontroller und Digitale Elektronik timer-interrupt alle 448µs <- bitte werte überprüfen!


von kalle (Gast)


Lesenswert?

hi
ich will das mein schönes timer interrupt alle 448µs aufgerufen wird,
aber irgendwie scheints nicht zu klappen, ich weis nicht warum.. könnte
mal einer meine werte überprüfen?

Fosc = 16 MHz
TCCR2 = (1<<CS22|1<<CS20)       // <-- prescaler 1024 (?)
TCNT2 = 249                     // overflow nach 7 mal inkrementieren:

nach meiner rechnung stimmt das..

Ftimer = 16 000 000Hz / 1024 = 15625Hz, d.h. alle 1/15625s nen
inkrement, das entspricht 64µs, d.h. nach 7 mal inkrementieren sind
448µs verstrichen

das stimmt alles oder?


ich post lieber mal mein code, nicht das darin der fehler liegt..
1
#include <avr/io.h> 
2
#include <avr/interrupt.h>
3
4
SIGNAL(SIG_OVERFLOW2)
5
{
6
  TCNT2 = 249;  
7
}
8
9
int main(void)
10
{
11
  TCCR2 = (1<<CS22|1<<CS20);  
12
  TCNT2  = 249;      
13
  TIMSK |= (1<<TOIE2);    
14
  sei();
15
  
16
  while(1);
17
  
18
  return 0;
19
}

sry das ich euch damit belästige, aber ich find den fehler nicht..

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Benutz den CTC-Mode! Das ist die genaueste Möglichkeit, deine Zeit zu
erzeugen!

Was macht er denn nicht? Die genaue Zeit oder gar nichts?

von inoffizieller WM-Rahul (Gast)


Lesenswert?

TCCR2 = (1<<CS22|1<<CS20);

Prioritäten der Klammern und des | ?

Es müsste wohl TCCR2 = (1<<CS22)|(1<<CS20);
heissen.

von johnny.m (Gast)


Lesenswert?

Das dürfte schon allein aus dem Grunde nicht funktionieren, dass Du
SIGNAL benutzt, ohne die signal.h einzubinden! Da dürfte der Compiler
wahrscheinlich eine Fehlermeldung ausspucken. SIGNAL ist veraltet, in
der aktuellen AVR-libc geht das mit ISR(VEKTORNAME). Die alten
Vektornamen werden zwar noch unterstützt, aber Du solltest auch mal
nach den neuen Namen schauen, damit es in der Zukunft auch klappt.

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.