- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 10

Thema: Es wird kein Interrupt ausgelöst

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    51

    Es wird kein Interrupt ausgelöst

    Anzeige

    Praxistest und DIY Projekte
    Code:
    #include <avr/io.h>
    #include <avr/signal.h>
    #include <avr/interrupt.h>
    
    
    SIGNAL (SIG_OUTPUT_COMPARE1B)
    {
    PORTB ^= 0xFF;
    
    }
    
    
    int main (void)
    {
    TIMSK |= 0b00001000;
    TCCR1B|= 0b00001010;
    
    DDRB = 0xFF;
    OCR1B = 303;
    sei();
     
    while(1)
    {
    
    }
    return 0;
    }
    was habe iich hier falsch gemacht?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Welcher Controller?
    Dann kann man mal schauen, welche Bedeutung die Bits in TIMSK und TCCR1B haben.

    Was soll das Ding nach deiner Erwartung tun?
    Und was tut es stattdessen?
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Karlsruhe
    Alter
    36
    Beiträge
    1.225
    Ja!

    mfG
    Markus

    PS: Keine Information über den verwendeten AVR, Magic Values zur Registerinitialisierung, alte Interruptschreibweise.

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    51
    atmega16
    er soll nach bestimmten Abständen den ganzen port B Toggeln

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Und was tut er? Toggelt er nicht? Toggelt er zu schnell/zu langsam?
    Wenn nichts passiert, welchen Zustand hat der Port (High/Low)?
    #ifndef MfG
    #define MfG

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Du lässt den Counter im CTC-Modus (Mode 4) laufen, der Counter zählt also von 0 - OCR1A. Da Du OCR1A nicht gesetzt hast, bleibt das Register im Reset-Zustand (also 0x0000) und Dein Counter zählt unsinnigerweise von 0 bis 0....

    Lösung des Problems: Entweder einen Wert für OCR1A setzten, der > 303 ist, oder WGM12 in TCCR1B nicht setzten.

    Gruß,
    askazo

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    51
    Der soll doch nen interrupt machen wenn Zähler = OCR1B ist.
    Wenn ich das bis OCR1A mache wie du es gesagt hast dann Klappt es auf einmal aber warum?
    Ich habe doch SIG_OUTPUT_COMPARE1B geschrieben und nicht
    SIG_OUTPUT_COMPARE1A.

    Und im im Timer Interrupt Mask register ist ein Interrupt für Compare A nicht aktiviert sonder nur für Compare B.

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Datenblatt S. 98:
    "In Clear Timer on Compare or CTC mode [...], the OCR1A or ICR1 Register
    are used"

    OCR1B als Vorgabewert geht im CTC-Modus nicht.
    #ifndef MfG
    #define MfG

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Zitat Zitat von MrTaco
    Der soll doch nen interrupt machen wenn Zähler = OCR1B ist.
    Genau das macht er ja auch - nur dann muss der Zähler auch erst mal bis zu dem Wert kommen, der in OCR1B steht.

    So wie Du den Timer eingestellt hast, wird das OCR1A-Register dafür verwendet, den Maximalwert des Zählers zu definieren. Wenn Du z.B. den Wert 350 ins OCR1A-Register schreibst, zählt der Zähler von 0 bis 350 und fängt dann wieder bei 0 an. Wenn er dann beim Zählen den Wert erreicht, der in OCR1B steht, wird auch der entsprechende Interrupt ausgelöst.

    Im Standard-Modus zählt der Zähler immer von 0-65535 (0xFFFF). Dazu müsste aber das Bit WGM12 bei der Initialisierung auf 0 gesetzt werden (also TCCR1B|= 0b00000010; )

    Schau Dir mal im aktuellen Datenblatt vom ATMega16A die Tabelle auf Seite 112 an, besonders die Spalte "TOP". Vielleicht wird's dann klarer

    Gruß,
    askazo

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    05.05.2008
    Beiträge
    51
    ahhhh jetzt verstehe ich DANKE EUCH BEIDEN.
    echt top von euch.

Berechtigungen

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

LiFePO4 Speicher Test