pic dimmer?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK, inga problem... :-)

Det finns i princip två sätt att "dimma" en LED (eller sänka tillförd effekt
till någon annan "pryl" som är eldriven).

Antingen sätter man en stor effekt-trissa som man "stryper", ungefär som
en vanlig kran på en vattenledning, man skruvar till tills man har ett "lagom"
flöde (t.ex i duschen). Problemet med detta är att trissan (eller kranen) kommer
att få ett stort spänningsfall (tryckminskning i fallet med kranen) och detta
ger en stor effektutveckling i trissan. Kom ihog att effekten är lika med
strömmen gånger spänningen, eller hur ?

OK, om vi nu tänker oss att vi istället för att köra trissan på "halvfart" (då
den blir varm) alltid har den antingen helt av (ingen ström) eller helt på
(i princip ingen spänning över *trissan*). Då skulle vi i stort sätt inte få
någon effektförlust i *trissan* och den skulle inte bli (lika) varm.
Om vi nu gör detta med tillräckligt hög hastighet så kommer inte ögat
ett hinna uppfatta blinkningarna, utan se det hela som att ljusstyrkan
bara sänks.

PWM, puls width modulation, betyder alltså att vi har en *fast* grundfrekvens
(t.ex ca 100 Hz för att inte se att en LED blinkar) och sedan varierar vi
on/off förhållandet. T.ex 10 ms on och 0 ms off för full ljusstyrka, eller
5 ms on och 5 ms off för halv ljusstyrka o.s.v. Summan av on/off tiderna
är alltid 10 ms för att alltid ha 100 Hz frekvens.

I en PIC (oavsett om man kör PWM med hårdvaru-PWM modulen eller (som
vi har diskuterat här) med programvaru-PWM) så har man något som
bestämmer grundfrekvensen och sedan något som bestämmer den ena
(t.ex on) tiden. Den andra tiden är ju alltid lika med "resten", så att säga.

Det du frågar om PR2, TMR2 o.s.v handlar om *HÅRDVARU* PWM. Många
PIC har det, men normalt bara *en* (eller ibland två) PWM-kanal. D.v.s.
att den är OK att använda om man bara har en kanal (LED, lampa) som
man vill dimma.

I allt det som har diskuterats tidigare i tråden så har det hela tiden
förutsatts att du ville ha *flera* oberoende PWM-kanaler, och då måste
man lösa det med hjälp av programvara, CCP modulen räcker inte till...

Om man däremot bara har en LED som ska dimmas så är det mycket
enklare att köra med CCP modulen (i PWM-mode) eftersom den sköter
sig själv efter att registren har konfigurerats.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Ok vad är det som sty on och off tiderna?
Och vad styr frekvensen?
Sorry om jag är jobbig men är inte helt hundra på det här än.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

I allt det som har diskuterats tidigare i tråden så har det hela tiden
förutsatts att du ville ha *flera* oberoende PWM-kanaler, och då måste
man lösa det med hjälp av programvara, CCP modulen räcker inte till...

Ok och hur ska man göra det?
Eller har nån något bra exempel på hur man kan lösa det?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Ok vad är det som sty on och off tiderna?
> Och vad styr frekvensen?

Du ! (Genom koden du skriver...)
Tillsammans med de krav du har på lösningen.

> Ok och hur ska man göra det?
> Eller har nån något bra exempel på hur man kan lösa det?

Nu får du väl för fasen ge dig !

*Allt* du behöver veta finns tidigare i denna tråd.
Finns ju ingen anledning att ta om allt en gång till
om det inte "gick in" första gången. Antingen har du
inte läst ett smack av tidigare inlägg, eller så saknar
du helt enkelt nödvändiga grundkunskaper för att
hålla på med detta överhuvudtaget. Väldigt tidigt
i tråden var det flera som föreslog att du skulle börja
med något enklare, och det verkar fortfarande stämma...

Det bästa är att du faktiskt sätter igång. Har du skrivit
en enda rad kod hittills ??
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Har skrivit detta hittills:

Kod: Markera allt

		processor	16f627
		include		 <p16f627.inc>
		__config	 _HS_OSC & _WDT_OFF & _PWRTE_ON
;vaiabler
		pr2				equ 0x92
		CCPR1			equ	0x15
		tmr1			equ 0x10
		tmr2			equ 0x11
		t2con			equ 0x12
;PWM
		banksel 		pr2 
		movlw 			d'100' 
		movwf 			pr2

		banksel 		CCPR1 
		movlw 			d'100' 
		movwf 			CCPR1; 

		banksel 		tmr1 ; Välj bank där tmr1 ligger 
		movlw 			d'100' ; Lägg 100(decimalt) i W-registret 
		movwf 			tmr1 ; Lägg värdet i W-registret i filregistret "tmr1" 

		banksel 		CCP1CON 
		bsf 			CCP1CON,4 ; Sätt CCP1Y 
		bcf 			CCP1CON,5 ; Nolla CCP1X 

		banksel 		TRISB 
		clrf 			TRISB ; Sätt alla bitarna i TRISB till 0 

		banksel 		tmr2; 
		movlw 			d'100' 
		movwf 			tmr2; 

		banksel 		t2con; 
		movlw 			d'100' 
		movwf 			t2con;

