TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alejandrojcr en 16 de Noviembre de 2011, 09:47:52
-
hola a todos...tengo un problema con el pwm del 16f877 y no consigo la razon por la cual no funciona bien por favor quisiera que revisaran este programa y me digan que puede ser. cuando sumo algo al registro ccpr1l para variar el ancho del pulso se coloca en 1. lo estoy simuando en proteus. escrib el programa en pic simulator ide
pdel0 equ 0x20
pdel1 equ 0x21
pdel2 equ 0x22
org 0
;-------------------------
bsf 0x03,5 ;entro al banco 1
clrf 0x05 ;como salida puerto a
clrf 0x06 ;como salida puerto b
clrf 0x07 ;como salida puerto c
movlw .255
movwf 0x08 ;como entrada puerto d
clrf 0x09 ;como salida puerto e
movlw .255
movwf 0x92 ;configuracion de periodo del pwm
bcf 0x03,5 ;vuelvo al banco 0
clrf 0x05
clrf 0x07
movlw b'00001100'
movwf 0x17
movwf 0x1d
movlw b'00000100'
movwf 0x12
;-----------------------------
inicio btfss 0x08,0
call suma
btfss 0x08,1
call resta
goto inicio
;----------------------
suma movlw .1
addwf 0x15,1
call pdelay
return
;----------------------
resta movlw .1
subwf 0x15,1
call pdelay
return
;----------------------
PDelay2 movlw .100 ; 1 set number of repetitions (B)
movwf PDel0 ; 1 |
PLoop4 movlw .207 ; 1 set number of repetitions (A)
movwf PDel1 ; 1 |
PLoop5 clrwdt ; 1 clear watchdog
decfsz PDel1, 1 ; 1 + (1) is the time over? (A)
goto PLoop5 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (B)
goto PLoop4 ; 2 no, loop
PDelL1 goto PDelL2 ; 2 cycles delay
PDelL2 clrwdt ; 1 cycle delay
return ; 2+2 Done
;----------------------
PDelay movlw .22 ; 1 set number of repetitions (C)
movwf PDel0 ; 1 |
PLoop0 movlw .134 ; 1 set number of repetitions (B)
movwf PDel1 ; 1 |
PLoop1 movlw .211 ; 1 set number of repetitions (A)
movwf PDel2 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
decfsz PDel2, 1 ; 1 + (1) is the time over? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel1, 1 ; 1 + (1) is the time over? (B)
goto PLoop1 ; 2 no, loop
decfsz PDel0, 1 ; 1 + (1) is the time over? (C)
goto PLoop0 ; 2 no, loop
return ; 2+2 Done
;-----------------------
end
-
Mira los errores que tira MPLAB al compilar:
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 32 : Symbol not previously defined (pdelay)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 37 : Symbol not previously defined (pdelay)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 41 : Symbol not previously defined (PDel0)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 43 : Symbol not previously defined (PDel1)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 45 : Symbol not previously defined (PDel1)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 47 : Symbol not previously defined (PDel0)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 54 : Symbol not previously defined (PDel0)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 56 : Symbol not previously defined (PDel1)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 58 : Symbol not previously defined (PDel2)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 60 : Symbol not previously defined (PDel2)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 62 : Symbol not previously defined (PDel1)
Error[113] C:\USERS\TAPI\DESKTOP\PRUEBAS MPLAB\PWM2.ASM 64 : Symbol not previously defined (PDel0)
Es cuestion de mayusculas y minusculas.
-
hola saludos gracias por responder ya he corregido ese error compilando en mplab y me sigue dando igual cuando comienzo la simulacion muestra la señal con un ancho de pulso pero cuando le doy para que sume uno al registro ccpr1l se va cero algunas veces y otras a 1 que podra ser el pic es el 16f877 que trabaja a 4Mhz
-
Si que te hace eso porque lo tienes tu asi en el programa.
inicio btfss 0x08,0
call suma
btfss 0x08,1
call resta
goto inicio
Va a suma, suma 1 y despues va resta, resta 1 y logicamente se queda en 0 y empieza de nuevo.
El PDelay es de 2.5seg para que es ese retardo?
Echale un ojo a esto, a ver si te aclara algunas dudas:
http://www.todopic.com.ar/foros/index.php?topic=33515.0
-
hola saludos normalmente esas entradas estan en 1 siempre va saltar la de abajo cuando yo llevo algugas de las entradas a 0 es que se ejecuta la instruccion de abajo call a si tengo entendido que funciona lo de PDelay es para evitar que cuando presione el boton una vez no realize muchas sumas ya que ese proceso es muy rapido
-
hola he visto el contenido del link lo que pasa es que con el 16f84a de esa forma no puedo realizar otro proceso mientras hago el pwm o al menos eso creo
-
hola saludos normalmente esas entradas estan en 1 siempre va saltar la de abajo cuando yo llevo algugas de las entradas a 0 es que se ejecuta la instruccion de abajo call a si tengo entendido
Vale tienes pulsadores que se activan por 0, pues yo si pongo a 0 PORTD,0 (deberias llamar alos registros por su nombre, es mas legible y entendible) y PORTD,1 lo dejo a 1, si me incrementa CCPR1, llevo un rato simulando y voy en h0203.
de PDelay es para evitar que cuando presione el boton una vez no realize muchas sumas ya que ese proceso es muy rapido
Entonces esta bien.
hola he visto el contenido del link lo que pasa es que con el 16f84a de esa forma no puedo realizar otro proceso mientras hago el pwm o al menos eso creo
Tal y como esta ahi con bucles de tiempo no es muy aconsejable, tienes razon.
Yo con el modulo CCP nunca lo hice, me parece mas dificil de hacer, posiblemente porque nunca me puse a estudiarlo, pero con un TIMER, cualquiera de ellos puedes hacer todos los PWM que quieras, y atender a todo, puedes usar la interrupcion del TIMER o leer el flag.
Este post se lo pongo a todo el mundo que viene a hacer preguntas sobre assembler, porque despeja la mayoria de las dudas, incluidas las de lo tres TIMERs de la serie 16f.
http://www.todopic.com.ar/foros/index.php?topic=24720.0
Tambien te explica el encabezado que hay que poner para poder llamar a los reg. por su nombre, porque sino es muy dificil comprender los programas. De hecho posiblemente no te han costestado mas compañeros porque al ver como los pones pasan de pelear con el programa.