Vai al contenuto
PLC Forum


Come cambiare il duty cycle sul pic 16f88?


Steven Smith

Messaggi consigliati

Salve a tutti, e ben tornati dalle ferie...

Ho un problema col 16f88, in quanto riesco ad impostare il pwm e va perfettamente, ma non riesco a spegnerlo nè a cambiare il duty cycle...

Sui datasheet della microchip ho letto che il registro CCPR1L è di sola lettura quando il pwm è in funzione e quindi bisogna spgnerlo per cambiare valore, inoltre sui codici esempio dei datasheet usano gli interrupt e non riesco a capire perchè...

Vi posto qui il codice in assembler esempio e se qualcuno vorrà darmi una mano.. Grazie!!!

CLRF CCP1CON ; CCP Module is off

CLRF TMR2 ; Clear Timer2

MOVLW 0x7F ;

MOVWF PR2 ;

MOVLW 0x1F ;

MOVWF CCPR1L ; Duty Cycle is 25% of PWM Period

CLRF INTCON ; Disable interrupts and clear T0IF

BSF STATUS, RP0 ; Bank1

BCF TRISB, PWM1 ; Make pin output

CLRF PIE1 ; Disable peripheral interrupts

BCF STATUS, RP0 ; Bank0

CLRF PIR1 ; Clear peripheral interrupts Flags

MOVLW 0x2C ; PWM mode, 2 LSbs of Duty cycle = 10

MOVWF CCP1CON ;

BSF T2CON, TMR2ON ; Timer2 starts to increment

;

; The CCP1 interrupt is disabled,

; do polling on the TMR2 Interrupt flag bit

;

PWM_Period_Match

BTFSS PIR1, TMR2IF

GOTO PWM_Period_Match

;

; Update this PWM period and the following PWM Duty cycle

;

BCF PIR1, TMR2IF

Link al commento
Condividi su altri siti


Ciao ,

leggendo nel data sheet il registro che diventa di sola lettura é il CCPR1H, ma non si usa per modificare il duty cycle.

devi usare il CCPR1L e il CCP1CON con la seguente regola

PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>) •TOSC • (TMR2 Prescale Value).

in realtá il CCPR1L e i bit 4,5 del registro CCP1CON diventano un reg di 10bit per definire il nuovo duty.

questi 2 li puoi modificare quando vuoi.

usa il ciclo che suggerisce il data sheet per impostare il pwm

9.3.3 SETUP 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<x> bit.

4. Set the TMR2 prescale value and enable Timer2

by writing to T2CON.

5. Configure the CCP1 module for PWM operation.

se hai problemi chiedi pure

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...