Wieder mal ein Timer

OP #1412260
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!)
Gast
Nimm Timermodi, bei denen man nicht den Timerwert ändert, sondern das 
Rücksetzkriterium (CTC, FastPWM).
Damit kommt man ohne 1000fps-Kameras aus.
OP
Das ganze ist für eine Kamera. Um die Komme ich nicht rum, sei es eine 
50 Bilder oder 1000 Bilder pro sec. Kamera.
Habe die anderen Timer Modi nocht nicht ausprobiert und kenne sie auch 
nicht so gut, deswegen lieber mit dem "normalen".
> 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.
Gast
Jetzt mal weg von den Timern:

In der Interrupt-Routine setzt du PortA im kHz-Takt um, richtig. Aber in 
der Main-Funktion deines Programms setzt den PortA im MHz-Takt zurück, 
das kann ja gar nicht klappen:
1
...
2
  while(1){
3
  
4
    //Endlosschlaufe nötig?
5
    PORTA = 0b11111110;
6
  }
7
...

Gruß, Klaus
OP
@ Karl heinz Buchegger
Stimmt, tut mir leid. Wenn ich hilfe brauche und welche bekomme sollte 
ich diesen auch versuchen!

@ Klaus
Ist mein fehler, habe diese Zeile noch nicht herausgenommen! Sollte 
nicht dort stehen! Danke!

Versuche nun mal die anderen Timer Modi!

MfG Michael

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.