-         

Ergebnis 1 bis 6 von 6

Thema: Atmega 32 8-Bit Timer Interrupt

  1. #1

    Atmega 32 8-Bit Timer Interrupt

    Anzeige

    Hallo Zusammen,
    ich bin relativ neu in der Mikrocontroller-Welt und wollte deswegen ein
    kleines Programm zum Verständnis der Timer und Interrupts schreiben.
    Nach intensivem Studium des Datasheets komme ich aber hier leider nicht
    weiter. Das Problem:
    Am gesammten Port C meines Atmega32 hängen 8 LEDs (LOW Aktiv PC0-PC7):
    Der Sinn des folgenden Programms sollte einfach sein die LED an PC0
    mithilfe des 8-Bit Counters im CTC-Mode zum Blinken zu
    bringen.(Geschwindigkeit war mir erstmal egal).
    Wenn ich das Programm jedoch starte leuchten alle LEDs an Port C auf und
    blinken auch nicht. Was mache ich falsch? Ich vermute, dass das Programm
    erst gar nicht in die ISR springt. Ist die Timer Initialisierung falsch?
    Gruß

    Benni



    Code:
    #include <stdint.h>
    #include <avr/io.h> 
    #include <avr/interrupt.h>
    
    //Interrupt Service Routine
    ISR(TIMER0_COMP_vect)
    {
    static uint8_t c=0;
    c=~c;
    if (c==0){PORTC |= (1<<PC0);}    
    
    if (c==1){PORTC &= ~(1<<PC0);} 
    
    }
    
    //Hauptprogramm
    
    int main(int argc, char **argv) {
    
    //Pin Konfiguration
    DDRC = 0xFF; //PORT C als Ausgang
      
    //Timer 0 initialisieren 
    TCNT0 = 0x00; //Timer 0 mit Null initialisieren
    OCR0 = 0xFE;  //Vergleichsregister initialisieren
    TIMSK = (1<<OCIE0);    //Output Compare interrupt enable
    sei();            //Enable Global Interrupt
    
    //Timer Start
    TCCR0 = ((1<<WGM01) | (1<<COM00) | (1<<CS02) |  (1<<CS00));
    //         CTC Mode | Toggle OC0 | Prescaler clk/1024
                
    while(1){};
      
    }

    [/code]

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    Hi Benni,
    also wenn du in der ISR die Variable c invertierst wenn sie den Wert 0 hat dann wird sie zu 255. Da du allerdings auf 1 abfrägst wird das schon mal nicht erreicht. Änder das mal ab und versuchs nochmal.
    mfg franz

  3. #3
    Hallo Franz,
    danke für die schnelle Antwort! Du hattest volkommen Recht. Habe die zweite If Abfrage abgeändert, aber leider bleibt das Problem weiterhin das selbe: Alle LEDs leuchten konstant:
    Habe schon weiter daran rumprobiert, aber finde den Fehler einfach nicht.
    Gruß Benni

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.05.2005
    Ort
    Rott am Inn
    Alter
    29
    Beiträge
    373
    Hi,
    du könntest mal deine ISR in ISR(TIMER0_OVF_vect) umbenennen vielleicht hilft das weiter. Ich kapier auch nicht so ganz was du in der main Schleife übergiebst.
    mfg franz

  5. #5
    Achso...das mit der main Schleife ist nur ein Überbleibsel aus der Auto-Vervollständigen-Funktion von eclipse und ist natürlich völliger Blödsinn.
    Es müsste natürlich ganz einfach "int main (void)" heißen! Hat aber leider auch keinen Einfluss(Schon ausprobiert)! Das mit dem anderen Interrupt -Vector probier ich auch nochmal aus, wobei ich der Meinung bin, dass ich schon den jetzigen nehmen müsste, wenn ich den Timer im CTC Mode benutzen möchte...
    Danke aber trotzdem

    Gruß


    Benni

  6. #6
    Hallo Franz,
    danke für deine Hilfen! Ich habe das Problem endlich gelöst.
    Es lag alles nur an der von mir verwendeten Enwicklungsumgebung!
    Ich benutzte das auf www.mikrocontroller.net vorgestellte AVR-Plugin für Eclipse
    http://www.mikrocontroller.net/articles/AVR_Eclipse
    den folgenden Hinweis habe ich jedoch übersehen:

    WARNUNG: Bei mir funktionierten Timer-Interrupts mit dem Plugin nicht
    (die jedoch tadellos mit der WinAVR Makefile fuktionierten). Vielleicht
    habe ich nur eine Option übersehen, seid aber auf der Hut. Wenn ihr
    Unregelmäßigkeiten bei IRQs feststellt, versucht's erstmal ohne das
    Eclipse-Plugin (bevor ihr stundenlang an eurem Code und euch selbst
    zweifelt ).

    Habe mich dann nach Alternativen umgeguckt und bin hier fündig geworden:
    http://sourceforge.net/projects/avr-eclipse

    Damit funktioniert alles einwandfrei!

    Gruß

    Benni

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •