frabe
18.06.2019, 11:02
Hallo zusammen.
Derzeit beschäftige ich mich mit Timer-Interrupts.
Dazu wurde ein Prog geschrieben - läuft nicht richtig - Fehlerursache erkenne ich leider nicht.
Ablauf:
Interrupt löst nach jeder 1ms aus.
LED schaltet nach 100ms für 400ms ein und dann wieder aus.
Danach startet die LED-Routine erneut.
Für >= habe ich mich entschieden, damit der ungefähre Zeitablauf, beim "verschlucken" eines Interrupts, erhalten bleibt.
Fehler:
LED schaltet nach 100ms ein und bleibt dauerhaft eingeschaltet.
#define F_CPU 1000000UL
#include <avr/interrupt.h>
volatile uint8_t OverflowZaehler=0;
ISR(TIM1_COMPA_vect)
{
OverflowZaehler++;
}
void OverflowZaehlerReset(void)
{
OverflowZaehler=0;
}
void LEDein(void)
{
PORTB |= (1<<PB0);
}
void LEDaus(void)
{
PORTB &= ~(1<<PB0);
}
int main(void)
{
DDRB |= (1<<PB0);
TCCR1B |= (1<<WGM12) | (1<<CS11);
TIMSK1 |= (1<<OCIE1A);
OCR1A = 124;
sei();
LEDaus();
while(1)
{
if (OverflowZaehler >= 100)
LEDein();
{
if(OverflowZaehler >= 500)
{
LEDaus();
OverflowZaehlerReset();
}
}
}
}
Derzeit beschäftige ich mich mit Timer-Interrupts.
Dazu wurde ein Prog geschrieben - läuft nicht richtig - Fehlerursache erkenne ich leider nicht.
Ablauf:
Interrupt löst nach jeder 1ms aus.
LED schaltet nach 100ms für 400ms ein und dann wieder aus.
Danach startet die LED-Routine erneut.
Für >= habe ich mich entschieden, damit der ungefähre Zeitablauf, beim "verschlucken" eines Interrupts, erhalten bleibt.
Fehler:
LED schaltet nach 100ms ein und bleibt dauerhaft eingeschaltet.
#define F_CPU 1000000UL
#include <avr/interrupt.h>
volatile uint8_t OverflowZaehler=0;
ISR(TIM1_COMPA_vect)
{
OverflowZaehler++;
}
void OverflowZaehlerReset(void)
{
OverflowZaehler=0;
}
void LEDein(void)
{
PORTB |= (1<<PB0);
}
void LEDaus(void)
{
PORTB &= ~(1<<PB0);
}
int main(void)
{
DDRB |= (1<<PB0);
TCCR1B |= (1<<WGM12) | (1<<CS11);
TIMSK1 |= (1<<OCIE1A);
OCR1A = 124;
sei();
LEDaus();
while(1)
{
if (OverflowZaehler >= 100)
LEDein();
{
if(OverflowZaehler >= 500)
{
LEDaus();
OverflowZaehlerReset();
}
}
}
}