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
andy schrieb: > Aber 12mhz geteilt durch 1024 sind 11718 überläufe in der Sekunde. Nö sind sie nicht. Die 1024 sind ja nur dein Vorteiler. Der Zähler zählt in 1 Sekunde 11718 mal weiter. Aber er muss jedesmal bis 255 zählen, ehe ein Überlauf ensteht.
Danke,aber er müsste die 80 doch in 0,006 sekunden erreichen oder? gruss andy
andy schrieb: > Danke,aber er müsste die 80 doch in 0,006 sekunden erreichen oder? Nein! 12000000/1024/256 = 45.77 Du kriegst ca 45 Überläufe in der Sekunde Wenn du dann in jedem Überlauf auch noch bis 80 zählen lässt, dann müsste dein if eigentlich alle 2 Sekunden zuschlagen. Wie da jetzt die 1/2 Sekunde entsteht weiß ich nicht, aber 0.006 Sekunden sind es auf keinen Fall.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.