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å här stod det i manualen. å ja fattar inget. :lol: så om nån ville vara så vänlig å förklara hur man ska göra det?
11.3.3 SET-UP FOR PWM OPERATION
The following steps should be taken when configuring
the CCP module for PWM operation:
1. Set the PWM period by writing to the PR2
register.
2. Set the PWM duty cycle by writing to the
CCPR1L register and CCP1CON<5:4> bits.
3. Make the CCP1 pin an output by clearing the
TRISB<3> bit.
4. Set the TMR2 prescale value and enable Timer2
by writing to T2CON.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Ja Pic som har CCP-modul är naturligtvis enklare att PWMá med, hur man hantererar denna är enklast att läsa ut ur databladet och testa.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> så här stod det i manualen.....

Jahaja, du har en PIC med hardvaru-PWM, det gör det ju lite enklare.

Det du klippte in är ju ganska tydligt steg-för-steg 1-2-3-4 vad man ska göra.

Om du vill ha något förklarat får du nog vara lite tydligare med
vad det är du undrar över.
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

jo det jag inte fattar till att börja med är hur man ska skriva till pr2 registret för det verkade ha något med timer 2 att göra men de fatta jag inte vad dem menade.
så här sto det om timer 2 module
"The Timer2 module has an 8-bit Period Register PR2.
Timer2 increments from 00h until it matches PR2 and
then resets to 00h on the next increment cycle. PR2 is
a readable and writable register. The PR2 register is
initialized to FFh upon RESET." :?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> hur man ska skriva till pr2 registret

Antag att du vill skriva h'40' till PR2 :

banksel pr2
movlw h'40'
movwf pr2

Sen del del som du citerade, tala gärna om *vad* som är oklart i texten,
nu är det väldigt svårt att förstå vad som är problemet. I alla fall för
mig är det ganska tydligt skrivet...

> The Timer2 module has an 8-bit Period Register PR2.

OK, så timer2 har ett periodregister och det heter PR2 och är 8-bitar stort.
Något problem med det ?

> Timer2 increments from 00h until it matches PR2 and
> then resets to 00h on the next increment cycle.

Så timer2 räknar upp från noll och när timer2 är lika med
det man har skrivit till pr2, så nollställs den igen. OK ?

> PR2 is a readable and writable register.

Det går båda att skriva och läsa PR2. Kan ju vara bra.

> The PR2 register is initialized to FFh upon RESET.

Så om man inte själv skriver något annat till PR2 så
räknar Timer2 från h'00' till h'FF' och börjar sedan om igen.

Vilken av dessa punkter är det som är problemet ?
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

nu är de inge problem vad jag vet för du förklarade allt som var oklart där.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

CCP är väldigt lätt att lära sig - om man har osciiloskp att bekräfta sina teorier med iaf ;) Och om inte annat så är det extremt bekvämt. Enda anmärkningen är att det hade varit trevligt om CCP-klockan hade varit PLL-ad så att man kunde fått bättre upplösning vid högre frekvenser, men man kan inte få allt här i världen ;)

Lite OT- har man förbättrat CCP-modulen i 18-serien?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Jag vet inte om det gäller *bara* PIC18, men det finns modeller
med en utökad pwm modul (del av CCP) med sånt som deadband o.s.v.
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Oki, inget behov just nu, men hade en pryl där man fick bitflippa för att få upp upplösningen - lite trist eftersom själva idén med CCP är ställ in och glöm.... Till detta hade allt varit löst om man hade kunnat klocka timern med fyrdubbla frekvensen.

Fundrade det på att göra en spread-spectrum digma-delta istället bitbangad, men kunde inte lista ut (eller orkade inte kanske..) hur f-n man skulle få till det. Misstänker att PIC16 @20MHz nog inte riktigt klarade det. Nåväl, finns gräser för allt här i världen... eller så är man för dålig programmerare ;)
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

"Set the PWM duty cycle by writing to the
CCPR1L register and CCP1CON<5:4> bits."
det är det som jag ska göra nu tror jag...
så här läste jag om det.
"CCP1 Module
Capture/Compare/PWM Register1 (CCPR1) is comprised
of two 8-bit registers: CCPR1L (low byte) and
CCPR1H (high byte). The CCP1CON register controls
the operation of CCP1. All are readable and writable.
Additional information on the CCP module is available
in the PICmicro™ Mid-Range Reference Manual, "
då är min fråga hur ska man skriva då?
för i manuale fattade jag som så att ccpr1l skulle vara samma som tmr1l...
fattar inte hur man ska skriva alls om jag ska vara ärlig.
som det sodjan skrev.
"
banksel pr2
movlw h'40'
movwf pr2 "
vad betyder h'40' där?
är det det som timer2 ska räkna upp till innan den nollställs eller???
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

> är det det som timer2 ska räkna upp till innan den nollställs eller???

