Mein Timer funktioniert nicht

OP #268806
Lesenswert?

Hi.
Ist gerade mein erster Versuch mit Timern.
Nur aus dem AVR-GCC Tutorial habe ich mir sozusagen folgendes
rausgelesen aber nichts passiert.
Wenn die Frequenz zu  hoch ist sollten die LEDs ja zumindest schwach
leuchten aber tut sich garnix.
Was mach ich falsch?
1
#include <avr/io.h>
2
#include <inttypes.h>
3

4
#include <avr/interrupt.h>
5
#include <avr/signal.h>
6

7

8

9
SIGNAL (SIG_OUTPUT_COMPARE1A)
10
{
11
  //Ereigniss vom Timer
12
    if (PORTB == 0x00)
13
  {
14
    PORTB = 0xFF;
15
  }
16
  else
17
  {
18
    PORTB = 0x00;
19
  }
20

21
}
22

23

24

25
int main(void)
26
{
27

28
  sei();  //Global Interrupt Enabled  
29

30
  //Timer auf 1024 des Taktes setzen
31
  //TCCR0 = 0b00000101;    //Timer/Counter Control Register
32
  TCCR0 = (1<<CS00)|(1<<CS02);
33
  
34
  
35
  DDRB = 0xFF;
36
  PORTB = 0xFF;
37

38

39
  //PORTB=0x00;
40

41
  while(1)
42
  {
43

44

45

46
  }
47
}
OP #268810
Lesenswert?

Ah danke das hatte ich überlesen das TIMSK ja für beide also 8bit und
16bit counter gilt.

So nun der fertige Code und so blinkt es ;-)
1
#include <avr/io.h>
2
#include <inttypes.h>
3

4
#include <avr/interrupt.h>
5
#include <avr/signal.h>
6

7

8

9
//SIGNAL (SIG_OUTPUT_COMPARE1A)
10
SIGNAL (SIG_OVERFLOW0)
11
{
12
  //Ereigniss vom Timer
13
  if (PORTB == 0x00)
14
  {
15
    PORTB = 0xFF;
16
  }
17
  else
18
  {
19
    PORTB = 0x00;
20
  }
21

22

23
}
24

25

26

27
int main(void)
28
{
29

30
  sei();  //Global Interrupt Enabled  
31

32
  //Timer auf 1024 des Taktes setzen
33
  //TCCR0 = 0b00000101;    //Timer/Counter Control Register
34
  TCCR0 = (1<<CS00)|(1<<CS02);
35
  
36
  TIMSK = 0b00000010;
37
  
38
  DDRB = 0xFF;
39
  PORTB = 0xFF;
40

41

42
  //PORTB=0x00;
43

44
  while(1)
45
  {
46

47

48

49
  }
50
}

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