PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LED blinkt falsch



Bulldozer
06.10.2009, 17: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);

}

uwegw
06.10.2009, 18:17
Du hast das sei() und cli() vertauscht.
Außerdem hat der Tiny2313 noch einen internen Taktteiler, der mit dem CKDIV8-Fusebit (oder per Software, dann sind noch andere Teilerwerte möglich) deaktiviert werden muss. Im Orignalzustand läuft er sonst effektiv mit 1MHz.

Bulldozer
06.10.2009, 19:47
Hallo,

Danke für den Tipp. Ist für mich noch ein wenig Neuland. Das erklärt jedoch nicht warum die Einschaltzeit im Verhältniss zur Ausschaltzeit etwa 3:1 beträgt.