Sida 1 av 1
Manuell PWM
Postat: 3 juli 2016, 16:16:20
av Erik M
Gällande PIC12F1572.
Samarbetet mellan TMR2 och PR2 används ofta för att skapa en PWM-cykel.
Dock ej sådär värst direkt på PIC12F1572, den har sina tre egna PWM.
Dessa ser, i nuläget, onödigt krångliga ut att använda.
Så jag tänker mig att göra den PWM jag behöver lite manuellt, typ.
(Det är säkerligen mycket bättre använda de inbyggda PWM, men hoppa över det.)
Om man tittar på hur TMR2 och PR2 så borde det vara så att det dels sätts en flagga när de möts (är lika) och dels när Timer2 flödar över.
Det ser dock inte ut som det, och av vad jag förstår så blir det hela väldigt märkligt.
TMR2 följer Fosc/4 via modifikationer från pre- & postscaler etc etc.
När den räknat sig upp till värdet av PR2 sätts TMR2IF... Eller...?
Åsså detta...
The value of TMR2 is compared to that of the Period register, PR2, on each clock cycle. When the two values match, the comparator generates a match signal as the timer output. This signal also resets the value of TMR2 to 00h on the next cycle and drives the output counter/ postscaler (see Section20.2 “Timer2 Interrupt”).
1) Om TMR2 nollas när den når PR2 - vart tar den andra delen av "duty cycle" vägen?
Utan den delen kan man endast få ut en fyrkantsvåg... Lika långt till vad som nu händer.
2) Var hittar man sagda "timer output"?
3) Vad menas med "drives the output counter/ postscaler"?
Eller rättare sagt... Jag antar att TMR2IF inte sätts förrän pre och post har räknats upp till sina respektive multiplar, eller...?
Jämför man med ex PIC12F683 så finns det dels en specifierad output för när TMR2 = PR2, som även kan kopplas till en "PWM-pinne" (GP2), och dels en specifierad [avbrotts-] flagga för när TMR2 flödar över.
Vad jag frågar?
Hur fångar man (= kan avläsa) när dels TMR2 möter PR2 och dels när TMR2 flödar över?
Alltså när period börjar om och när duty cycle nås.
.
Re: Manuell PWM
Postat: 4 juli 2016, 11:41:40
av Erik M
Ajdå, ingen annan som heller vet?
Nå, det fungerar att använda PIC12F683 oxå.
Re: Manuell PWM
Postat: 4 juli 2016, 12:03:44
av SeniorLemuren
Det finns säkert dom som vet. Problemet kanske ligger mer i att ingen har lust att krångla till livet genom att försöka svara på dina frågor. Det brukar oftast sluta i otidligheter mot de som försöker hjälpa. Det finns ju en viss erfarenhet av att det är så tyvärr.

Re: Manuell PWM
Postat: 4 juli 2016, 12:17:52
av lillahuset
Och jag tjatar vidare: Det står i manualen.

