Sida 2 av 2

Re: Flera interrupts PIC

Postat: 12 maj 2014, 13:30:39
av Lullen
> 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

Re: Flera interrupts PIC

Postat: 12 maj 2014, 14:15:49
av sodjan
Lite svårt att se vad som är gammal text och vad som är ditt inlägg.
Se gärna till att det finns ">" ordentligt på inklippta rader...

> ...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.

Timers är helt centralt, det går nästan inte att göra något vettigt
med en processor utan timers. Det är också en av de enklare
enheterna i processorn... :-)

> Du bör stänga av interrupten det första du gör i din interruptfunktion, och starta dem när du är klar,

Alltså, det är kan bara vara helt fel. Det hanteras helt av processorn själv.
Och det borde vara oavsett om man skriver i C eller något annat.

I och med att man får ett interrupt så stängs interrupt av i hårdvaran,
det är inget man gör i koden. På samma sätt så sätts interrupt på igen
i samband med att man lämnar ISR'en. D.v.s den globala interrupt
flaggan GIE, eller menar du något annat, TomasL?

> ...dessutom är det lämpligt att rensa flaggorna det sista du gör, innan du startar interrupten igen.

Ja, xxxIF flaggorna *måste* man cleara manuellt i koden, om man gör det i början
eller i slutet av ISR'en beror lite på hur/om man vill hantera interrupt som uppträder
under tiden som ISR'en körs, alltså från samma källa.

> Om du rensar flaggorna innan du hanterat orsaken till interruptet, kan du få falska triggningar istället.

Hur då? Om flaggan skulle sättas igen så finns det normalt en anledning till det.

Sen är det en annan sak att man har nog större problem med applikationsarkitekturen
om man inte hinner köra ISR'en innan nästa interrupt kommer. Men i vissa speciella
fall kan det ändå vara en del av lösningen. Sällsynt dock...

Jag kan säga att det normalt inte spelar någon roll var man clearar xxxIF flaggorna,
bara man gör det innan ISR'en avslutas!

Re: Flera interrupts PIC

Postat: 12 maj 2014, 14:23:03
av TomasL
Alltså, det är kan bara vara helt fel. Det hanteras helt av processorn själv.
Och det borde vara oavsett om man skriver i C eller något annat.

I och med att man får ett interrupt så stängs interrupt av i hårdvaran,
det är inget man gör i koden. På samma sätt så sätts interrupt på igen
i samband med att man lämnar ISR'en. D.v.s den globala interrupt
flaggan GIE, eller menar du något annat, TomasL?
Sodjan, det beror helt och hållet på vilken processor man använder, och för att vara någorlunda kompatibel och portabel, samt för att inte missa det, så bör man göra det manuellt.

Re: Flera interrupts PIC

Postat: 12 maj 2014, 14:42:45
av sodjan
Nej, det är ingen bra idé. Processorn (de flesta arkitekturer, sannolikt)
sköter det i hårdvaran. Det skulle ju vara väldigt underligt om inte
interrupt är disablade direkt efter att ett interrupt har inträffat!
Det skulle bara loopa hej vilt det hela. Eller också har man något
krav på att interrupt ska disables i koden inom X instruktioner
eller något liknande. Nej, det är inte speciellt praktiskt.

Om vi även blandar in stora processorer med vektoriserade interrupt,
många olika prioritetsnivåer o.s.v så blir bilder mer komplex, men
det är knappast aktuellt här.

Så, ge fasen i att disabla/enabla interrupt själv i koden!

Re: Flera interrupts PIC

Postat: 12 maj 2014, 14:51:43
av TomasL
Tja PIC32 är ju inte speciellt komplicerad, men den har vektoriserade int med olika prioritetsnivåer.

Re: Flera interrupts PIC

Postat: 12 maj 2014, 15:01:46
av sodjan
:-)

Skit samma, jag försöker hjälpa Lullen med *hans* frågor och problem.
Vill du ha en generell diskussion om olika arkitekturer, stora som små,
så får det kanske bli en separat tråd. Det jag har sagt här gäller
för den miljö som är aktuell i denna tråd. Och *här* så är det du
föreslog helt fel. Det blir ju knappast enklare för Lullen om han ska
behöva ta sig igenom en drös med desinformation också.