mega644 timer2 problem

Gast #2122698
Lesenswert?
• ▲
▼
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
#2122708
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.