- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 5 von 5

Thema: Interrupt wird nicht ausgelöst

  1. #1

    Interrupt wird nicht ausgelöst

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen, bin noch recht neu bei der Programmierung von Microcontrollern.
    Ich wollte eigentlich etwas mit den Timern experimentieren, jedoch wird aus irgendeinem Grund der Interrupt beim TCNT Überlauf nicht ausgelöst

    Habe das RN-Control Board mit atmega 32

    folgender Code:

    habe nun in der Interruptroutine nur PIN4 low gesetzt, sodass wenn der Interrupt ausgelöst wird die LED ausgehen müsste, tut sie aber nicht.

    Code:
    #include<avr/io.h>
    #include<avr/interrupt.h>
    
    ISR(TIMER2_OVF_vect)
    {
    PORTC |= (1<<4); //Falls der Interrupt überhaupt aufgerufen wird LED aus!
    }
    
    
    
    int main(void){
    
    	// Initialisierung TIMER2
    	TCCR2 = (1<<CS22);		// Prescaler von 1
    	TCNT2  = 0;				// Counter mit 0 Initialisieren
    	TIMSK |= (1<<TOIE2);	// Interrupts aktivieren und damit Timer starten
    
    
    	// Initialisierung PORTC
    	DDRC=0xff; //alle LEDS an 
    
    sei();
    
    while(1)
    {
    }
    
    }

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Jeder fängt Mal klein an, um den Frustfaktor niedrig zu halten, empfiehlt es sich bei Problemen den Code Schritt für Schritt durchzugehen und immer gegen die entsprechenden Datenblätter/Schaltpläne zu prüfen.

    Fangen wir Mal an:
    PORTC |= (1<<4);
    Hat mich zuerst stutzig gemacht, aber wie der Schaltplan zum Board zeigt, sind die LEDs gegen VCC geschaltet - auch gut. Aber, man kann ja immer besser werden:
    PORTC |= (1 << PC4); // Verwendung der Konstanten aus der avr-libc. Macht den Code besser lesbar.

    TCCR2 = (1<<CS22); // Prescaler von 1
    Stimmt nicht, laut Datenblatt ist der Prescaler 64, du wolltest wahrscheinlich:
    TCCR2 = (1<<CS20); // Prescaler von 1

    Davon abgesehen ist der Code korrekt (gerade simuliert), ich würde also weitere Fehlerquellen wie die Stromversorgung o.ä. in Betracht ziehen.

    mfG
    Markus

  3. #3
    Stromversorgung sollte eigentlich alles in Ordnung sein, wenn ich dass Setzen des Ports aus der ISR Routine in die main Funktion kopiere tritt auch exakt dass erwartet Ergebnis ein, PIN4 Wird High => LED aus.
    Es wird tatsächlich der Interrupt nicht ausgelöst bzw die ISR nicht ausgeführt.

    Nutze AVR Studio und den AVRISP mkII kann beim Programmer was schief gehen ? andere Programme funktionierten bisher eigentlich einwandfrei.

    Müssen evtl bestimmte FUSEbits gesetzt werden um Interrupts zu verwenden?

    laut Datenblatt reicht das Globale Interrupt Enable und eben für den spezifischen Interrupt hier TOIE2 für den Counterüberlauf.

  4. #4
    Ich habs, hatte in den Configuration Options den falschen Controller.

    Vielen Dank

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Hihi, der Teufel ist ein Eichhörnchen.
    Da kostet ein einzelnes falsch gesetztes Bit auch schon Mal ein ganzes Wochenende.

    mfG
    Markus

Berechtigungen

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

LiFePO4 Speicher Test