Autor Tema: Comportamiento anómalo de PIC16F73  (Leído 2871 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado despojo

  • PIC10
  • *
  • Mensajes: 2
Comportamiento anómalo de PIC16F73
« en: 07 de Marzo de 2019, 14:13:44 »
Hola a todos,

Tengo que reparar una placa que utiliza un PIC16F73 para comunicarse vía puerto serie con el ordenador, ya que ha dejado de emitir respuesta alguna. Mi primera comprobación para asegurarme de que el PIC seguía operativo fue intentar hacer "parpadear" una de las salidas del PIC. Cargo el programa y observo que la salida marca un valor positivo pero no parpadea. Descarté el código de delay (que no era más que varias cuentas atrás encadenadas) y le paso el siguiente código: 

Código: [Seleccionar]

              list   p=16f73, c=80, n=0, r=dec   
              include       <p16f73.inc>


__IDLOCS 0D0h

__CONFIG   _CP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

bank0_var udata_shr 0x20

d1 res 1


;      vector reset
;      ****************

                org        0
resvec
                goto       start

                org         4
        goto       interrupt

interrupt
nop
retfie

start   
bcf STATUS,RP1
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP1
bcf STATUS,RP0

loop movlw 0x55
movwf PORTB
nop
movlw 0xAA
movwf PORTB
nop
goto loop

end

Conecto la salida al osciloscopio y veo que hace el parpadeo bien, a la frecuencia adecuada (tardando 1us por instrucción), así que vuelvo a añadir un código de delay más simple para probar (incluyo únicamente los cambios del código) :

Código: [Seleccionar]
delay
movlw     3
movwf     d1
delay_loop
nop
decfsz     d1,f
goto             delay_loop
return

loop movlw     0x55
movwf     PORTB
call               delay
movlw     0xAA
movwf     PORTB
call               delay
goto             loop


Si cargo este código la salida vuelve a quedar estática. El código es muy simple, pero aún así probé con el simulador y en efecto hace su función. Si suprimo el "goto delay_loop" la salida vuelve a parpadear adecuadamente. ¿Es posible que un PIC en mal estado tenga un comportamiento similar? ¿Qué puede estar provocando que el programa se congele?

Muchas gracias
« Última modificación: 07 de Marzo de 2019, 14:21:54 por despojo »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comportamiento anómalo de PIC16F73
« Respuesta #1 en: 07 de Marzo de 2019, 16:39:01 »
El codigo esta incompleto, podrias poner el codigo completo del segundo caso ?


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Comportamiento anómalo de PIC16F73
« Respuesta #2 en: 07 de Marzo de 2019, 17:22:08 »
Me temo que estás colocando la subrutina del delay en el lugar incorrecto.
Pero sería bueno que pusieras todo el código para corroborar mi suposición (tal como lo sugiere KILLERJC).

elreypic.

Desconectado despojo

  • PIC10
  • *
  • Mensajes: 2
Re:Comportamiento anómalo de PIC16F73
« Respuesta #3 en: 08 de Marzo de 2019, 05:12:13 »
Gracias por responder, adjunto el segundo código completo:

Código: [Seleccionar]

              list   p=16f73, c=80, n=0, r=dec
              include       <p16f73.inc>

__CONFIG   _CP_OFF & _BODEN_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC

bank0_var udata_shr 0x20


d1 res 1



                org    0
resvec
                goto   start

            org    4
goto interrupt


delay
movlw     3
movwf     d1
delay_loop
nop
decfsz     d1,f
goto     delay_loop
return


interrupt
nop
retfie

start   
bcf STATUS,RP1
bsf STATUS,RP0
clrf TRISB
bcf STATUS,RP1
bcf STATUS,RP0

loop movlw 0x55
movwf PORTB
call delay
movlw 0xAA
movwf PORTB
call delay
goto loop

end


Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Comportamiento anómalo de PIC16F73
« Respuesta #4 en: 08 de Marzo de 2019, 21:37:16 »
Que tal despojo,

En realidad lo que está sucediendo es que la señal de salida si cambia, pero muy rápidamente. El delay que estás generando es muy pequeño, solamente de 17 ciclos. Suponiendo que estás usando un cristal de 4MHz (no mencionas el valor de cristal usado), entonces estás generando un delay de solo 17 microsegundos. Por lógica, si quieres ver un destello de led, nunca lo verás, solo verás que se queda encendido el led.
Solución: Necesitas generar un delay más grande para que se pueda ver el destello del led.

elreypic.


 

anything