Sida 1 av 1
2st PWM i PIC18LF2320...
Postat: 14 oktober 2005, 02:24:42
av JimmyAndersson
Håller på att programmera för att få 2st olika PWM-utgångar på en PIC18LF2320.
Tänkte kolla en sak för säkerhetskull:
CCP1 (PWM-utgång 1) använder CCP1CON. CCP2 (PWM-utgång 2) använder CCP2CON. Så långt är jag med.
(Det känns visserligen lite bakvänt är att TRISC 2 sätter CCP1 och TRISC 1 sätter CCP2, men det får man leva med...)
När det gäller att sätta olika hastigheter (på PWM'n) är jag inte lika säker:
"Perioden" och "Timer2 Prescale" blir samma för både CCP1 och CCP2 eller? För att få olika hastigheter så använder man alltså bara olika DutyCycle (för CCP1 och CCP2) ? Stämmer detta eller är jag ute och cyklar på hal is?
Postat: 14 oktober 2005, 09:36:27
av sodjan
> (Det känns visserligen lite bakvänt är att TRISC 2 sätter CCP 1 och TRISC 1 sätter CCP 2 , men det får man leva med...)
Skriv :
BCF TRISC, CCP1
BCF TRISC, CCP2
så behöver du inte reta dig på det...

CCP1 och CCP2 är definierade i INC filen till rätt pinnar.
> "Perioden" och "Timer2 Prescale" blir samma för både CCP1 och CCP2 eller?
Ja, så står det i tabell 15-2 på sidan 134 i databladet.
> För att få olika hastigheter så använder man alltså bara olika DutyCycle (för CCP1 och CCP2) ?
Jag är inte säker på vad du menar med "hastighet". !?
Som databladet sägar, frekvensen är samma för båda PWM modulerna (styrs via TMR2), men duty-cycle varieras individuellt (via CCPRxL/CCPRxH)..
Postat: 14 oktober 2005, 17:19:42
av vfr
sodjan skrev:> För att få olika hastigheter så använder man alltså bara olika DutyCycle (för CCP1 och CCP2) ?
Jag är inte säker på vad du menar med "hastighet". !?
Tror att han syftar på sin motors hastighet, eller vad det nu är som han styr med PWM:ens utgång. Så ni pratar nog "samma språk", ja.
Postat: 14 oktober 2005, 19:31:17
av sodjan
Det stog inget om några motorer, så Jimmy kan ju ha menat vad som helst...

Postat: 14 oktober 2005, 23:15:04
av vfr
Javisst kan han det! Jordens rotationshastighet t.ex. Men det verkar väl mindre troligt...

Postat: 14 oktober 2005, 23:21:07
av sodjan
Jo, kanske det
Men om vi skall vara lite allvarliga, så är det fullständingt ovidkommande vad som är mer eller mindre troligt, inlägget var otydligt på denna punkt och det bara försvårar att ge ett bra och riktigt svar. Därför min brasklapp om att jag inte visste (och fortfarande inte vet) vad "hastighet" syftade/syftar på...
Postat: 15 oktober 2005, 02:00:29
av JimmyAndersson
>BCF TRISC, CCP1
Assembler?

Men jag förstår hur du menar. Bra idé!
Det var lite otydligt att bara skriva "hastigheten". Det jag menade var helt enkelt förhållandet mellan duty cycle (pulsen) och pausen mellan varje duty cycle. Resultatet av det förhållandet uppfattas ju av t.ex motorn som en hastighet. Ändrar man Duty Cycle eller pausen (som ju är Perioden minus DutyCycle) så ändras ju hastigheten på motorn.
edit: Bäst att tillägga att jag vet att man inte kan ändra själva pausen, den får man "på köpet" när man ställer in DutyCycle och Perioden.
Jag kan ta min test-kod som exempel: Två lysdioder är kopplade till CCP1 respektive CCP2. Två potar kopplade till PIC-kretsen som reglerar hur starkt varje lysdiod ska lysa, (dvs hur "tätt" pulserna ska komma och hur långa de ska vara.)
Då använder alltså de båda CCP-modulerna samma period-längd, men hur lång varje puls (dvs Duty Cycle) ska vara ställs separat för varje CCP-modul.
Oki. Då hade jag alltså förstått databladet.
Jag fick inga fel när jag körde "build", men tyvärr har jag inte haft möjlighet att testa koden eftersom min labbplatta är isärplockad för renovering...
Annars antar jag att koden blir den samma oavsett om jag kopplar in en motor eller apelsin. Resultatet kan däremot variera...
edit: Jag passar på att skicka med en till fråga: Om man vill använda en pin som analog ingång så används ju inte TRIS. Men ändå är det väl en bra idé att sätta den pinnen som ingång med TRIS "just in case" ?
Då får man ju en liten "säkerhet" ifall man kodar fel och försöker skicka ut något på den pinnen som man skickar in en spänning på. Dvs. om man kopplar en utgång från en OP-förstärkare till en "hög" utgång på PIC-kretsen... (PIC-kretsen kanske överlever om man skickar in en signal till en utgång, men det är ju ändå inte så nyttigt.)
...Hoppas du förstår, det är lite knepigt att förklara. Kan lugna eventuella oroliga läsare med att jag aldrig kopplat något fel av den typen, men det skadar inte att koppla och koda "säkert" ändå.
Postat: 16 oktober 2005, 00:42:18
av sodjan
> Resultatet av det förhållandet uppfattas ju av t.ex motorn som en hastighet.
Nja, olika duty cycle uppfattas väll av motorn som olika mängd tillförd elektrisk *effekt*. Detta *kan* sedan ge upphov till olika hastighet, men det beror på mycket annat, t.ex vad motorn är kopplad till.
> Om man vill använda en pin som analog ingång så används ju inte TRIS.
Det står faktiskt i databladet (kap 19.6 på sid 218 i min kopia av DS39599C) att TRIS bitarna för de analoga ingångrna skall vara satta som just ingångar. Om man har TRIS som utgång, så kommer AD omvandlaren bara att "läsa av" nivån på den digitala utgången. Jag har inte provat, men det står så i alla fall...

Postat: 18 oktober 2005, 23:19:46
av JimmyAndersson
Har testat lite PWM-kod för 18LF2320. Först gjorde jag en kod som skulle tona upp LED1 (kopplad till CCP1) sedan tona ner den och tona upp LED2 (kopplad till CCP2) för att sedan tona ner den och börja om.
LED1 tonade aldrig ner till "nästan helt släckt", den tonade bara mellan "nästan full ljusstyrka" och "full ljusstyrka". LED2 tonade precis som det var tänkt.
Så jag gjorde ett test där både LED1 och LED2 fick CCPRxL-värdet %00000010 och borde därför lysa lika svagt. Resultat: LED1 lyser starkt och LED2 så svagt som den ska med det värdet.
Här är testkoden för "lysa-svagt":
Kod: Markera allt
'CONFIG3H (CCP2MX) i config har satts till ON för att CCP2 ska använda Pin12 på kretsen. I databladet står det att CCP2MX ska vara "cleared" när man vill använda Pin12, men kör jag med CCP2MX satt till OFF så används Pin24.....
'FÖR PWM NR 1 och 2
TRISA = $0 ' Utgångar på A
TRISB = $0 ' Utgångar på B
TRISC.2=0 ' CCP1 är output för PWM1
TRISC.1=0 ' CCP2 är output för PWM2
PORTA = $0 ' Rensa utgångarna på A
PORTB = $0 ' Rensa utgångarna på B
PORTC = $0 ' Rensa utgångarna på C
'FÖR PWM NR 1
CCP1CON.7=0 'Reserved
CCP1CON.6=0 'Reserved
CCP1CON.5=0 'Sista biten (bit 7) i Duty Cycle
CCP1CON.4=0 'Näst sista biten (bit 6) i Duty Cycle
CCP1CON.3=1 'Inställd på PWM-mode
CCP1CON.2=1 'Inställd på PWM-mode
CCP1CON.1=1 'CCP1M1 Utgång active low (enligt "Enhanced PWM)
CCP1CON.0=1 'CCP1M0 Utgång active low (enligt "Enhanced PWM)
CCPR1L =%00000010 'Duty cycle
'FÖR PWM NR 2
CCP2CON.7=0 'Reserved
CCP2CON.6=0 'Reserved
CCP2CON.5=0 'Sista biten (bit 7) i Duty Cycle
CCP2CON.4=0 'Näst sista biten (bit 6) i Duty Cycle
CCP2CON.3=1 'Inställd på PWM-mode
CCP2CON.2=1 'Inställd på PWM-mode
CCP2CON.1=1 'CCP1M1 Utgång active low (enligt "Enhanced PWM)
CCP2CON.0=1 'CCP1M0 Utgång active low (enligt "Enhanced PWM)
CCPR2L =%00000010 'Duty cycle
'FÖR PWM NR 1 och 2
PR2 = $1F ' Perioden. (Då ska Timer2 Prescaler vara 1 och Max upplösning blir 7 bitar.)
T2CON.1=0 ' Timer2 Prescaler = 1
T2CON.0=0 ' Timer2 Prescaler = 1
T2CON.2=1 ' Stänger på Timer2
Har jag missat något?
Kretsen fungerar förresten i 40MHz. (Det har varken 18LF1320 eller 18F1320 gjort). Om det beror på själva kretsen eller min renoverade labbplatta vet jag inte ännu. Det får framtida tester utvisa.
Postat: 18 oktober 2005, 23:42:42
av sodjan
Notera att ECCP (med Enhanced PWM) endast finns i 40-pinnars modellen (18F4x20). Se högst upp på ECCP sidan.
Du ska använda kapitlet före som handlar om CCP modulen.
Man för övrigt *ser* det ju OK ut. Man skulle behöva testa på en riktig krets för att se vad som händer. Konstigt...
Postat: 19 oktober 2005, 00:53:45
av JimmyAndersson
Jo jag gick efter CCP-kapitlet, som tur var.
Men där hittade jag inte någon info om hur jag sätter CCP1CON's bit 1 och 0, så just där gick jag efter ECCP-kapitlet. Lite konstigt kanske, men det fungerade.
Du (eller någon annan) råkar inte ha tid/lust/ork att testa, om jag mailar en hex-fil ?
Postat: 19 oktober 2005, 11:42:29
av sodjan
> CCP1CON's bit 1 och 0,
De är markerade med "x", alltså "don't care" när man kör CCP'n i PWM mode.
> Du (eller någon annan) råkar inte ha tid/lust/ork att testa, om jag mailar en hex-fil ?
Skall jag testa så gör jag det med min egen källkod.
Hur som helst, det blir i alla fall inte denna vecka, jag måste jobba lite för de som betalar min lön också...
Postat: 19 oktober 2005, 18:50:12
av JimmyAndersson
Aha, de menar "don't care". Men det står faktiskt "Bit is unknown" i databladet. Men då hänger jag med.
Jo, lön är bra att ha. Förstår knappt att du ändå hinner så mycket som du gör här på forumet...

Postat: 19 oktober 2005, 20:31:04
av sodjan
Jo, det är lite otydligt...
Tja, just nu har jag ett par saker som jag *måste* fixa till ett möte i morgon, har haft 3 veckor på mig... Shit.