PIC16F57 - problema al implementar la señal de activación al pulsar la tecla

0

He diseñado un simple control remoto RC5 usando un PIC16F57 y el clásico de filas-columnas escanea en un teclado de matriz 4x4.

La versión anterior de mi firmware escaneaba continuamente el teclado para encontrar una pulsación de tecla, pero el consumo de baterías era alto (obviamente).

Ahora estoy tratando de implementar un sistema de despertador en el que el micro duerme todo el tiempo y se despierta solo cuando el usuario presiona una tecla en la matriz. El problema es que el 16F57 solo puede activarse en 1) nivel lógico bajo en MCLR o 2) tiempo de espera de perro guardián. Esto último podría ser factible, pero implicaría sondear el teclado cada, digamos, 100 ms. La primera solución es la mejor, pero no pude hacerla funcionar.

La solución se abordó aquí: enlace
Es un documento oficial de Microchip por lo que debería funcionar. Sin embargo implementé el circuito y no funciona. El micro se apaga, pero no se despierta (todas las líneas de exploración tienen un nivel lógico bajo antes de irse a la suspensión, por lo que deben descargar el condensador).

La solución propuesta usa una resistencia de 47K para levantar el pin MCLR, pero en la hoja de datos oficial del 16F57 recomiendan una resistencia de < 40K para el uso correcto. Intenté usar un 47K y la imagen no comenzó, así que, pensando en un error tipográfico, utilicé un 4.7K que resultó bien para comenzar la imagen (aunque no resolvió el problema de activación).

El voltaje a través del capacitor debería caer casi a cero para activar el pin MCLR y provocar un despertar, pero parece que la línea de exploración, incluso en un cero lógico, no puede descargar el capacitor.

¿Tienes alguna pista de cómo resolver el problema? gracias!

P.S. el condensador en el esquema no tiene el signo "+", así que asumo que quieren un condensador no electrolítico.

    

1 respuesta

3

El circuito de ejemplo se da como esto:

El factor importante aquí es el voltaje que ve el \ $ \ overline {MCLR} \ $ pin, y cuándo.

En funcionamiento normal, el voltaje debe ser lo suficientemente alto como para registrarse como una lógica ALTA. Cuando desee restablecer o reactivar, el voltaje debe ser lo suficientemente bajo como para registrarse como una lógica BAJA.

Con SW1 abierto, el voltaje en el punto \ $ A \ $, asumiendo que \ $ V_ {CC} = 5V \ $, sería (una vez que el condensador \ $ C \ $ esté cargado) 5V. Eso es independientemente del valor de las resistencias. ¿Tal vez 47KΩ hace que fluya muy poca corriente para cargar el condensador lo suficientemente rápido? Es poco probable, pero posible. Intente reducir el valor del capacitor (o intente retirarlo por completo, no es un componente que sea crítico para el funcionamiento del chip, solo el sistema de activación).

Al cerrar SW1 con RB2 bajo, las resistencias R1, R2 y R7 forman un divisor de voltaje. El voltaje en el punto \ $ A \ $ sería \ $ V_A = \ frac {R2 + R7} {R1 + R2 + R7} × V_ {CC} = \ frac {4800} {51800} × 5 = 0.463V \ $ .

Eso debería ser lo suficientemente bajo como para registrarse como una lógica baja. En la hoja de datos, una lógica baja para \ $ \ overline {MCLR} \ $ se define como \ $ V_ {IL} = 0.15 × V_ {CC} \ $, por lo que para un suministro de 5V sería 0.75V.

Sin embargo, reducir R1 a 4.7KΩ cambiaría enormemente ese voltaje:

\ $ V_A = \ frac {R2 + R7} {R1 + R2 + R7} × V_ {CC} = \ frac {4800} {9500} × 5 = 2.526V \ $

Eso es demasiado alto para registrarse como una lógica BAJA, por lo que nunca se producirá un reinicio.

Por lo tanto, debe asegurarse de que la proporción entre R1 y R2 + R7 (y, por supuesto, R1 y R3 + R8) sea correcta. Si reduce R1, también debe reducir R2 y R3 en consecuencia.

Tal vez ir a R1 = 10KΩ y R2 / R3 = 1KΩ podría volver a alinearlo con la hoja de datos.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas