Wieder mal ein Timer

#1412260
Lesenswert?

Hallo Zusammen

Will ein Programm schreiben welches jede milisekunde die Ausgänge anders 
ansteuert. An den Ausgängen sind LED . Die Daten nehme ich aus einem 
Array.
Hier der code:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <array.h>
4
         
5
#define F_CPU 8000000UL
6
     
7
int zeile = 0;
8

9
int main()
10
{
11
    DDRA = 0b11111111;    //ausgang definieren
12
//Timer________________________________________________________________________________
13
      TIMSK |= (1 << TOIE0);          //Timer 0 mit "Overflow Itterrupt" aktivieren
14
    TCCR0 =(1<<CS00) | (1<<CS02);   //Prescaler auf 1024 stellen
15
    OCR0=156;            //Timer vorladen
16
    
17
    //Frequenz des Timers = 8000000 / 1024 / (256-156) = 1000 Hz
18
//_____________________________________________________________________________________
19

20
  while(1){
21
  
22
    //Endlosschlaufe nötig?
23
    PORTA = 0b11111110;
24
  }
25
}
26
 
27
ISR (TIMER0_OVF_vect)              
28
{
29
  // jede milisekunde (1000mal pro sec) wird die anzeige geändert
30
  
31
  if(zeile == 10){  //Wenn array einmal durchlaufen, von vorne beginnen
32
    zeile = 0;
33
  }else{ 
34
    PORTA = bitmap[0][zeile];  //bitmap = array in array.h Bibliothek
35
    //Hier würden weitere PORTS stehen vorerst zum testen ob stimmt nur PORTA
36
    zeile++;
37
  }
38
}

Beim Simulieren funktionierte es nicht wie erwünscht. Das Programm lief 
einmal durch und hörte auf. Die eingänge werden immer pro Interrupt ein 
und danach wieder ausgeschaltet. Schliesse ich den Ausgang B ans 
Osziloskop sehe ich eine Frequenz von 2MHz das mal 2 (da ich immer ein 
und aus schalte) = CPU Frequenz von 4MHz. Habe aber 8MHz Definiert!?
Warum kommt da nicht ein signal von 1000Hz heraus?

MfG Michael

(Das ganze gibt keine Propeller Uhr aber der Hintergedanke ist der 
selbe!)
#1413398
Lesenswert?

> Habe die anderen Timer Modi nocht nicht ausprobiert und kenne sie auch
> nicht so gut, deswegen lieber mit dem "normalen".

Falscher Ansatz.

Du magst einen bestimmten Timermodus nicht kennen, das ist OK.
Aber wenn der Hinweis kommt, dass einer davon besser geeignet wäre, 
solltest du dem Hinweis nachgehen und den ausprobieren. So schwer sind 
die anderen Modi nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren