pic dimmer?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Så om jag ska kunna få en pwm frekvens på 100Hz, så måste pr2 värdet vara väldig högt eller är det jag som räknar fel?
Här är ett expempel på hur jag räknar
pr2=200
TMR2 prescal 1:1
TOCS 1:1

200+1*4*0,0000002*1=0.0001608
1/0.0001608=621.89054
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Var får du 0,0000002 ifrån?

200+1*4*0,0000002*1 = 200.0000008
Du kan inte bara ta bort paranteserna.

1/0.0001608 = 6218.9055
Du slarvar mycket!


Så här bör det se ut:
(200+1)*4*0.00000025*1 = 0.000201
1/0.000201 ≈ 4975 Hz

Eller som jag brukar räkna:
1000000/201 ≈ 4975 Hz
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Så om mina beräkningar stämmer nu så ska pr2 vara 9900 för då blir det
(9900+1)*4*0.00000025=0.009901
1/0.009901=100.999899 alltså ca 101Hz Närmare orkar jag inte räkna
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Men jag blir lite fundersam när jag läste det här:
Since a byte can have 256 different values, the individual
bytes can represent the one’s place, the 256’s place, the 65536’s place, etc.
Men det skulle kanske gå och få ett så stort tal men jag fattade inte hur.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

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.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 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 !?
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

>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?
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
Står de i manualen.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Så man ska inte använda pw modulen alls... Hänger inte med riktigt. Tänkte ju att det kanske skulle vara enklare att lära sig ställa in pwm modulen först innan man börjar med ngt annat eller?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

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...
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Ok jag har 6 Led som jag vill dimmra ok, men jag försöker förstå hur det hela fungerar och det är inte det lättaste, men jag ska ha en dimmer som dimmrar ner 6 st i olika följder hur har jag redan förklarat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, glöm då PWM modulen.
Ja, om du inte är i intresserad av andra orsaker.
Du får bygga en 6-kanalers PWM "motor" som sköter om
det hela. Inga problem alls. Du har i princip fått alla ledtrådar
du behöver.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

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?
Ja, om du inte är i intresserad av andra orsaker.
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.
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

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:

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;
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'
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Om vi då starter en timer-interrupt till att ta hand om PWM-grejset behöver denna att komma med (50 steg * 70Hz) 3500Hz.
Ok så man ska starta en timer modul då eller?
Hur ska man då få 3500Hz?

Börjar hänga med på resonemanget men det är fortfarande lite rörigt för mig.
Skriv svar