Forum: Mikrocontroller und Digitale Elektronik ATmega 328P Timer1 falsche Interrupts


von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe ein Problem mit einem ATMega328p, ich bin mit AVR Studio 4.19 
und debugWire über AVR Dragon auf dem Gerät.

Ich habe in dem Mega eine Soft PWM Programmiert, und das Problem, das 
die Flags OCF1B und OCF1A gesetzt werden, obwohl die werte in den 
Compare Registern unterschiedlich zu dem Timer wert sind. Ich habe einen 
Screenshot aus dem AVR Studio angehangen. OCF1A ist schon wieder 
gelöscht, da der Interrupt betreten wurden. OCF1B ist aber noch gesetzt. 
Laut Datenblat werden diese aber nur gesetzt, wenn:

> This flag is set int the timer clock cycle after the counter(TCNT1) value
>matches the Output Compare Register B(OCR1B).

ich kann mir keinen Reim darauf machen, warum das Passiert, von euch 
eine Idee?


Grüße Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Stefan schrieb:
> eine Idee?
Das Problem ist irgendwo im nicht geposteten Code.
Verwendest du auch andere Interrupts?  Falls ja: was wird darin gemacht? 
Steht irgendwo cli() in deinem Code?

von Stefan (Gast)


Lesenswert?

Hallo Lothar,

danke für deine Antwort, ich habe mal geschaut, und habe das CLI im 
Disassambling bei eine anderen Timer und einer EEPROM routine gefunden. 
Den code für den Anderen Timer habe ich dann vom buid 
ausgeschlossen(wird nicht gebraucht). Danach hatte ich nur noch 3 cli im 
Dissasambling: Anfang von Main für Speicher auf dem Stack, die EEPROM 
Routine und in "exit"

Die Einstiegssprungtabelle sieht so aus:

       0:  0c 94 5d 02   jmp  0x4ba  ; 0x4ba <__ctors_end>
       4:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
       8:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
       c:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      10:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      14:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      18:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      1c:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      20:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      24:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      28:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      2c:  0c 94 8c 02   jmp  0x518  ; 0x518 <__vector_11>
      30:  0c 94 c5 02   jmp  0x58a  ; 0x58a <__vector_12>
      34:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      38:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      3c:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      40:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      44:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      48:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      4c:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      50:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      54:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      58:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      5c:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      60:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>
      64:  0c 94 8a 02   jmp  0x514  ; 0x514 <__bad_interrupt>

also nur noch die 2 Vektoren von Timer1. Leider besteht das Problem 
immer noch.


Gute idee mit dem Code, ich werde mal versuchen so viel wie möglich zu 
streichen, bis das Problem nicht mehr auftaucht und den Code dann 
Posten.

Sonnst währe das ein ganz schöner haufen. ;)

Grüße Stefan

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.