AVR ballar ur vid Interrupt

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
John_E
Inlägg: 95
Blev medlem: 16 oktober 2007, 20:02:25
Ort: Bråten

AVR ballar ur vid Interrupt

Inlägg av John_E »

Hej!

Jag har ett problem med en PI reglering.

Har skrivit ett program där en loop skriver är värdet till en led display. Innan loopen återgår till början alternerar en mellan att hämta ärvärdet och börvärdet.
Ärvärdet från AD omvandlaren och börvärdet från ett tumhjul.

I Timer2 interrupten ligger reglerings sekvensen. Räkna ut felet och dela upp det i I-tids portioner.

Styrignalen är OCR1A

Mitt problem är:
När den hoppar till interrupten så slocknar displayen och ingenting fungerar. Inte ens om jag bara skriver reti i interrupten. Jag har kört debuggen 3 miljoner varv och där fungerar skiten.

Har haft det här problemet förrut när jag programerat jätte simpla grejer i Assembler 4. Det verkar som att så fort jag har ett program som hoppar mellan en loop och lite subrutiner så kan jag inte använda interrupts.

Är det någon som vet vad detta beror på?

Till saken hör nog att jag använder Algorithm Builder 5.26, en AtMega8535. Och att jag är jävligt grön och självlärd vad det gäller microcontrolers...

Tack på förhand!

//John
Användarvisningsbild
björn
EF Sponsor
Inlägg: 2570
Blev medlem: 29 mars 2004, 23:09:55

Inlägg av björn »

Vet inte vad det kan vara och jag har aldrig haft liknadne fel, men om du hade visat koden kasnke det hade funnits en möjlighet att någos skulle se om det var något mysko.

Du har väl inte glömt att dissabla interrupts i interrupten? då kan man få liknande fel.
peter555
Inlägg: 6047
Blev medlem: 12 februari 2006, 10:02:22

Inlägg av peter555 »

Har du initierat stackpointern ?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Inlägg av Swech »

Det kan vara en massa olika saker..... massa massa.....

Stacken? är den ok
Sparar du status i interupten,
Har du en evighetsinterrupt? - vissa interrupt kan man behöva trixa med
för att de inte skall ge interrupt igen direkt..
har du initierat övriga saker ok?
mm.mm

visa koden så kan vi nog hjälpa dig bättre..

Swech
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Låter onekligen som att stackpointern inte är initierad, om det är asm du kodar i måste det göras manuellt någonstans.

Man ska inte utföra tunga beräkningar i en avbrottsrutin om man inte är helt säker på vad man gör, och man ska speciellt inte hoppa runt bland andra subrutiner därifrån, det inbjuder till onödigt många problem. Det första problemet är att koden riskerar att exekvera längre än avbrottsperioden, då har du en låsning. Andra är att du hoppar fel eller har en väntande rutin i någon av subrutinerna, som också kommer bjuda på otrevliga överraskningar så småningom.
John_E
Inlägg: 95
Blev medlem: 16 oktober 2007, 20:02:25
Ort: Bråten

Inlägg av John_E »

Tack för alla svar...

Stacken är ok
Sparar och återställer SREG status
Ingen Evighets interrupt
Nollar interrupts i början, rensar TCNT2 och ettar interrupts i slutet

Det är märkligt eftersom felet endast dyker upp när I=1. Även om jag lägger reti direkt i interrupten så strular det.

Koden är i Algorithm builder. Får väl lägga upp den som bild nån stans.

//John
Skriv svar