-         

Ergebnis 1 bis 8 von 8

Thema: Timer Overflow funktioniert nicht [erledigt]

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205

    Timer Overflow funktioniert nicht [erledigt]

    Anzeige

    Hallo

    Ich hab das RN Mega2560 Modul. Ich möchte, dass ein Interrupt ausgelöst wird, wenn der Timer an der oberen Grenze angekommen ist. (16Bit Timer = 65536)
    Allerdings wird die ISR nicht ausgeführt. Hab auch schon im Forum gesucht aber ich finde meinen Fehler einfach nicht.

    Hier ist mal der Code:
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    volatile uint8_t zaehler=0;
    
    void start_timer(void) {
    TCCR5B |= (1<<CS02) | (1<<CS00);    //Prescaler für Timer0 auf 1024
    TCNT5 = 0;
    TIMSK5 |= (1<<TOIE5);			     //Timer Overflow Interrupt Enable
    zaehler=0;
    sei();
    }
    
    
    ISR(TIMER5_OVF_vect) {
    if(zaehler<10) zaehler++;
    else {
    	zaehler=0;
    	lcd_clrscr();
    	lcd_puts("Timer");
    	PORTC ^= (1<<7);
    	}
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2006
    Ort
    Biberach
    Alter
    27
    Beiträge
    485
    Hi,
    ist das der komplette Code oder nur ein Auszug? Weil wenn es der komplette Code ist, kann es gar nicht funktionieren, da du die Funktion zur Initialisierung des Timers nie aufrufst.
    Ob das mit den Registern richtig ist kann ich jetzt nicht genau sagen, da ich mit Bascom arbeite und es dort bissle einfacher ist.

    MfG

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    hallo

    nein das sind nur die Funktionen für den Timer. Die Funktion start_timer() rufe ich in meiner main() Funktion auf.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    16.12.2006
    Beiträge
    205
    Hallo

    hab den Fehler gefunden, der Timer läuft ich hab mich nur mit der Zeit verrechnet. Durch den großen Prescaler und dem Aufruf nur bei jedem 10 Overflow wird erst nach 40sek etwas ausgegeben. Hab mich schon die ganze Zeit gewundert, warum nichts passiert

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Hallo, ich habe auch ein Problem mit dem 16Bit Timer, daher nutze ich einfach mal diesen Thread.

    Und zwar soll durch Overflow einfach eine Variable erhöht werden. Das funktioniert mit dem 8bit Timer 2 super, aber der 16Bit Timer 3 will einfach nicht laufen obwohl ich vom Prinzip her die gleichen Einstellungen habe.

    Hier das Init:
    Code:
      TCCR3B |= _BV(CS32);
      //TCCR3B |= _BV(CS31);
      TCCR3B |= _BV(CS30);
      TCNT3H = 0xF0;
    
      //OCR3AL = 0xF8;
      //OCR3AH = 0x00;
    
      TIMSK3 |= _BV(TOIE3);
    Ich nutze die SIG_OVERFLOW3, das ist doch richtig oder?

    Es geht um den AT90CAN128, Timer 2 (8bit) läuft (mit SIG_OVERFLOW2) aber Timer 3 (16bit mit SIG_OVERFLOW3) nicht. Ich will nicht beide parallel betreiben den 8bit habe ich nur zum Test benutzt um zu sehen ob das Prinzip richtig ist.

    Weiß einer ob da was fehlt, falsch oder gesondert zu beachten ist?
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    An dem geschriebenen sehe ich keinen Fehler, weiss allerdings nicht was du mit TCNT3H = 0xF0; meinst, sollte aber nicht relevant sein.
    Das SIG_OVERFLOW3 ist schon veraltet, es würde aber dein Compiler anmeckern, neu ISR(TIMER3_OVF_vect).
    Zeig mal den ganzen Code, der Fehler muss ja nicht in den fünf Zeilen liegen, da hättest du ihn doch schon selbst gefunden.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.03.2006
    Ort
    WOB
    Beiträge
    630
    Hallo, schon mal vielen Dank. Ist schwierig dir den ganzen Code zu schicken. Ich fang mal mit der main an.

    Komisch ist, dass es mit dem 8Bit geht...
    Angehängte Dateien Angehängte Dateien
    Gruß Thomas \/

    Alles über AVR, PIC und CAN
    blog.cc-robotics.de

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Ich würde mal vorschlagen das du nur den Timer alleine probierst, ohne dem ganzen rundherum.
    Ich kann es nicht simulieren das mein compiler diese SIGNAL( ) nicht mag, müsste alles umschreiben.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

Berechtigungen

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