-         
Ergebnis 1 bis 3 von 3

Thema: Fehlerhaftes Programm >>> Timer-Interrupt oder glabale Variable

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.06.2019
    Beiträge
    49

    Fehlerhaftes Programm >>> Timer-Interrupt oder glabale Variable

    Anzeige

    Hallo zusammen.

    Derzeit beschäftige ich mich mit Timer-Interrupts.
    Dazu wurde ein Prog geschrieben - läuft nicht richtig - Fehlerursache erkenne ich leider nicht.

    Ablauf:
    Interrupt löst nach jeder 1ms aus.
    LED schaltet nach 100ms für 400ms ein und dann wieder aus.
    Danach startet die LED-Routine erneut.
    Für >= habe ich mich entschieden, damit der ungefähre Zeitablauf, beim "verschlucken" eines Interrupts, erhalten bleibt.

    Fehler:
    LED schaltet nach 100ms ein und bleibt dauerhaft eingeschaltet.

    Code:
    #define F_CPU 1000000UL	
    #include <avr/interrupt.h>	
    
    volatile uint8_t OverflowZaehler=0;
    
    ISR(TIM1_COMPA_vect)	
    {
        OverflowZaehler++;
    }
    
    void OverflowZaehlerReset(void)
    {
        OverflowZaehler=0;
    }
    
    void LEDein(void)
    {
       PORTB |= (1<<PB0); 
    }
    
    void LEDaus(void)
    {
        PORTB &= ~(1<<PB0);
    }
        
    int main(void)
    {
      DDRB |= (1<<PB0);
    
      TCCR1B |= (1<<WGM12) | (1<<CS11);
      TIMSK1 |= (1<<OCIE1A); 
      OCR1A = 124; 
      sei(); 
    
      LEDaus();
    
      while(1)
      {
        if (OverflowZaehler >= 100)
        LEDein();
        {
            if(OverflowZaehler >= 500)
            {
                LEDaus();
                OverflowZaehlerReset();
            }
    
        }
      }
    }
    __________________________________________________ _____________________________
    | Sprache: C | AtmelStudio 7.x | Atmel-ICE | Favorit-uC: ATtiny84 | Status: Anfänger |

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.04.2015
    Beiträge
    454
    Mehr als 255 passen nun mal in ein Byte nicht rein.
    Nimm also ein uint16_t in der Definition.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.06.2019
    Beiträge
    49
    Hey Holomino - DANKE!
    Das war der Fehler - Thema "Bäume und Wald"...

    Im Anschluss "verschluckte" sich die Aus-Anweisung regelmäßig.
    Nach 2 korrekten Durchläufen, kam einmaling der LED-Takt, AUS für ~20ms/EIN für ~480ms - danach wieder 2* korrekter Takt, etc.
    Nachdem ich beide >= gegen == ausgetauscht habe, hats auch hier geklappt.
    __________________________________________________ _____________________________
    | Sprache: C | AtmelStudio 7.x | Atmel-ICE | Favorit-uC: ATtiny84 | Status: Anfänger |

Ähnliche Themen

  1. Timer und/oder Interrupt
    Von hardware.bas im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 20.12.2010, 15:36
  2. Fehlerhaftes Programm
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 17.12.2009, 07:12
  3. Timer oder Interrupt reagiert nicht
    Von Sprengi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 21.08.2009, 20:59
  4. was brauche ich da, Timer oder Interrupt?
    Von Dj_Beat im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 23.11.2007, 06:17
  5. [ERLEDIGT] rs232 oder Timer Interrupt Priorität?
    Von avrler im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 19.07.2004, 16:41

Berechtigungen

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