Mit Timer LED einmal pro Sekunde leuchten lassen

OP #1936658
Lesenswert?

1
#include <avr\io.h>
2
#include <avr\interrupt.h>
3
#define F_CPU 1000000
4

5
volatile uint8_t count;
6

7
int main () {
8

9
TCCR0 |= (1<<CS01) | (1<<CS00); // FCPU/64 => 1000000Hz/64/256= 61Hz
10
TIMSK |= (1<<TOIE0); 
11
TCNT0 = 0; 
12
DDRB |= (1<<PB2); 
13
count=0;
14
sei();
15

16
while (1) ;
17
}
18

19
ISR(TIMER0_OVF_vect) {
20
  count++;
21

22
  if (count==61) {
23
    PORTB |= (1<<PB2);
24
    count=0;
25
    PORTB &= ~(1<<PB2);
26
  }
27
}

Die Berechnung des Timers sollte stimmen, oder?
Mein Problem ist nun, dass wenn ich im Interrupt die LED nicht wieder 
ausschalte diese anbleibt und wenn ich sie nicht ausschalte geht sie 
erst gar nicht an.
Oder geht das ganze so schnell, dass ich es gar nicht sehen kann?
Falls ja, wie kann man das ändern?
Wenn ich ein delay nach dem LED einschalten einfügen würde, verändere 
ich dann den ganzen Timer ablauf, oder ist das nur für das Interrup 
relevant?
zB:
1
   if (count==61) {
2
    PORTB |= (1<<PB2);
3
    _delay_ms(50);
4
    count=0;
5
    PORTB &= ~(1<<PB2);
6
  }
Danke!
OP #1936794
Lesenswert?

Danke erstmal, aber kann das jemand auch einem Blöden wie mir erklären?
Das ^= ist, wenn ich das richtig verstanden habe, der XOR Operator, 
oder?
Wenn dem so ist, dann habe ich ja zwei Zustände die überprüft werden, 
nämlich an oder aus.
Aber bei beiden Varianten ist das Ergbenis mit XOR doch immer wahr, also 
wie wird da was "getoggelt"?

Und nochwas: "Du hast dann aber 0,5Hz, musst also deine Prescaler neu 
überdenken."
Wieso habe ich dann 0,5Hz wenn ich toggel?
Gast #1936851
Lesenswert?

Hi

>Das ^= ist, wenn ich das richtig verstanden habe, der XOR Operator,
>oder?
>Wenn dem so ist, dann habe ich ja zwei Zustände die überprüft werden,
>nämlich an oder aus.
>Aber bei beiden Varianten ist das Ergbenis mit XOR doch immer wahr, also
>wie wird da was "getoggelt"?

0 XOR 1 = 1
1 XOR 1 = 0

MfG Spess

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