hi leute,
ich versuch schon seit langem meinem ATmega32U4 @ 16 Mhz beizubringen,
wie lang eine Millisekunde dauert. Ich verwende dafür den Overflow
Interrupt.
Laut meiner Berechnung sollte der Code so ausschauen:
1 | void timer_init_0(void)
|
2 | {
|
3 |
|
4 | TCCR0A=0x00; // Normal Counter mode
|
5 | TCCR0B|=(1<<CS01)|(1<<CS00); // prescaler 64
|
6 | TCNT0=6; // Vorladen mit 6, damit timer 250 Tyktzyklen zaehlt
|
7 | TIMSK0=0x01; // Overflow Interrupt enablen
|
8 | }
|
9 |
|
10 |
|
11 | ISR(TIMER0_OVF_vect)
|
12 | {
|
13 | TCNT0=6;
|
14 | flag_timer_1ms++;
|
15 | }
|
hier meine Berechnung: 64/16mhz= 0,000 004 s
0,000 004s * 250 = 0,001 s
also heisst des doch.. Prescaler=64 und Vorladewert(TCNT)=6, damit er
250 Zyklen bis 256 zählt oder nicht???
mit dem code braucht mein µC 15 mal so lange für eine Millisekunde...
warum?
hab ich ein Fehler im prog. oder ein Denkfehler?