-         

Ergebnis 1 bis 3 von 3

Thema: LED blinkt falsch

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2007
    Beiträge
    7

    LED blinkt falsch

    Anzeige

    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);

    }

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    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.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    21.02.2007
    Beiträge
    7
    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
  •