Eine Minute warten - Atmega8

Gast #3537778
Lesenswert?

Hallo zusammen.

Ich versuche derzeit, eine Routine zu schreiben, die LEDs an Port B 
meines Atmega8 eine Minute jeweils ein- und eine Minute ausschaltet.

Leider funktioniert das Ganze aber noch nicht so wie es soll.

Da ich Timer0 für eine andere Funktion verwenden möchte, habe ich Timer2 
(8-bit) dafür hergenommen.

Könntet ihr mal einen Blick auf meinen Code werfen?
1
/***********************
2
  Controller: ATmega8
3
***********************/
4

5

6
#include <avr/io.h>
7
#include <avr/interrupt.h> 
8
 
9
#define F_CPU 8000000          // F_CPU = 8 MHz
10

11
volatile unsigned char counter = 0;
12
volatile unsigned char minute_vergangen = 0;
13

14
 
15
void init_minute_timer(void)      
16
{
17
  TCCR0 |= (1 << CS02) | (1 << CS00);  // Prescaler auf 1024tel setzen
18
  TIMSK |= (1 << TOIE2);        // Overflow-Interrupt enablen 
19
  sei();
20
}
21

22

23

24
ISR (TIMER2_OVF_vect)
25
{
26
//  (8000000/1024)/256 Hz = 30,51 Hz  => 32,776 ms
27
  counter++;
28
  if(counter == 30)      // 1000ms / 32,766 = 30,51
29
  {
30
  minute_vergangen = 1;
31
  counter = 0;
32
  }
33
}
34

35
int wait_minute(void)
36
{
37
  minute_vergangen = 0;
38
  while(minute_vergangen != 1);
39
  return 1;
40
}
41

42

43

44

45

46

47
void main (void)
48
{
49
  DDRB = 0xFF;      // Port-Pins als Ausgang schalten
50
  init_minute_timer();
51
  
52
  while(1)
53
  {
54
    PORTB = 0xFF;
55
    wait_minute();
56
    PORTB = 0;
57
    wait_minute();
58
  }
59
  
60
  return;
61
}


Vielen Dank und Gruß
Johannes

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