nop
end
Ska ju inte ha med nop i den slutliga koden men har med den i simualtorn, och när jag kommer längre fram i projektet komme det väll att inehålla en goto instruktion.
Läste detta i databladet:
The PWM period is specified by writing to the
PR2register. The PWM period can be calculated using
the following formula:
PWM period = [(PR2) + 1] • 4 • TOSC •
(TMR2 prescale value)
PWM frequency is defined as 1 / [PWM period].
Och då kan man ju räkna ut villka värden man ska ha för att få 100MHz i frekvens eller?
Men jag finner inte vad TOSC är?
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

100MHz ? Visst skrev du fel där? Man kan inte få något att gå fortare än själva PIC-kretsen.

edit: Aha, det ska nog stå 100Hz, att döma av tidigare inlägg i tråden. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> pr2 equ 0x92
> CCPR1 equ 0x15
> tmr1 equ 0x10
> tmr2 equ 0x11
> t2con equ 0x12

Plocka bort allt det där !
Titta i p16f627.inc så förstår du varför...

Hur har du kommit fram till d'100' för allt ?
Var sätter du resten av CCP1CON, speciellt bit 3 till 0 ?

Om du bara vill "få igång" PWM model så kan du avsluta allt med "loop goto loop", eller något liknande.

Tosc är tiden för en "cycle" för huvudoscillatorn.
Vilken hastighet kör du med ?

Var kommer Timer1 in i bilden ? Vad gör den ?
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Jaha ja tack för att du skrev det blev ju lite lättare då.

>Hur har du kommit fram till d'100' för allt ?
Ska jag vara riktig ärlig så har jag ingen aning har inte kommit till den lektione som inehåller decimaler och all det där, men du får gärna hjälpa mig, men jag kan läsa mig dit och prova igen.

Var sätter du resten av CCP1CON, speciellt bit 3 till 0 ?
>"bit 3-0 CCP1M3:CCP1M0: CCPx Mode Select bits
11xx = PWM mode" står det i databladet. Hur menar dem att man ska sätta dem då?
när xx är Unkown?
Har fattat att det har något med bsf funktionen eller?
Men är inte hundra på hur man ska skriva till den funktionen för att sätta bit 0-3 till 11xx.

>TMR1 Ska jag kolla upp varför den är med, tror det var någon som skrev tidigare i tråden om den.

>vet fortfarande inte villken hastighet jag kör med, fattade inte oscillator delen i databladet, men jag tror att jag har en CRYSTAL OSCILLATOR men är inte säker, hur får man reda på det?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> 11xx = PWM mode" står det i databladet. Hur menar dem att man ska sätta dem då? när xx är Unkown?

"unknown" är igentligen inget bra uttryck här, "don't care" vore bättre.
Om bit 3-2 är "11", så spelar det ingen roll hur 1-0 är satta. Strunta i dom...

> Men är inte hundra på hur man ska skriva till den funktionen för att sätta bit 0-3 till 11xx.

bsf CCP1CON, 4
bsf CCP1CON, 3

> men jag tror att jag har en CRYSTAL OSCILLATOR men är inte säker, hur får man reda på det?

1. Tittar direket på hårdvaran, vad står det på kristallen (om det finns någon) ?
2. Läser dokumnentationen för din hårdvara (inte databladet för PIC'en !).
3. (Ska inte behövas) skriver att LED-blink program och mäter farten med en klocka.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

>Tittar direket på hårdvaran, vad står det på kristallen (om det finns någon) ?

Där står det CALTRON 4.000MHz
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> Där står det CALTRON 4.000MHz

Ha ! Då är det "mysteriet" löst... :-)
Något mer du vill ha hjälp med ?
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

Japp, hur ska man skriva TOCS då?
Alltså villket värde ska den ha när man räknar ut frekvensen?
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

Om du har en kristall på 4MHz så står M:et i MHz för Miljoner. Vilket betyder att den arbetar med 4 000 000 ( 4 miljoner) svängningar/perioder per sekund. Om du räknar ut hur lång en period är med ovanstående uppgifter, så har du värdet på TOSC.


/Mats
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Eller med andra ord, Tosc = 1 / Fosc, och Fosc är alltså 4 Mhz.

Notera också att Tcyc = Tosc x 4.
Tcyc används ibland om det är lämpligare från sammanhanget.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

"The input clock (FOSC/4) has a prescale option of 1:1,
1:4 or 1:16, selected by control bits
T2CKPS1:T2CKPS0 (T2CON<1:0>)."
Så står det i databladet, och när man ska räkna ut frekvensen så ska man ju multiplicera med TMR2 prescale value.
Och lite längre ner står det ju "bit 1-0 T2CKPS1:T2CKPS0: Timer2 Clock Prescale Select bits
00 = 1:1 Prescaler Value"
Så om jag vill ha ett 1:1 förhållande ska jag då cleara bit 1 och 0?
Genom:

Kod: Markera allt

Banksel T2CON
bcf  T2CON,1
bcf  T2CON,0
Skriv svar