Sida 2 av 2
Postat: 17 december 2008, 18:21:01
av Tottish
Just så är det ja! Jag kollade efter interrupt-möjlighet när Timer2 nollställs (den som används för PWM-modulens periodtid) men som jag förstog det så gick det inte att få interrupt eftersom Timern nollställs vid ett visst värde. Inte "rullar över".
Det känns ju onekligen väldigt fulmeck med en pinne knuten direkt till en annan men jag hittade som sagt ingen annan möjlighet, rätta mig gärna om jag har letat för dåligt så ändrar jag det.
Jag sänder över UARTen i 19200 baud så jag tror inte det är några problem med tidsbrist där. Oavsett hur det må vara med den saken så är den signalen endast för debug och ska inte finnas i den färdiga koden. Ingen UART ut alls där.
MVH
/Tottish
Postat: 17 december 2008, 19:52:22
av sodjan
> jag sänder över UARTen i 19200 baud
Eftersom andra delar är interruptstyrda och lite tidskritiska,
så kanske du ska låte TXIF ge ett riktigt interrupt istället för att
polla den. I rutinen som du visade så lägger du bara undan tecknet
som ska sändas och sätter en flagga att det "finns ett tecken att sända".
Sedan får ISR'en för TXIF kolla om flaggan är satt och skicka på
det väntande tecknet.
Sen så har jag för mig att när jag gjorde en PWM pryl med en PIC18
så fick man (eller kunde få) ett interrupt när TMR2 nollades. Eller
så löste jag det på något annat sätt, det är 4-5 år sedan...
Postat: 17 december 2008, 22:42:45
av Tottish
Jo, det skulle vara ett sätt att lösa det på. Nu är den snutten borttagen eftersom jag för närvarande bara behöver en byte för resterande debug.
Kanske finns det en funktion för PWM-interrupt på PIC18, ska komma ihåg att kolla upp det om jag konverterar projektet till PIC18 (inte omöjligt) men nu rullar den fint på en 16F886. Har faktiskt inte riktigt provat på PIC18 än men det är väl så dags... Funderar på om man skulle våga sig på lite C-kod också... hmm..hmmm.
God natt!
/Tottish
Postat: 18 december 2008, 00:23:29
av bearing
"Interrupt on TMR2 match with PR2"
Det var detta interruptet jag tänkte på.
7.0 TIMER2 MODULE
The Timer2 module is an eight-bit timer with the
following features:
8-bit timer register (TMR2)
8-bit period register (PR2)
Interrupt on TMR2 match with PR2
Software programmable prescaler (1:1, 1:4, 1:16)
Software programmable postscaler (1:1 to 1:16)
See Figure 7-1 for a block diagram of Timer2.
Postat: 18 december 2008, 00:31:04
av sodjan
Jag förstår inte varför du har utelämnat info om var du hittade det där...
Postat: 18 december 2008, 00:41:55
av bearing
Texten kom rakt ur databladet för den aktuella kretsen. Jag förmodar att alla PIC:ar med hårdvaru-PWM har denna interruptmöjlighet.
Menar du att jag borde skrivit källan just för att källor bör anges? eller som ett pekfinger åt Tottish?
Det syns på hur texten är skriven och formaterad var den kom ifrån, tänkte jag.
Postat: 18 december 2008, 00:50:46
av sodjan
> Menar du att jag borde skrivit källan just för att källor bör anges?
Ja. Eftersom det har diskuterats flera olika modeller i tråden
så hade det ju varit bra och tydligt om det hade framgått vilken
ditt utdrag handlade om. Det hade varit enkelt att lägga till att
"I databladet för 16Fxxx, står det :"
> eller som ett pekfinger åt Tottish?
Det menade jag *absolut inte* !
Jag kan absolut inte se hur det skulle kunna uppfattas som ett "pekfinger",
även om det nu ser ut som om Tottish faktiskt hade missat just det där.
Själv var jag lite osäker eftersom det var en PIC18 som jag hade jobbat med,
så i så fall hade det varit lika mycket pekfinger åt mig, men jag hade tvärtom
uppskattat att citatet hade en referens.
> Det syns på hur texten är skriven och formaterad var den kom ifrån, tänkte jag.
Det är ganska uppenbart att det kommer från ett PIC-datablad, men det är också allt.
Postat: 18 december 2008, 09:43:43
av Tottish
Se där ja. Jag letade mest i CCP-delen i databladet och såg inte att något nämndes där. Jag ska skriva om koden senare idag. Tack för vägvisningen!
EDIT: Hur kunde jag missat det där? Måste ha läst om Timer1 när jag letade interrupt för Timer2 verkar ju inte ens kunna generera interrupt "on overflow" utan alltid i relation till PR2. Går ju iofs att sätta till FF/0 men ändå...
MVH
/Tottish
Postat: 18 december 2008, 13:23:23
av Tottish
Hmmm, vad har jag missat nu då?
Jag sätter in de här raderna som de första i main-loopen men den tar sig aldrig förbi dem (DebugLED2 tänds aldrig) trots att PWMen går för fullt.
Kod: Markera allt
main
banksel PIR1
btfss PIR1, TMR2IF
goto main
call DebugLED2on
Har provat både med och utan interrupt enabled för TMR2 även om det väl inte ska ha någon betydlese?
MVH
/Tottish
Postat: 18 december 2008, 13:28:13
av sodjan
Du får välja, antingen har du interrupt "på".
Eller så pollar du IF flaggan. Att blanda blir bara problem.
Om du har interrupt på så är det inte säkert att du någonsin
ser IF flaggan "satt" i den där koden, så snart den sätts så får
du ju ett interrupt och där clearas den igen innan du kommer tillbaka.
Om du har interrupt på så är det enklare att göra "call DebugLED2on"
inne från interrupt koden.
Postat: 18 december 2008, 13:53:34
av Tottish
Jo visst, men varför funkar det inte när jag har interrupt avslaget?
Jag började med att ha interrupt på i hela koden och bytte i princip ut den här interruptflaggan mot den jag använde tidigare (INT-pinnen) och det funkade inte så det första steget i debuggningen var att kolla om flaggan över huvud taget blir satt.
Men vi gör så här för att undanröja alla sådana tvivel:
Kod: Markera allt
bcf INTCON, GIE
main
banksel PIR1
btfss PIR1, TMR2IF
goto main
banksel PORTA
bsf PORTA, 0
goto main
Varför funkar inte detta om PWMen rullar?
MVH
/Tottish
Postat: 18 december 2008, 14:08:36
av sodjan
Vet inte, skulle behöva en komplett kod som kan köras genom MPSIM.
Men det kan ju även du göra...

