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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.