-
-
Neuer Benutzer
Öfters hier
LED blinkt falsch
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);
}
-
Erfahrener Benutzer
Robotik Einstein
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.
-
Neuer Benutzer
Öfters hier
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.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen