dg
16.05.2007, 21:20
Hallo Zusammen,
irgendwie komme ich mit einem simplem Programmteil für einen Tiny25 nicht weiter.
Ich habe mal das Problem auf so wenig Code wie möglich reduziert.
Die LED soll einfach nur jede Minute kurz aufblinken. Leider blinkt sie viel zu schnell und mein Zähler i wird trotz volatile ignoriert.
Hier der Code:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Flags f�r IRQs
volatile uint8_t EveryMinuteFlag;
// Z�hler f�r IRQs
volatile uint8_t i=0;
int main(void) {
// Ausg�nge setzen
DDRB |= ((1 << PB2) | (1 << PB3) | (1 << PB1));
//Action-Flags
EveryMinuteFlag = 1;
// Timer0 Prescaler 1024
TCCR0B |= ((1<<CS02) | (0<<CS01) | (1<<CS00));
OCR0A = 0x00;
// OCR0B = 0x00;
// Interrupts f�r Timer0
TIMSK |= (1<<OCIE0A); //Interrupt bei Compare
TIMSK |= (1<<TOIE0); //Interrupt bei Overflow
// Interrupts aktivieren
sei();
while (1) {
if (EveryMinuteFlag) {
// LED bliken lassen
PORTB |= ( 1 << PB2 );
_delay_ms(5);
PORTB &= ~( 1 << PB2 );
EveryMinuteFlag = 0;
}
}
}
SIGNAL(SIG_OVERFLOW0)
{
i++;
if (i==250) {
EveryMinuteFlag=1;
i=0;
}
}
Egal welchen vergleichswert ich für i nehme die LED blinkt immer genauso schnell.
Ich mach daran seit Tagen rum und es will einfach nicht. Hat jemand noch ne Idee?
Vielen Dank
daniel
irgendwie komme ich mit einem simplem Programmteil für einen Tiny25 nicht weiter.
Ich habe mal das Problem auf so wenig Code wie möglich reduziert.
Die LED soll einfach nur jede Minute kurz aufblinken. Leider blinkt sie viel zu schnell und mein Zähler i wird trotz volatile ignoriert.
Hier der Code:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
// Flags f�r IRQs
volatile uint8_t EveryMinuteFlag;
// Z�hler f�r IRQs
volatile uint8_t i=0;
int main(void) {
// Ausg�nge setzen
DDRB |= ((1 << PB2) | (1 << PB3) | (1 << PB1));
//Action-Flags
EveryMinuteFlag = 1;
// Timer0 Prescaler 1024
TCCR0B |= ((1<<CS02) | (0<<CS01) | (1<<CS00));
OCR0A = 0x00;
// OCR0B = 0x00;
// Interrupts f�r Timer0
TIMSK |= (1<<OCIE0A); //Interrupt bei Compare
TIMSK |= (1<<TOIE0); //Interrupt bei Overflow
// Interrupts aktivieren
sei();
while (1) {
if (EveryMinuteFlag) {
// LED bliken lassen
PORTB |= ( 1 << PB2 );
_delay_ms(5);
PORTB &= ~( 1 << PB2 );
EveryMinuteFlag = 0;
}
}
}
SIGNAL(SIG_OVERFLOW0)
{
i++;
if (i==250) {
EveryMinuteFlag=1;
i=0;
}
}
Egal welchen vergleichswert ich für i nehme die LED blinkt immer genauso schnell.
Ich mach daran seit Tagen rum und es will einfach nicht. Hat jemand noch ne Idee?
Vielen Dank
daniel