Sida 1 av 1

Fyrkantsvåg med Picbasic

Postat: 20 mars 2007, 10:54:51
av xl15
Jag skulle behöva en justerbar fyrkantsvåg från en 16F628. Tittade på exemplet nedan, men den ger på tok för hög frekvens. Jag har ändrat PR2 = xx men kommer inte lägre än 3-4 kHz. Annars är det perfekt att ha en fyrkantsvåg liggande i bakgrunden eftersom den ska gå hela tiden men ändras pga andra händelser. Jag skulle behöva kunna justera frekvensen mellan kanske 100 och 1000 Hz.
Några idéer?

PicBasic Pro Code:

' Setting up hardware PWM for 38KHz operation.


DEFINE LOADER_USED 1'Setup for boot-loader programming

TRISC.2 = 0 ' CCP1 (PortC.2 = Output)
PR2 = 25 ' Set PWM Period for approximately 38KHz
CCPR1L = 13 ' Set PWM Duty-Cycle to 50%
CCP1CON = %00001100 ' Select PWM Mode
T2CON = %00000100 ' Timer2 = ON + 1:1 prescale
TRISB.0 = 0

ADDRESS VAR BYTE
DAT VAR BYTE
ID VAR BYTE
ADDRESS = 10
ID = 25

BEGIN:
FOR DAT = 0 TO 255
SEROUT PORTB.0,4,[ID,ADDRESS,DAT]
PAUSE 100
NEXT
GOTO BEGIN

Postat: 20 mars 2007, 12:20:25
av H.O
Hej,
(Mitt första inlägg här....be gentle...)

Om du kör med 4MHz klocka så är lägsta möjliga frekvensen du kan uppnå ~244Hz, om du kör med 20Mhz så är det ~1221Hz.

Om du kör med 4Mhz och sätter prescalern till 1:4 samt PR2 till 249 så skall du få 1000Hz, sätt DutyCycle till 500 för 50% puls/pause.

250Hz: Prescaler 1:16, PR2: 249, DutyReg: 500 = 50%
300Hz: Prescaler 1:16, PR2: 207, DutyReg: 416 = 50%
500Hz: Prescaler 1:16, PR2: 124, DutyReg: 250 = 50%
700Hz: Prescaler 1:16, PR2: 88, DutyReg: 178 = 50%
800Hz: Prescaler 1:16, PR2: 77, DutyReg: 156 = 50%

/Henrik Olsson.

Postat: 20 mars 2007, 12:50:04
av sodjan
Du kan få precis hur låg frakvens som helst, men kanske inte med
just CCP/PWM modulen. Den har sitt område där den fungerar bra.

Låga frekvenser är enklast att fixa med ett timer-avbrott och lite
kod som "togglar" en pinne. Sedan är det bara att lägga till en räknare
och räkna avbrott om du vill ha riktigt låga frekvensen. I princip kommer
även denna lösning att bli "liggande i bakgrunden"...

Postat: 20 mars 2007, 13:45:23
av xl15
Jag testade med: high, paus 1ms, low, paus 1ms osv. Blev för dålig upplösning om jag ökade till 2ms. Men jag fick tips att använda us istället. Ska prova det och även prova med att ändra prescalern.
Tack för svaren sålänge.