Re: Flera interrupts PIC
Postat: 12 maj 2014, 13:30:39
> Det är väl generellt svårt att få timers att gå så långsamt som 1 sek. Detta med att återladda en timer är också mycket tveksamt, speciellt om det finns fler interrupt än just timern. Om det bara är för att släcka lite LED kan det inte plåga någon men är det för att räkna tid blir det strax mer besvärligt - och inexakt.
Det är väl knappast ett problem att t.ex. köra Timer0 och låta den köra med en prescaler osv. som ger kanske 10-30Hz. Då kan man kolla om lamporna är tända x sek * timer-interrupt-frekvensen. Bra noggrannhet, stabilt och enkelt.
Jo jag har något minne av 1Hz är svårt och att man får köra snabbare och räkna ut hur många interrupts man får på 5sek. Sen att tiden den är tänd är 5.0000s eller 5.9s är inte något större problem. Egentligen skulle jag kunna ha LED tänd hela varvet. Kanske är en fördel egentligen men vill lära mig använda timers då de verkar rätt kluriga att sätta upp med allt vad cpu speed, prescaler osv heter. Inte som i C# direkt att man bara sätter antalet millisekunder, vilken funktion som ska anropas och sen starta den
När det väl är fungerade kanske jag tar bort timer delen eller ändrar så att den gör något annat som tex läsa gyro och accelerometer.
> Du bör stänga av interrupten det första du gör i din interruptfunktion, och starta dem när du är klar, dessutom är det lämpligt att rensa flaggorna det sista du gör, innan du startar interrupten igen.
Om du rensar flaggorna innan du hanterat orsaken till interruptet, kan du få falska triggningar istället.
Okej ska kolla upp det
Det är väl knappast ett problem att t.ex. köra Timer0 och låta den köra med en prescaler osv. som ger kanske 10-30Hz. Då kan man kolla om lamporna är tända x sek * timer-interrupt-frekvensen. Bra noggrannhet, stabilt och enkelt.
Jo jag har något minne av 1Hz är svårt och att man får köra snabbare och räkna ut hur många interrupts man får på 5sek. Sen att tiden den är tänd är 5.0000s eller 5.9s är inte något större problem. Egentligen skulle jag kunna ha LED tänd hela varvet. Kanske är en fördel egentligen men vill lära mig använda timers då de verkar rätt kluriga att sätta upp med allt vad cpu speed, prescaler osv heter. Inte som i C# direkt att man bara sätter antalet millisekunder, vilken funktion som ska anropas och sen starta den

> Du bör stänga av interrupten det första du gör i din interruptfunktion, och starta dem när du är klar, dessutom är det lämpligt att rensa flaggorna det sista du gör, innan du startar interrupten igen.
Om du rensar flaggorna innan du hanterat orsaken till interruptet, kan du få falska triggningar istället.
Okej ska kolla upp det