¿Por qué btfss fallaría a veces en PIC12f1822

3

Tengo un PIC12f1822 en un circuito simple, ejecutando código muy simple. En un bucle crítico en el código, una instrucción BTFSS lee mal el pin del puerto. Esto sucede aproximadamente el 1% del tiempo.

Para una primera aproximación, el código simplemente copia el estado del pin 4 al pin 2 o 3, dependiendo del estado del pin 5. El PIC se suministra con 5v regulados. Curiosamente, este problema solo parece manifestarse si uso señales de entrada de 0v-5v. Si utilizo entradas de 0v-3.3v, el problema parece desaparecer.

¿Hay alguna propiedad eléctrica extraña de un PIC que pueda hacer que no lea un pin de puerto el 1% del tiempo?

MAIN_LOOP

    btfsc   CS_INPUT            
    goto    MAIN_LOOP

    movlw   B'00010000'
    btfsc   INDF0, 2            ; INDF0 points to PORTA
    movlw   B'00100000'         
    movwf   INDF1               ; INDF1 points to LATA

    movlw   B'00110000'

WAIT_CS_HIGH
    btfss   CS_INPUT            ; This test fails sometimes
    goto    WAIT_CS_HIGH

    movwf   INDF1


    GOTO MAIN_LOOP

    END
    
pregunta Rocketmagnet

2 respuestas

3

La instrucción BTFSS no solo va a fallar al azar. No vas a encontrar lo que está mal con tu circuito o código hasta que dejes de intentar culpar al PIC. Hay algo mal con la configuración de su .

Primero simplificaría el código. Ir a través de los registros INDF para acceder a los puertos agrega otra capa de cosas que van mal. Los comentarios (tan dispersos como son) dicen que se supone que INDF0 apunta a PORTA e INDF1 a LATA, pero no sé eso ni veo ninguna evidencia de que este sea realmente el caso. Tampoco está claro qué se supone que CS_INPUT sea, y por qué es relevante para tu prueba de todos modos.

Si tiene problemas para leer un pin de entrada, escriba un bucle que simplemente lea el pin y lo refleje en otro pin. Eso probablemente funcionará bien. Luego siga expandiendo ese paso a paso hasta que algún paso incremental muestre el síntoma. Ahora tienes una idea mucho mejor de lo que podría estar mal. Y no, no va a fallar la instrucción BTFSS.

Sería bueno mirar el pin Vdd al mismo tiempo que ves las fallas. Tal vez el suministro de 5V no sea tan limpio como crees. Tal vez algo más esté causando fallos ocasionales en el suministro o en las otras líneas.

    
respondido por el Olin Lathrop
0

Aparentemente, esto es causado por algún tipo de falla parcial del chip. Cambié la parte y el problema desapareció.

Resulta que era el hardware después de todo;)

    
respondido por el Rocketmagnet

Lea otras preguntas en las etiquetas