Bulldozer
06.10.2009, 18:56
Hallo,
mit folgendem Code möchte ich eine LED mit 1 Hz blinken lassen. Zum einen passt die Blinkfrequenz jedoch nicht und zum anderen ist die LED an dem Port etwa 7s aus und dann etwa 20s an. Ich kann mir nicht erklären wie das zu stande kommt. Im AVR Studio Simulator funktioniert es einwandfrei.
Wäre schön wenn mir jemand nen Tipp geben könnte. Verwende einen Attiny2313 mit internen Takt (8Mhz)
#include <avr/io.h>
#include <avr/interrupt.h>
volatile int Impuls;
ISR(TIMER0_OVF_vect) //
{
Impuls++;
}
int main (void)
{
DDRB = 0x0F; //Bit1-4 Eingang und 5-8 Ausgang
PORTB = 0x00; //Pullups deaktivieren und Ausgänge = 0
TCCR0B |= (1 << CS02) | (1 << CS00); //Prescaler auf 1024 stellen
TIMSK |= (1 << TOIE0); // Timer 0 Overflow Interrupt aktivi
while(1) {
sei();
if (Impuls>=31) //ergibt sich bei 1Hz-Taktfrequenz
{
PORTB= PORTB ^ (1<<PB0); LED toggeln lassen
Impuls = 0;
}
cli();
}
return (1);
}
mit folgendem Code möchte ich eine LED mit 1 Hz blinken lassen. Zum einen passt die Blinkfrequenz jedoch nicht und zum anderen ist die LED an dem Port etwa 7s aus und dann etwa 20s an. Ich kann mir nicht erklären wie das zu stande kommt. Im AVR Studio Simulator funktioniert es einwandfrei.
Wäre schön wenn mir jemand nen Tipp geben könnte. Verwende einen Attiny2313 mit internen Takt (8Mhz)
#include <avr/io.h>
#include <avr/interrupt.h>
volatile int Impuls;
ISR(TIMER0_OVF_vect) //
{
Impuls++;
}
int main (void)
{
DDRB = 0x0F; //Bit1-4 Eingang und 5-8 Ausgang
PORTB = 0x00; //Pullups deaktivieren und Ausgänge = 0
TCCR0B |= (1 << CS02) | (1 << CS00); //Prescaler auf 1024 stellen
TIMSK |= (1 << TOIE0); // Timer 0 Overflow Interrupt aktivi
while(1) {
sei();
if (Impuls>=31) //ergibt sich bei 1Hz-Taktfrequenz
{
PORTB= PORTB ^ (1<<PB0); LED toggeln lassen
Impuls = 0;
}
cli();
}
return (1);
}