Postat: 18 december 2008, 14:50:30
av Tottish
Ja, det är väl inte mer än rätt.
Jag hade klantat mig och råkat lämna ett "vänta på interrupt" i initieringen så programmet kom aldrig fram till mainloopen.
Vidare så hade jag klantat mig och skrivit PIR istället för PIE i initieringen av interrupten då jag tidigare försökte konvertera hela koden på en gång. När man gjorde som man skulle så fungerade det naturligtvis utmärkt... som vanligt alltså! Hehe....
Ja, nu flyter koden fin-fint utan externt ful-meck i alla fall.
Vad har du för bakgrund med PICar egentligen sodjan? Har ju fått hjälp med diverse PIC-relaterade problem av dig miljoner gånger nu men jag har aldrig riktigt förstått vad du har för bakgrund på den här fronten. Aldrig sett dig presentera några egna projekt eller så. Nu när du skrev att du gjort någon PWM-grej med PIC18 för 4-5 år sedan böjade jag fundera.
Du verkar onekligen kunna de här små fantastiska kretsarna, eller är det mer generell programmerings-erfarenhet som gör att du har näsa för att påvisa fel i koder?
Eller är det kanske så att kraften sitter i skägget?
MVH
/Tottish
EDIT: Haha, skrev PIR istället för PIE i min beskrivning av felskrivningen... Rättat nu.
Postat: 18 december 2008, 15:05:32
av sodjan
> Vad har du för bakgrund med PICar egentligen sodjan?
Ren hobby (+ försäljning av lite rellaterade prylar genom firman).
Höll på lite med andra mikrokontrollers på 70-talet, men blev
intresserad igen för några år sedan. Elektor råkade ha en PIC-pyl,
så då det blev det det...
> Aldrig sett dig presentera några egna projekt eller så.
Finns inga (avslutade i alla fall).
> Nu när du skrev att du gjort någon PWM-grej med PIC18 för 4-5 år sedan böjade jag fundera.
Höll på med en IR-styrd flerkanals dimmer, nerlagt nu.
> Du verkar onekligen kunna de här små fantastiska kretsarna,
Tja, jag kan bara vad som är dokumenterat, d.v.s jag har tillgång
till samma information som alla andra.
> eller är det mer generell programmerings-erfarenhet som gör att du har näsa för att påvisa fel i koder?
Sanolikt ja. Har "programmerat" i över 30 år nu. Jag har dessutom alltid
haft väldigt lätt för att "läsa" datablad och manualer och omsätta det i praktik...