pic dimmer?
1 byte = 256
2 byte = 256*256
osv.
Detta är möjliga kombinationer du kan få.
Lite kuriosa är också att blanda in hexadecimala tal som är mycket trevliga när man arbetar med binära tal detta eftersom fyra BITS precis motsvar en siffra. Alltså motsvarar En byte precis två hexadecimala tal.
OnT igen: att kunna binära tal är en absolut nödvändighet. Använd kalkylatorn om du är osäker.
2 byte = 256*256
osv.
Detta är möjliga kombinationer du kan få.
Lite kuriosa är också att blanda in hexadecimala tal som är mycket trevliga när man arbetar med binära tal detta eftersom fyra BITS precis motsvar en siffra. Alltså motsvarar En byte precis två hexadecimala tal.
OnT igen: att kunna binära tal är en absolut nödvändighet. Använd kalkylatorn om du är osäker.
> och när man ska räkna ut frekvensen så ska man ju multiplicera med TMR2 prescale value.
Mja, lite slarvigt uttryckt kanske...
Det står (från ditt eget inlägg) :
"The PWM period can be calculated using
the following formula:
PWM period = [(PR2) + 1] 4 TOSC
(TMR2 prescale value) "
Det du får då är alltså *perioden*. Sedan kan du räkna ut frekvensen.
Men det kanske var så du menade.
Men, nu blir jag lite osäker på vad du igentligen försöker göra !?
Skulle du inte driva *3* st PWM-kanaler för att dimma LED's ??
Varför kollar du då på PWM-modulen (som bara har *EN* kanal) ?
Redde vi inte ut det för ganska många inlägg sedan !?
Sen, om jag räknar rätt så är den lägsta PWM frekvensen vid
4 Mhz ca 244 Hz:
4.000.000 / (4x16x256) = ca 244.
> Så om mina beräkningar stämmer nu så ska pr2 vara 9900
Oavsett om dina beräkningar stämmer eller inte, så är PR2 ett 8-bitars register...
> TMR2 prescal 1:1
Varför det ? Om du vill ha en låg frekvens så är det bättre att
börja med en "hög" prescale.
Men, som sagt, frågar är varför du alls tittar på PWM-modulen !?
Mja, lite slarvigt uttryckt kanske...
Det står (från ditt eget inlägg) :
"The PWM period can be calculated using
the following formula:
PWM period = [(PR2) + 1] 4 TOSC
(TMR2 prescale value) "
Det du får då är alltså *perioden*. Sedan kan du räkna ut frekvensen.
Men det kanske var så du menade.
Men, nu blir jag lite osäker på vad du igentligen försöker göra !?
Skulle du inte driva *3* st PWM-kanaler för att dimma LED's ??
Varför kollar du då på PWM-modulen (som bara har *EN* kanal) ?
Redde vi inte ut det för ganska många inlägg sedan !?
Sen, om jag räknar rätt så är den lägsta PWM frekvensen vid
4 Mhz ca 244 Hz:
4.000.000 / (4x16x256) = ca 244.
> Så om mina beräkningar stämmer nu så ska pr2 vara 9900
Oavsett om dina beräkningar stämmer eller inte, så är PR2 ett 8-bitars register...
> TMR2 prescal 1:1
Varför det ? Om du vill ha en låg frekvens så är det bättre att
börja med en "hög" prescale.
Men, som sagt, frågar är varför du alls tittar på PWM-modulen !?
>Varför det ? Om du vill ha en låg frekvens så är det bättre att
börja med en "hög" prescale
Så då ska man skriva:
banksel T2CON
BSF T2CON,1
BSF T2CON,2
Eller?
börja med en "hög" prescale
Så då ska man skriva:
banksel T2CON
BSF T2CON,1
BSF T2CON,2
Eller?
Står de i manualen.bit 1-0 T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
00 = 1:1 Prescaler Value
01 = 1:4 Prescaler Value
1x = 1:16 Prescaler Value
Eller som det BÖR heta för att undvika en massa trubbel:
banksel T2CON
bsf T2CON,T2CKPS1
bcf T2CON,T2CKPS0 ; Egentligt överflödig
T2CKPS0 kan man låta vara som den är, den har ingen betydelse när den andra bitten är '1'.
På detta vis kommer en migrering till en annan PIC att skapa minst problemer, använd NAMN till de definierade bits, det blir oerhört mer enkelt att se om man har gjort rätt och andra kan läsa utan att slå i datablad konstant.
banksel T2CON
bsf T2CON,T2CKPS1
bcf T2CON,T2CKPS0 ; Egentligt överflödig
T2CKPS0 kan man låta vara som den är, den har ingen betydelse när den andra bitten är '1'.
På detta vis kommer en migrering till en annan PIC att skapa minst problemer, använd NAMN till de definierade bits, det blir oerhört mer enkelt att se om man har gjort rätt och andra kan läsa utan att slå i datablad konstant.
Visst, om du bara behöver *en* PWM kanal, så är det OK.
Men du kan inte "dimma" fler än en LED på det viset (om
de inte ska dimmas likadant...)
Du får väl bestämma dig och sedan *TALA OM* vad du vill göra.
Du kan inte först i tråden säga att du har *tre* LEDs di vill dimma,
sedan (utan att tala om det) ändra dig...
Men du kan inte "dimma" fler än en LED på det viset (om
de inte ska dimmas likadant...)
Du får väl bestämma dig och sedan *TALA OM* vad du vill göra.
Du kan inte först i tråden säga att du har *tre* LEDs di vill dimma,
sedan (utan att tala om det) ändra dig...
Hallå!
Är tillbaks nu, projektet har varit stillastående ett tag nu, vet inte riktigt varför men jag har haft en hel del annat för mig. Men nu så tänkte jag äntligen fortsätta:D Så nu kommer jag säkert vara på er igen med en massa "dumma" frågor om det är okej. Så jag tänkte väll börja med att klagöra projektet, det är alltså:
En Pic med dimmerfunktion som ska dimmra 6 olika grupper med led lampor.
Dimmringen ska ske så att grupp1 dimmrar in och sedan börjar dimmra ut sammtidigt som grupp2 dimmrar in osv.
Så då var det klargjort, så jag ska alltså skapa en PWM "motor".
Menar du att det ska vara olika komponenter eller är det Pic'en som ska sköta det?
Är tillbaks nu, projektet har varit stillastående ett tag nu, vet inte riktigt varför men jag har haft en hel del annat för mig. Men nu så tänkte jag äntligen fortsätta:D Så nu kommer jag säkert vara på er igen med en massa "dumma" frågor om det är okej. Så jag tänkte väll börja med att klagöra projektet, det är alltså:
En Pic med dimmerfunktion som ska dimmra 6 olika grupper med led lampor.
Dimmringen ska ske så att grupp1 dimmrar in och sedan börjar dimmra ut sammtidigt som grupp2 dimmrar in osv.
Så då var det klargjort, så jag ska alltså skapa en PWM "motor".
Menar du att det ska vara olika komponenter eller är det Pic'en som ska sköta det?
Det vore ju kul å fatta hur den fungerar å hur man ska "koda" för att få den att fungera men det kanske inte behövs till det här projektet, men det kanske blir aktuellt i ett senare projekt.Ja, om du inte är i intresserad av andra orsaker.
Med "PWM-motor" menas (i detta fall) en bit mjukvara som har hand om själva PWM-funktionen för 6 st utgånger.
Med lys är det så att kan du hålla en "blink"frekvens på 60Hz eller högre ser ögat inte blinkandet. Kan du hålla 70Hz eller mer är det bra.
Alltså kan du göra som så att du definiera hur många nivåer du behöver dimma i, jag skulle tro att mellan 50 och 100 är alldeles lagom, vi håller oss till 50 bara för att ha ett utgångspunkt.
Detta betyder att 0 är helt släckt och 49 är fullt på.
Om vi då starter en timer-interrupt till att ta hand om PWM-grejset behöver denna att komma med (50 steg * 70Hz) 3500Hz.
I timer interrupten ska det sedan avgöras om varje LED ska vara på eller av, ett av många sätt kan vara att räkna:
Då ställer du intensiteten i LEDx_Timer, 0 = av, 50 = fullt på, du har sedan 6 st av dessa variabler som bestämmer för varje LED självklart. Dessa kan du sedan styra i main-loopen helt som du vill och behöver du en timer till att ge fast intervall kan du sätta en flagga i Timer_ISR t.ex. vid varje omladdning av 'Counter'
Med lys är det så att kan du hålla en "blink"frekvens på 60Hz eller högre ser ögat inte blinkandet. Kan du hålla 70Hz eller mer är det bra.
Alltså kan du göra som så att du definiera hur många nivåer du behöver dimma i, jag skulle tro att mellan 50 och 100 är alldeles lagom, vi håller oss till 50 bara för att ha ett utgångspunkt.
Detta betyder att 0 är helt släckt och 49 är fullt på.
Om vi då starter en timer-interrupt till att ta hand om PWM-grejset behöver denna att komma med (50 steg * 70Hz) 3500Hz.
I timer interrupten ska det sedan avgöras om varje LED ska vara på eller av, ett av många sätt kan vara att räkna:
Kod: Markera allt
(pseudokod)
Timer_ISR:
Nolla interrupt-flagga
if(Counter) Counter--; // Om Counter > 0 räkna ner den 1
else Counter = 49; // Annars ladda om räknaren
if(LED0_Timer > Counter) LED0 = true;
else LED0 = false;
if(LED1_Timer > Counter) LED1 = true;
else LED1 = false;
if(LED2_Timer > Counter) LED2 = true;
else LED2 = false;
if(LED3_Timer > Counter) LED3 = true;
else LED3 = false;
if(LED4_Timer > Counter) LED4 = true;
else LED4 = false;
if(LED5_Timer > Counter) LED5 = true;
else LED5 = false;