- Labornetzteil AliExpress         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 23

Thema: Interrupt Problem mit c

  1. #1
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9

    Interrupt Problem mit c

    Anzeige

    Praxistest und DIY Projekte
    Hallo,
    Ich brauche nun für einen bestimmten Grund in relativ großen Zeitabständen (0,5-2 sekunden) einen Interrupt.
    Dafür wollte ich dann den Beispielcode hier verwenden.
    Ich habe ihn noch etwas verändert und nun sieht er so aus:
    Code:
    #ifndef F_CPU
    #define F_CPU    1000000
    #endif
    
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdint.h>
    #include <avr/interrupt.h>
    
    
    volatile int stat=0;
    
    
    ISR(TIMER2_OVF_vect)
    {
    if(stat = 0){
    	stat=1;
    	PORTB |= (1<<PB0);
    }else{
    	stat=0;
    	PORTB &= ~(1<<PB0);
    }
    }
    
    
    int main(void){
    	DDRB |= (1<<PB0);
    	sei();
    	TCCR2 = (1<<CS22) | (1<<CS20);
    	TIMSK |= (1<<TOIE2);
    	while(1){}
    }
    Ich will damit testweise eine LED an B0 zum blinken kriegen.
    Es geht bloß leider nicht.
    Ich verwende einen atmega32 und avr-gcc (avr studio).
    Hat da irgendjemand eine Idee?

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Versuche einmal das sei direkt vor die while Schleife.

    in die ISR kannst du auch "PORTB ^= (1<<PB0);" schreiben (Invertiere PB0).

    Die Einstellungen habe ich mir nicht angeschaut.

    MfG Hannes

  3. #3
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Nee, hat immer noch nicht funktioniert.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Bei dieser Zeile if(stat = 0){ sollte dir der Compiler eigentlich ein Warning ausgeben.
    Richtig ist if(stat == 0){
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Ja stimmt, hätte er gesollt.
    Ich habe aber durch andre Tests herausgefunden, dass die ISR nie aufgerufen wird.
    Außerdem habe ich jetzt das ganze if...else durch PORTB ^= (1<<PB0); ersetzt.

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    In der Simulation läuft es aber. Bist du sicher das da nicht ein anderer HW-Wurm drinnen ist?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  7. #7
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Wenn ich das PORTB ^= (1<<PB0); in die while(true) schreibe,
    dann leuchtet die LED so mittel. Das Oszi bestätigt ein sehr schnelles PWM.
    Also Hardwaremäßig läuft eigentlich alles.

  8. #8
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Das ist klar das dann die Led mit etwa halber Kraft leuchtet. Die Led ist so zu 50% ein und zu 50% aus => Tastgrad=50%.

    Das war aber schon einmal ein guter Test, so kann man sicher sein das die Led funktioniert.

    Versuche einmal ob das TOV2-Flag im Register TIFR sich ändert. Du könntest zusätzlich (damit du das siehst) eine Delay Zeit einfügen.

    MfG Hannes

  9. #9
    Erfahrener Benutzer Begeisterter Techniker Avatar von avrrobot
    Registriert seit
    12.01.2011
    Beiträge
    210
    Blog-Einträge
    9
    Wann soll ich das ausprobieren, zur Laufzeit?

  10. #10
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.056
    Du könntest es in der while Schleife das Flag prüfen. So kannst du sicher sein das der Timer läuft.

    MfG Hannes

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Problem mit Interrupt
    Von Naxos im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 30.12.2008, 06:56
  2. Problem mit Interrupt
    Von Stefan_84 im Forum Assembler-Programmierung
    Antworten: 20
    Letzter Beitrag: 27.06.2008, 18:59
  3. Interrupt Problem
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 28.08.2007, 19:32
  4. Interrupt problem!
    Von Jannek im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 13.05.2007, 23:26
  5. interrupt problem
    Von xanatos im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 11.04.2005, 17:08

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad