PWM-kodning

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

PWM-kodning

Inlägg av JimmyAndersson »

Jag har kört en del nu med MikroBasic och en PIC18LF1320.
Nu tänkte jag börja testa lite PWM på den och kollade i hjälpen för MikroBasic.
Där står det att 'PWM HW Modulen' supportar RC2 och fungerar inte med moduler på andra portar. Sedan ett citat som inte lät kul: "mikroBasic does not support enhanced PWM modules."

I databladet till PIC18LF1320 står det "Enhanced Capture/Compare/PWM (ECCP) module"... Det låter väl som om jag inte kan köra PWM på MikroBasic? :roll:

Ville bara kolla så att jag inte missuppfattat något.
Måste jag byta program för en sån "liten" sak?
Användarvisningsbild
Icecap
Inlägg: 26611
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Du kan förhoppningsvis köra vad som helst med MicroBasic (urk!), det finns bara inte färdiga rutiner som man kan använda, man måste "uppfinna hjulet på egen hand" så att säga.

Jag håller mig långt ifrån BASIC.......
Användarvisningsbild
Greve Hamilton
EF Sponsor
Inlägg: 544
Blev medlem: 4 september 2004, 15:03:35
Ort: GBG

Inlägg av Greve Hamilton »

Det är rätt. MikroBasic har bara färdiga biblioteksrutiner för en hårdvaru-PWM. Vill du använda fler så får du, som Icecap säger, göra en "manuell" PWM. Skall även finnas en mjukvaru-PWM-rutin.

Detta är vad jag tror mig komma ihåg, var ett tag sedan jag satt och pillade med MikroBasic. :)
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Precis som föregående skribenter säger: Det är klart du kan använda CCP-modulen ändå, du måste bara ställa alla aktuella register på egen hand istället för att använda något färdigt skit som ändå bara lurar dig :wink:
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag kollade för ett tag sedan på MikroPascal (vilken i princip är samma sak som MikroBasic och MikroC, bara lite olika syntax på koden :-) ), och den hade då inte support fär PWM modulen i 12F683. Efter lite hackande i de olika device specifika filerna i miljön så lyckades jag lägga till PWM support till den PIC'en. Fungerade helt OK. Dock är detta standard CCP modulen.

Men, som andra har sagt, detta medför ju inte att man inte kan använda ECCP modulen, du får bara sätta upp rellevanta register själv. Inget större problem, du behöver antagligen inte använda de delar som är "Enhanced" som deadband o.s.v i alla fall...

Du behöver inte byta program, bara skriva lite annorlunda.

Greve Hamilton skrev :
> MikroBasic har bara färdiga biblioteksrutiner för en hårdvaru-PWM, Vill du använda fler så får du [...] göra en "manuell" PWM. Skall även finnas en mjukvaru-PWM-rutin.

Jag tror att du har missförstått. Både CCP och ECCP är HW-pwm. SW-pwm var det aldrig frågan om, bara att sätta upp ECCP modulen "för hand" direkt mot rellevanta register. D.v.s om du med "manuell-pwm" menar att köra en programvaru pwm !?

Notera också och att de kommenterar som antyder att detta skulle vara något specifiket problem med just *Basic* ine stämmer. Det är snarast ett problem med "gratis" versioner av utvecklingsverktyg i allmänhet, oavsett om de bygger på något som liknar Basic, Pascal, C eller något annat.

När det gäller MikroBasic/Pascal/C så använer de i princip samma hardvarustöd "i botten", så jag tror inte att dina problem skulle vara annorlunda med något annat Mikro-språk.

Personligen föredrar jag assembler, men det är en annan "issue"... :-)

Om man vill ha full och snabb support för nya (18F1320 är i detta avseende rellativt "ny") PIC modeller, så får lägga ut vad det kostar att få just det (eller köra assembler, MPASM har alltid full support för alla nya PIC modeller).
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Ok, så man får vad man betalar för, helt enkelt.
Det låter bra att det går att fixa.

Sedan finns det som sagt alltid assembler.... :) :)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Just i detta fall (setup av PWM modulen) så är det enklaste att sätta upp registren direkt från Basic'en. Jag utgår från att de åtminstånde har stöd för alla rellevanta register...
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Jo, dessutom kan det vara lärorikt att lära sig använda registren "direkt".

Men: Jag behöver några ledtrådar på vad jag ska leta efter i databladet till PIC-kretsen. Jag vet att att jag behöver PWM-frekvensen, själva ration, start och stopp åtminstone.

Har letat i databladet och hittat inte mindre än 23 sidor som behandlar PWM. Visst, hellre många sidor än ingen alls, men för mig som bara gjort "hårdvaru-PWM" så är det en djungel att hitta rätt register. Jag vet ju inte vad allt heter (ännu).

En till PWM-fråga: PIC18LF1320 har ju bara en PWM, men med upp till fyra outputs. Kan man använda dessa utgångar till att styra två galvanometrar/spolar (fram och tillbaka) oberoende av varandra? Det ser inte ut så när man kollar på diagramen för t.ex "FullBridge" i databladet, men jag kanske har missförstått något.
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Har letat i databladet och hittat inte mindre än 23 sidor som behandlar PWM.

I mitt datablad (DS39605C) är det 12 sidor (sidan 119-130).
Av dessa sidor är ca hälften ointressanta om man bara vill köra en enkel PWM utan deadband, full-bridge, auto-shutdown o.s.v. Kvar blir ett par sidor.
En halv sida (kap 15.5.9 på sidan 129) samfattar i princip det hela...

Och ECCP/CCP modulen *är* hårdvaru-pw. Mjukvaru-pwm är något helt annat där man "själv" har räknade för att hålla reda på on/off tiderna.

Alla 4 utgångara styrs av samma PWM modul, och kan alltså inte användas separat, korrekt. (Vissa större PIC'ar har flera separata PWM moduler.)

Så :
- Kolla sid 119 för uppsättning av frekvens och period.
- Kör "Single output" (sätt upp CCP1CON, sid 115)
- Hoppa över sidorna om half-, full-bride, deadband och autoshutdown.
- Kolla 15.5.9 på sid 129 för en sammanfattning.
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Lysande! Det var precis det jag behövde veta!

edit: Sidanvisningarna stämde inte riktigt med mitt datablad, men det löste sig.

Jo det är sant, det här är ju också en hårdvaru-PWM. Skrev lite slarvigt, menade att jag aldrig *använt* mjukvara i PWM-sammanhang. :)


edit igen: Detta med att sätta upp en PWM var inte lätt. Tänk om det fanns en light-version av datablad med kortare beskrivningar och hänvisningar till sidor i det "stora" databladet för fördjupningar.

Nu sitter jag visserligen med fyra sidor från databladet, men det är ändå svåröverskådligt: Alla små stycken är relaterade till varandra och ändå uppdelade i en ordning som känns helt slumpmässig. Jag menar: Bit 0-3 och 6-7 i CPP1CON-registret är noga dokumenterat på sidan 17. Men för att kunna sätta bit 4 och 5 i samma funktion på samma sida så måste man bläddra till stycke 15.5.2 fyra sidor längre bort. Hur logiskt är det? Microchip kunde väl åtminstone ha bjudit på sidhänvisningar... -Det rör sig ju ändå om en dokumentation på 310 sidor totalt.
Senast redigerad av JimmyAndersson 23 september 2005, 07:34:09, redigerad totalt 1 gång.
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Fortsätter med några frågetecken... :roll:

Det är lika bra att jag skriver det direkt: jag har läst datablad hela natten, så jag har verkligen letat efter informationen jag söker! Men nu vill inte min hjärna vara med längre, så här kommer frågetecknen:

Det står i databladet att Timer2 inte används för att bestämma PWM-frekvensen. Men ändå finns TMR2 (Timer2 register) i formeln för att räkna ut PWM-Perioden som är en del av PWM-frekvensen. Tycker det är lite motsägelsefullt. Så jag vet inte om jag behöver använda Timer2 eller inte....

För att sedan bestämma PWM Duty Cycle så använder man registren CCPR1L samt CCP1CON bit 4 och 5. Men jag har inte hittat något om hur jag sätter dessa. Måste ju finnas någon tabell eller något som berättar hur dessa bitar ser ut och vilka värden de motsvarar. Annars blir det svårt att bestämma värden på dessa.

Just CCP1CON bit 4 och 5 är ett stort frågetecken i sig. De övriga bitarna i CCP1CON är noggrannt beskrivna, men för dessa står det helt enkelt "These bits are two LSbs of the PWM duty cycle. The eight MSbs are found in CCPR1L."
Låter fint, men vad skulle 00, 01, 10 eller 11 göra? Det står faktiskt inte. Som sagt: tabell eller något vore bra.

Men bortsett från dessa frågetecken så har jag lärt mig mycket.
Hoppas jag snart även behärskar PWM-programmering.
Användarvisningsbild
Icecap
Inlägg: 26611
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

LSB betyder "Least Significant Bit" och MSB betyder "Most Significant Bit", tidsperioden bestäms alltså av (binärt):
xxxxxxxxyy där xxxxxxxx är CCPR1L och yy är CCP1CON:4-5, alltså en totalt sett 10-bitars periodangivelse. Vad är problemet?
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Sidanvisningarna stämde inte riktigt med mitt datablad, men det löste sig.

Vilket datablad har du ?? Ja har DS39605B (eller om det var C...)

> et står i databladet att Timer2 inte används för att bestämma PWM-frekvensen.

I mitt datablad står det :

"The PWM period is specifed by writng to the PR2 register", och
"The PWM duty cycke is specifed by writing to the CCPR1L regsiter and to the CCP1CON<5:4> bits.

Klart som korvspad ! :-)

> Just CCP1CON bit 4 och 5 är ett stort frågetecken i sig.

Duty cycle bestämms med 10 bitars noggranhet. 8 bitar från CCPR1L och två bitar från CC1CON.
Användarvisningsbild
JimmyAndersson
Inlägg: 26415
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Mitt datablad är DS39604C. "Sammanfattningen" (15.5.9) finns i mitt datablad på sid 131 och inte 129. PWM "period" och "duty cycle" finns på sid 121 och inte 119. På sidan 115 står ingenting om "Single output" eller CCP1CON, det står på sid 117. osv....


Angående Timer och PWM-frekvens: I mitt datablad står det strax under 15-1: "The Timer2 (See section 13.0 Timer2 Module) is not used in the determination of the PWM frequency."
Strax över finns formeln för uträkning av PWM-frekvensen. Där ser man: "PWM Period = [(PR2)+1] * 4 * Tosc * (TRM2 Prescale value)".
PR2 är ju "Timer2 Period register"..... Klart som korvbröd, snarare.. :) Eller så har jag missförstått något, man är ju bara människa.


Det här med CCP1CON bit 4 och 5 har jag löst. Det var mycket lättare än vad man kunde tro av att läsa databladet. Jag är van att läsa datablad, men när man läser sid 121 och måste hoppa till 117 och vidare till nästa, för att förstå hur allt hänger ihop, ja då ser man ju tillslut inte inte skogen för alla träd, om ni förstår. Ett datablad är väl till för att man ska lära sig funktionerna utan att redan kunna databladet?
Nåja, ni är vana och det är jag väldigt tacksam för! :D

Så här borde det ju bli iallafall:
PWM Duty cycle = (CCPR1L:CCP1CON<5:4)*Tosc*(TMR2 Prescale value).
Låt säga att alla 10 bitar är satta, så blir Duty Cycle=1023*Tosc*(TMR2 Prescale value) ?

NU är det klart som korvspad! :)
(Om jag bortser från det här med Timer2...)
sodjan
EF Sponsor
Inlägg: 43231
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, jag hade rev B med lite annorlundra sidor. Sorry...

Konstigt, i min kopia på rev C databladet står det "Note: The Timer2 postscaler (see Section 13.0 Timer2 Module) is not used in the determination of the PWM frequency." Detta står some en "Note" under 15.5.1 på sidan 119. Alltså att *postscalern* inte används !

Inte så som du skrev. Är det samma text ?

Det finns även ett blockschema där man ser hur PR2, TMR2, CCPR1L och de andra registren hänger ihop.

Notera att de två extra bitarna i duty cycle i CCP1CON bara behövs om man vill ha full 10 bitars upplösning. Om det räcker med 8 bitar (256 nivåer) så kan man bara låta dom vara 00 hela tiden och bara manipulera CCPR1L. För t.ex "dimning" av en LED kan det räcka med 16 eller 32 nivåer.

> Ett datablad är väl till för att man ska lära sig funktionerna utan att redan kunna databladet?

Nja, jag vet inte riktigt. Databladets viktigaste funktion är att korrekt beskriva hur den aktuella processorn fungerar, tort och exakt. Inte för att Microchip alltid lyckas, men endå... :-)

Om man vill ha en lite mer "pratig" beskrivning så är "Midrange Reference Manual" lite bättre. Där finns det längre beskrivningar med fler exempel av de olika modulerna. Jag har ingen länkt just nu, men leta efter "Reference Manuals" hos Microchip.
Skriv svar