Re: Manuell PWM
Postat: 4 juli 2016, 12:55:21
av sodjan
Jag orkar inte leta, men jag har för mig att det beskrivs ganska
tydligt med diagram hur duty cycle definieras. Det är en kombination
av grundfrekensen (som väl sätts av TMR2) och PR2 (som sätter duty).
Men, om man nu har en modell som har 3 st separata PWM moduler,
så borde det vara mycket enklare att köra dom än att skapa en
PWM i programvaran.
Re: Manuell PWM
Postat: 4 juli 2016, 15:40:54
av Erik M
OK, ingen annan som kan detta.
Problemet är alltså att som det står...
The value of TMR2 is compared to that of the Period register, PR2, on each clock cycle. When the two values match, the comparator generates a match signal as the timer output. This signal also resets the value of TMR2 to 00h on the next cycle and drives the output counter/ postscaler (see Section20.2 “Timer2 Interrupt”).
...så innebär det att TMR2IF inträffar efter samma tidsintervall varje gång.
Dvs när TMR2 når PR2 så blir TMR2 = 00h och TMR2IF = 1.
Om vi nu sätter Fosc/4 till 1us, postscaler till 1:1, prescaler till 1 och PR2 till 64d så kommer TMR2 aldrig att komma till något annat än 64d och varje TMR2IF kommer att inträffa var 64e us. (Med reservation för inhibition.)
Det vill säga Period blir 128us och Duty Cycle är 50%. Och Duty Cycle kommer alltid att vara just precis 50%.
Såtillvida man inte inverterar PR2 vid TMR2IF.
I det fallet får man [enligt ovan] en Period om 256us och en Duty Cycle om 25%.
Och rent allmänt en
ren åttabitars PWM.
Problemet blir att hålla reda på i vilken halva av Duty Cycle man befinner sig i...
...vilket skulle vara vad PWM-funktionen gör åt en.
Re: Manuell PWM
Postat: 4 juli 2016, 15:52:32
av sodjan
Kollade lite snabbt. Var ser du kopplingen mellan TMR2/PR2 och PWM ?
Vi talar väl fortfarande om PIC12F1572, eller hur? I den har PWM
modulen helt egna register skilda från Timer2 (till skillnad från
tidigare modeller med den gamla PWM modulen).
Re: Manuell PWM
Postat: 4 juli 2016, 15:54:26
av lillahuset
Tänk Erik, tänk.
Re: Manuell PWM
Postat: 4 juli 2016, 16:18:09
av Icecap
Erik_M: "OK, ingen annan som kan detta."
Jo, vi är ett antal som "kan det" men det har ju visat sig att det inte löner sig att försöka hjälpa dig - så varför lägga energin på det?
Re: Manuell PWM
Postat: 4 juli 2016, 16:36:21
av sodjan
Lillahuset och Icecap, kan vi vara lite mer konstruktiva? Kanske att
några tidigare trådar från ErikM har kört i diket, men det finns ingen
anledning att ta i så att ni spyr för att putta denna tråd i diket också...
Det verkar just nu bara vara ett missförstånd, d.v.s att PIC12F1572
och (t.ex.) PIC12F683 har helt olika PWM moduler. Man kan inte
använda data om PIC12F683 för att förstå hur PIC12F1572 fungerar.
Re: Manuell PWM
Postat: 4 juli 2016, 16:46:27
av Erik M
Jag pratar om hur TMR2 och PR2 interagerar.
Det har inget, just här, med CCP1 [PIC12F683], eller annan PWMx [PIC12F1572], etc att göra.
Och jag tror inte det spelar någon roll om det gäller PIC12F1572 eller exempelvis PIC12F683. Men säker på hur det förhåller sig, det är jag inte.
Det finns givetvis en eller annan anledning till varför denna väg att lösa detta förefaller mig lämpligast, etc, men det har inte med problemställningen i sig att göra.
Tack Janne, uppskattat.
Det går dock lite utanför att bara gå från ~683 till ~1572.
Visst, det erkänner jag villigt, tröskeln som dök upp kändes jobbigt hög.
Samtidigt är det, av andra skäl, vettigt att bygga en manuell PWM.
Vilket har med växlingar, förändringar och fasta tillstånd att göra...
...vilket jag är helt säker på att säkert vore intressant diskutera.
Men det ämnet blir väldigt stort och komplext och inte lämpligt för webbforum.
Så tillbaka till hur TMR2, PR2 och TMR2IF förhåller sig till varandra...
...utan några andra funktioner inblandade.
Re: Manuell PWM
Postat: 4 juli 2016, 16:53:44
av sodjan
Så vitt jag förstår fungerar TMR2, PR2 och TMR2IF precis så som du beskriver.
Men det har ingenting med PWM att göra...
Vill du köra en PWM helt i programvara så finns det många exempel på det.
Du behöver en bas-klocka och ett par räknare för "period" och "duty". D.v.s
vanliga register som du räknas upp eller ned "som vanligt" i koden. Timer2
kan ju användas för klocka, men det kan vilken timer som helst göra.
Normalt finns det bara anledning att *inte* används PWM modulerna då
de av någon anledning inte räcker till för det man ska göra. Annars så
är det ju oerhört mycket enklare att låta hårdvaran ta hand om det.
Re: Manuell PWM
Postat: 4 juli 2016, 17:15:27
av Icecap
Databladet för PIC12F1572 anger mycket tydligt (sektion 22, fig. 22-1) att det finns en räknare per PWM-funktion.
Man kan kaskadkoppla dom i mjukvaran om man vill eller man kan låta bli.
Man kan välja mellan olika frekvenser som input (fig. 22-3) och det finns en prescaler som man kan använda.
Equation 22-1 anger hur man räknar ut PWM perioden och Equation 22-2 anger hur man räknar ut Duty Cycle.
Hela idéen med hårdvara-PWM är att man fyller i värden och sedan klarar den resten men visst, man kan ha speciella behov som hårdvaran inte klarar och man får därför gå över till mjukvara-PWM.
Det som skiljer mot TMR2/PR2 är att det är andra register och bättre upplösning som gäller, resten är i stort det samma.
Re: Manuell PWM
Postat: 4 juli 2016, 17:31:48
av sodjan
OK, som sagt, hela grejen är att TMR2/PR2 inte används alls i PIC12F1572 (för PWM).
Så citatet i första inlägget från databladet är helt irrelevant för PWM, det gäller för
all vanlig användning av Timer2. Citatet saknas även i databladet för PIC12F683.
Eriks resonemang för övrigt stämmer nog rent generellt, men det har inget med PWM att göra.
Så en del missförstånd och hopblandning av datablad...
Slutligen, om rubriken är "Manuell PWM" så utgår man ju från att diskussionen gäller PWM...
Re: Manuell PWM
Postat: 4 juli 2016, 18:10:42
av Erik M
Manuell PWM Janne, manuell.
Problemet blir som synes och angett hur hålla reda på vilken del av Duty Cycle man håller till i.
Men då vet jag att jag åtminstone har rätt register med i funderingen.
Tack för hjälpen.
Och för att inte trassla till det efterfrågas PWMx i ny tråd.