Autor Tema: Pwm ayuda no se que pasa  (Leído 2091 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado alejandrojcr

  • PIC10
  • *
  • Mensajes: 14
Pwm ayuda no se que pasa
« 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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pwm ayuda no se que pasa
« Respuesta #1 en: 17 de Noviembre de 2011, 07:45:22 »
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.


Desconectado alejandrojcr

  • PIC10
  • *
  • Mensajes: 14
Re: Pwm ayuda no se que pasa
« Respuesta #2 en: 17 de Noviembre de 2011, 09:11:55 »
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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pwm ayuda no se que pasa
« Respuesta #3 en: 17 de Noviembre de 2011, 09:32:41 »
Si que te hace eso porque lo tienes tu asi en el programa.

Código: [Seleccionar]
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


Desconectado alejandrojcr

  • PIC10
  • *
  • Mensajes: 14
Re: Pwm ayuda no se que pasa
« Respuesta #4 en: 17 de Noviembre de 2011, 09:45:24 »
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

Desconectado alejandrojcr

  • PIC10
  • *
  • Mensajes: 14
Re: Pwm ayuda no se que pasa
« Respuesta #5 en: 17 de Noviembre de 2011, 09:50:40 »
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

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Pwm ayuda no se que pasa
« Respuesta #6 en: 17 de Noviembre de 2011, 12:40:07 »
Citar
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.

Citar
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.

Citar
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.




 

anything