[EDIT] Verdammt, wieso kann man den Namen des Themas nicht ändern. Ich war doch noch garnicht fertig. =(
Hallo Leute,
ich habe mal eine Frage:
CodeBox c
Berechnung:
1000000 / 64 = 15625 / 1000 = 15,625ms
=> Alle 15,625ms zählt TCNT0 + 1.
2000ms / 15,625ms = 128 => Wenn der Zähler auf TCNT0 = 128 steht, sind 2
Sekunden vergangen.
Der Interrupt kommt also alle 2ms. Die LEDs an PORTA schalten an und
alles wird für 0,5s lahm gelegt => bleiben also leuchten. (Ich weiß,
delay() ist nicht schön -> aber schnell ;-) )
Danach wieder aus und das gleiche nach den nächsten Zwei sekunden.
So die Theorie!
Woran kann das liegen, dass es nicht funktioniert?
Liebe Grüße,
Finn
Hallo Leute,
ich habe mal eine Frage:
CodeBox c
#define F_CPU 1000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
int main (void)
{
DDRA = 0b11111111;
PORTA = 0b00000000;
// Timer 0 initialisieren
sei();
TIMSK |= (1<<OCIE0);
OCR0 = 128+1;
TCCR0 |= (1<<WGM01);
TCCR0 &= ~(1<<WGM00);
TCCR0 &= ~(1<<CS02);
TCCR0 |= (1<<CS01);
TCCR0 |= (1<<CS00);
}
ISR (TIMER0_COMP_vect)
{
PORTA = 0b11111111;
_delay_ms(500);
PORTA = 0b00000000;
}
Berechnung:
1000000 / 64 = 15625 / 1000 = 15,625ms
=> Alle 15,625ms zählt TCNT0 + 1.
2000ms / 15,625ms = 128 => Wenn der Zähler auf TCNT0 = 128 steht, sind 2
Sekunden vergangen.
Der Interrupt kommt also alle 2ms. Die LEDs an PORTA schalten an und
alles wird für 0,5s lahm gelegt => bleiben also leuchten. (Ich weiß,
delay() ist nicht schön -> aber schnell ;-) )
Danach wieder aus und das gleiche nach den nächsten Zwei sekunden.
So die Theorie!
Woran kann das liegen, dass es nicht funktioniert?
Liebe Grüße,
Finn