Usaremos el pin RB2/CCP1 com salida donde tendremos el pulso de ancho variable.
Se usa un comparador que activa un bit cuando el valor del registro PR2 coincide con la parte alta del TMR2, en ese momento el TMR2 toma el valor 00, luego el bit se pone en cero cuando otro comparador detecta que la parte del TMR2 y el CCPR1H son iguales.
En PR2 se asigna el periodo T = (PR2 + 1)*4*Tosc * Valor predivisor TMR2
En CCPR1L se carga el ancho del pulso, que luego pasa a CCPR1H
Analicemos:
MOVLW B'00001101'
MOVWF CCP1CON ; Modo PWM <3,2,1,0>, bit <5,4> en ceros
MOVLW B'00000100' ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
MOVWF T2CON ; Prescaler 16 <1,0> y activa el TMR2 <2>
Veamos el circuito:
Sencillo!!!
Ahora un video del circuito funcionando:
El codigo fuente:
LIST P=16F886
INCLUDE P16F886.INC
__CONFIG _CONFIG1, _INTOSCIO & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
__CONFIG _CONFIG2, _BOR40V & _WRT_OFF
CBLOCK 0X20
d1, d2
ENDC
ORG 00
GOTO INICIO
RET_100MS ;99998 cycles
movlw 0x1F
movwf d1
movlw 0x4F
movwf d2
Delay_0
decfsz d1, f
goto $+2
decfsz d2, f
goto Delay_0
;2 cycles
goto $+1
RETURN
INICIO NOP
BANKSEL OSCCON
MOVLW B'01101100'
MOVWF OSCCON
BANKSEL TRISA
CLRF TRISB
MOVLW B'00000000' ; Configuro RC2 como sailida
MOVWF PORTC
MOVLW .255
MOVWF PR2 ; Asigno el periodo
BANKSEL PORTB
MOVLW 0XFF
MOVWF PORTB
MOVLW B'00001101'
MOVWF CCP1CON ; Modo PWM <3,2,1,0>, bit <5,4> en ceros
MOVLW B'00000100' ; <1x> Un prescaler de 16 da un periodo apox de 4ms y una frec de 244Hz
; <01> Un prescaler de 4 da un periodo apox de 1ms y una frec de 1KHz
; <00> Un prescaler de 1 da un periodo apox de 250us y una frec de 4KHz
MOVWF T2CON ; Prescaler 16 <1,0> y activa el TMR2 <2>
CLRF CCPR1L ; Duty en cero (0)
NUEVO MOVLW .0
MOVWF CCPR1L
CALL RET_100MS
CICLO NOP
MOVLW .10
ADDWF CCPR1L,F
CALL RET_100MS
MOVLW .250
XORWF CCPR1L,W
BTFSS STATUS,Z
GOTO CICLO
GOTO NUEVO
END
Copyright 2012 edwtron
Este DOCUMENTO es un DOCUMENTO LIBRE, usted puede redistribuirlo y/o modificarlo bajo los terminos de la GNU FDL tal y como es publicada por la fundacion de software libre; bajo la version 1.3 de la licencia, o una version superior.
Leer la licencia GNU gpl para mas detalles.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".
No hay comentarios:
Publicar un comentario