Resulta que quiero hacer un pulsador que cada vez que le demos aumente el duty de la señal PWM un 25%, hasta que llegue al 100%, entonces la proxima vez que se pulse el boton baje al 0% y se inicie el ciclo, pero tengo el problema que cada vez que pulso para aumentar un 25% el duty me baja la tension de la señal pwm progresivamente hasta llegar a -5V cuando lo esperado es que se mantuviera la señal PWM entre 0 y 5V.
Me he mirado el datasheet de arriba a abajo y no logro entender que pasa.
Aqui os dejo el código en ensamblador y la simulación en Proteus con el osciloscopio listo. Las subrutinas vienen también dentro del archivo.
http://www.mediafire.com/?0q7k2v70x2b07x1 Gracias por vuestra atencion
;********************************************************************
;Daniel Pérez Medinilla
;Proyecto 2
;********************************************************************
ERRORLEVEL -302 ;Supresión del mensaje (302)
list p=16f876, f=INHX8M, r=hex
include "p16f876.inc"
include "macros.inc"
Per equ .250 ;periodo pwm
contaduty equ 30
duty0 equ 31
duty1 equ 32
duty2 equ 33
duty3 equ 34
duty4 equ 35
org 0
org 5
inicio
movlw 0x00
movwf duty0
movlw 0x3E
movwf duty1
movlw 0x7C
movwf duty2
movlw 0xBA
movwf duty3
movlw 0xF9
movwf duty4
clrf PORTA ;Borra salidas de puertos.
clrf PORTB ; "
clrf PORTC ; "
Banco1 ;Selecciona banco 1.
movlw b'00000110' ;Puerto A como digital.
movwf ADCON1 ; "
movlw b'11111111'
movwf TRISA ;Puerto A como entrada
clrf TRISB ;Puerto B como salida.
movlw b'11111011' ;Línea RC2 como salida.
movwf TRISC ; "
inicio2
movlw 0x31
movwf FSR
Banco0
movlw .5
movwf contaduty
inicio3
Banco1
movlw Per-1 ;Carga el registro de período.
movwf PR2 ; "
Banco0 ;Selecciona banco 0.
movf INDF,W
movwf CCPR1L ; "
movlw b'00111100' ;Programa TMR1 en modo PWM.
movwf CCP1CON ; "
movlw b'00000110' ;Arranca TMR2.
movwf T2CON ; "
Bucle:
clrwdt
btfss PORTA,5
goto Bucle
call R1S
incf FSR,f
decf contaduty,f
movf contaduty,w
btfss STATUS,Z
goto inicio3
goto inicio2
include "retardos.inc" ;Incluye subrutinas de retardos.
end