- Labornetzteil AliExpress         
Ergebnis 1 bis 3 von 3

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

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    147

    Fehlerhaftes Programm >>> Timer-Interrupt oder glabale Variable

    Anzeige

    Praxistest und DIY Projekte
    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 | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

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

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.06.2019
    Beiträge
    147
    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 | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |

Ähnliche Themen

  1. Timer und/oder Interrupt
    Von hardware.bas im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 20.12.2010, 16:36
  2. Fehlerhaftes Programm
    Von Kampi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 17.12.2009, 08:12
  3. Timer oder Interrupt reagiert nicht
    Von Sprengi im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 21.08.2009, 21: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, 07:17
  5. rs232 oder Timer Interrupt Priorität?
    Von avrler im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 19.07.2004, 17:41

Berechtigungen

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

12V Akku bauen