Hilfe benötigt mit Timer/Interrupt auf

Gast #864778
Lesenswert?

Hallo,

Ich brauche ein bisschen Hilfe mit Timern. Habe ein kleines Prog in C 
geschrieben, dass eine LED immer nach ca. 1 Sekunde an-/ausschaltet. 
Leider geschieht rein gar nichts (Kompiliert problemlos durch, nur die 
LEDs bleiben im Anfangszustand).

Die LEDs hängen an PortB Pin 4,5,6,7. Sie funktionieren tadellos, wenn 
ich sie direkt ansteuere gehts. Deswegen gehe ich davon aus, dass ich 
beim initialisieren des Timers einen Fehler gemacht habe.
1
  TIMSK = 0b1 ;// _BV( 0 );
2
  TCCR0 = 0b1 ;//_BV( 0 );
3
  sei();

(Die auskommentierten Werte stammen aus nem Tutorial, nach ner Recherche 
im inet, hielt ich aber den Wert 1 in beiden Fällen für sinnvoller. Es 
klappt mit beiden nicht.)

Das ganze kommt dann auf einen ATmega32.

Sieht jemand gerade meinen Fehler? Habe ich was mit der globalen counter 
Variable falsch gemacht?

Danke schon jetzt.
Angehängte Dateien:
#864908
Lesenswert?

svens wrote:
> Ich brauche ein bisschen Hilfe mit Timern.

Ein bisschen?! ;-)

> Habe ein kleines Prog in C
> geschrieben, dass eine LED immer nach ca. 1 Sekunde an-/ausschaltet.
> Leider geschieht rein gar nichts (Kompiliert problemlos durch, nur die
> LEDs bleiben im Anfangszustand).

Mei.. in dem Code ist so einiges im Ar****.. 'Signal' nimmt man zB. 
nicht mehr.. das heißt jetzt ISR.. am besten du guckst mal durch das 
GCC-Tutorial hier auf der Seite links oben..
1
// Testprogramm um LED's an PortB ein- und auszuschalten
2

3
// inlcudes -----------------------------------------------
4
#include <avr/io.h>
5
#include <avr/interrupt.h>
6

7
// defines ------------------------------------------------
8
#define LED_GROUP (0x78) // Bit 7-4
9

10
// variables ----------------------------------------------
11
uint16_t count_overflow=0;
12

13
// Hauptprogramm ------------------------------------------
14
int main()
15
{  // DataDirectionRegisterB -> Richtung PortPins (1=out, 0=in)
16
  DDRB = (1<<DDB7)|(1<<DDB6)|(1<<DDB5)|(1<<DDB4)|(0<<DDB3)|(0<<DDB2)|(0<<DDB1)|(0<<DDB0);
17
  
18
  // Timer0 (8Bit): Normal-Mode(0), TOP = 0xFF, Prescaler 1
19
  TCCR0A = (1<<COM0A1)|(0<<COM0A0)|(0<<COM0B1)|(0<<COM0B0)|(0<<WGM01)|(0<<WGM00);
20
  TCCR0B = (0<<FOC0A)|(0<<FOC0B)|(0<<WGM02)|(0<<CS02)|(0<<CS01)|(1<<CS00);
21
  TIMSK0 = (0<<OCIE0B)|(0<<OCIE0A)|(1<<TOIE0); // Overflow ON
22

23
  sei(); // interupts global on
24

25
  while (1) // loop forever
26
  {
27
    
28
  }
29
  return 0;
30
} //------------------------------------- Ende Hauptprog */
31

32
// Timer0 Overflow Interrupt ------------------------------
33
ISR (TIMER0_OVF_vect)
34
{
35
  count_overflow++; 
36
  if (count_overflow >= 40)
37
  {
38
    PORTB = (~PINB & LED_GROUP); // toggle Pins
39
    count_overflow = 0; // reset counter
40
  }
41
} //-------------------------------------- Ende TOV0_INT */

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