YES ! Men det var väl klart sedan tidigare...

Vid h'40 så börjar timer2 om igen från noll.
Det som står i PR2 styr *perioden* på PWM signalen,
eller alltså inversen av frekvensen på PWM signalen.

De andra registren styr sedan hur stor del ("duty cycle") av denna
period som ska vara "hög" resp "låg".

Man sätter alltså PR2 (och prescalers mm) så att man får en "grundfrekvens"
som passar det som ska drivas, t.ex ca 100 Hz för dimning av en LED.

Sedan styr men med de andra registren hur mycket on resp off man vill att
LED'en ska vara.

> hur ska man skriva då?

I databladet framgår *vad* du ska skriva och till *vilket* register.
Vad menar du med *hur* du ska skriva ?? I något speciellt "språk" ??
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

"2. Set the PWM duty cycle by writing to the
CCPR1L register and CCP1CON<5:4> bits.
3. Make the CCP1 pin an output by clearing the
TRISB<3> bit.
4. Set the TMR2 prescale value and enable Timer2
by writing to T2CON."

jag vill veta hur man ska skriva till ccpr1l registret och tmr 1
är det bara att skriva nått typ
blanksel ccpr1l
movlw'10'
movlf tmr1l

och hur ska man göra ccp1 pin till en utgång, alltså hur clerar man TRISB eller vad dem menar.
och vad är tmr2 prescale value?
och sen ska man aktivera timer2 genom att skriva till T2COC. hur ska man skriva till det då?

det är inte lätt när man är nybörjare :D
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Var fick du "MOVLF" från ? Finns inget som heter så.
Håll dig till de instruktioner som faktiskt *finns*, det underlättar...

Generellt sätt skriver du ett fast värde till ett FSR genom att
först ladda det till W med MOVLW och sedan flytta W till registret
med MOVWF.

Detta gäller TRISB eller vilket annat register som helst.

Jag tror inte att det är meningsfullt att fråga så mycket mer innan
du har läst på lite mer (eller läst på mycket mer...).
T.ex genom att studera databladet till den processor du ska använda.
I databladen finnas det många exempel på hur de använder MOVLW/MOVWF
för att sätta/ladda olika register, så det borde inte i sig vara något problem...

Kolla även mina exempelkoder på http://www.jescab.se/PIC16.html
för lite allmänna ider om hur instruktionerna fungerar.

Men, viktigast, RTFM som det brukar heta... :-) :-)
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Inlägg av Kaggen »

basmicke skrev: jag vill veta hur man ska skriva till ccpr1l registret och tmr 1
är det bara att skriva nått typ
blanksel ccpr1l
movlw'10'
movlf tmr1l
Du är på rätt väg. Tror inte du förstått hur alla assembler instruktioner funkar, du borde läsa igenom kapitlet Instruction set summary i databladet för din processor.

Kod: Markera allt

banksel tmr1   ; Välj bank där tmr1 ligger
movlw  d'10'   ; Lägg 10(decimalt) i W-registret
movwf  tmr1   ; Lägg värdet i W-registret i filregistret "tmr1"
När dom skriver "CCP1CON<5:4>" så menar dom att man skall konfigurera bit 5 till 4 i CCP1CON registret. Är det dom enda bitarna man ska pilla på kan man använda bsf och bcf instruktionerna t.ex:

Kod: Markera allt

banksel CCP1CON
bsf  CCP1CON,4   ; Sätt CCP1Y
bcf  CCP1CON,5   ; Nolla CCP1X
...eller som man bör skriva
banksel CCP1CON
bsf  CCP1CON,CCP1Y
bcf  CCP1CON,CCP1X
så behöver man inte kommentera i koden.

> och hur ska man göra ccp1 pin till en utgång, alltså hur clerar man TRISB > eller vad dem menar.
> och vad är tmr2 prescale value?
> och sen ska man aktivera timer2 genom att skriva till T2COC. hur ska man skriva till det då?

> det är inte lätt när man är nybörjare :D

För att cleara en hel byte kan man använda clrf intstruktionen:

Kod: Markera allt

banksel TRISB
clrf  TRISB   ; Sätt alla bitarna i TRISB till 0
Du bör nog få en bättre koll på hur alla intruktioner fungerar innan du ger dig på något mer. Du kan ju simulera i MPLAB och steppa igenom enkla program som sätter bitar i vissa bytes och titta på rersultatet.

Ladda hem manualen för alla instruktioner nedan och läs lite.

http://ww1.microchip.com/downloads/en/D ... 31029a.pdf
basmicke
Inlägg: 63
Blev medlem: 11 juli 2007, 15:25:04
Ort: Munkfors

Inlägg av basmicke »

tackar...
läste Instruction set summary och allt klarnade äntligen.. börjar äntligen fatta vad movlw och movwf och andra kode eller vad man ska kalla dem, gör.
Skriv svar