Gast
#2122698
Hallo ich habe hier einen mega644 mit 12 mhz Quarz.Ich habe testweise 2
leds abwechselnd im Sekundentakt blinken lassen (mit delay 1000)
klappt,also mega läuft mit 12 mhz.
Nun mein problem.Den Timer 2 habe ich initialisiert mit
TCCR2B = (1<<CS22) | (1<<CS21) | (1<<CS20); //Teiler 1024
TIMSK2 = (1<<TOIE2); //interrupt ein
Die ISR sieht so aus
ISR (TIMER2_OVF_vect)
{
frame_counter++;
}
In der main geht er in den sleep.Nach jedem Interupt wird frame_counter
getestet mit
if (frame_counter == 80) naechstes_Bild();
Die bedingung wird ca. jede halbe Sekunde erfüllt,getestet mit
abwechselnd leuchtenden leds.
Aber 12mhz geteilt durch 1024 sind 11718 überläufe in der Sekunde.
80 überläufe sollten also ca.0,006 Sekunden sein.Wie kommt es auf eine
halbe Sekunde?Hab ich was falsch verstanden.
naechstes_Bild() Sieht so aus
cli();
frame_counter = 0;
muster_counter++;
i0++;
i1 = 0;
anzeigen();
if (muster_counter == 10)
{
muster_counter = 0;
i0 = 0;
}
sei();
anzeigen() sieht so aus
ebene = 1;
reihe = 1;
ausgabe = pgm_read_byte(&Bild1 [i0] [i1]);
ablaufzaehler = 1;
PORTA = ebene;
PORTD = reihe;
PORTB = ausgabe;
i1++;
ausgabe = pgm_read_byte(&Bild1 [i0] [i1]);
Wäre nett,wenn mir das jemand erklären könnte.
gruss
andy