Forum: Mikrocontroller und Digitale Elektronik Mein Timer funktioniert nicht


von Markus N. (roboscan)


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
}

von Rahul (Gast)


Lesenswert?

versuch es doch erstmal mit dem Timer-Overflow-Interrupt...

von Markus N. (roboscan)


Lesenswert?

Funktioniert leider auch nicht.
Als Chip habe ich wie im AVR-GC Tutorial den AT90S2313.

von Hubert.G (Gast)


Lesenswert?

Gehört da nicht noch auch im TIMSK was aktiviert?

von Markus N. (roboscan)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.