¿Cómo puedo leer una salida de tres estados con el microcontrolador?

7

Me gustaría conectar la línea STAT de un MCP73831 administrador de carga de iones de litio IC a un microcontrolador para leer el estado de carga actual del mismo.

La hoja de datos explica, en la sección 5.2.1, que la línea STAT es una salida de tres estados y tiene el siguiente estado:

  • Alto
  • bajo
  • Alta impedancia

y se proporciona una tabla que explica cómo cada nivel representa cada estado de carga de la batería.

¿Cómo puedo conectar este pin a la E / S del microcontrolador y leer estos tres estados distintos?

Leer alto y bajo es bastante sencillo, pero detectar una entrada es una impedancia alta que no he hecho antes.

    
pregunta RHaguiuda

4 respuestas

11

Puedes vincularlo a tierra y Vcc con dos resistencias de 10k, y usar una entrada A / D para leer el nivel.

Si no tiene un A / D de repuesto, conéctelo a otro pin de su uC con una resistencia de 10k. Si el pin es alto o bajo, por supuesto leerá como alto resp. bajo (asumiendo que puede conducir una carga de 10k). Si es de alta impedancia, se leerá igual a lo que obtuviste en el otro pin.

    
respondido por el Wouter van Ooijen
8

Muchos microcontroladores le permiten seleccionar entre la resistencia desplegable débil y la resistencia desplegable débil en una entrada GPIO, en el orden de aproximadamente 50k-100k Ohm. Si la entrada es alta-z, una lectura con un desplegable débil habilitado leerá baja y una lectura siguiente con un pullup débil será alta.

Recuerde esperar unos pocos µs entre el interruptor de resistencia y la lectura GPIO para permitir que la tensión en el pin se estabilice.

Tenga en cuenta que los AVR más antiguos y los 8051 pueden tener solo un pullup débil, pero no tienen resistencias de extracción débiles.

    
respondido por el Turbo J
4

Si lees el documento, en la sección 3.3, verás que está destinado para usarse con una resistencia de levantamiento.

De hecho, con cualquier señal de drenaje abierto o de triple estado, no está destinado a leerla cuando está en el modo de triple estado, está diseñado de esa manera para que la señal se pueda compartir entre múltiples dispositivos. Lo que se vuelve confuso es que si está leyendo la señal y está en modo de triple estado (y no lo sabe) puede obtener lecturas falsas. la mejor manera es aplicar un pull up débil para que, si la señal se encuentra en un estado ambiguo, la señal se lea correctamente. Dado que esta señal está destinada a conducir un LED para indicar un estado de carga (es decir, baja es la carga), luego con un pull-up y su lectura es alta, significa que no se está cargando.

    
respondido por el placeholder
0

Si puedo agregar una advertencia a esta publicación. El MCP73831 es un chip de cargador de batería y, por lo tanto, su Vdd es más alto que su Vbat.

Suponiendo que su microcontrolador esté conectado a Vbat y que Vdd se suministre desde USB, entonces Vdd podría ser al menos 1.5V mayor que V ucontroller .

El problema es que, en el 73831 que tiene salidas de tótem, STAT se refiere a Vdd . Así que no conecte STAT directamente a una entrada de uC. Use algo como una resistencia de 10k en el medio. Para un PIC micro, las pinzas de diodo de entrada se sujetarán a su Vcc (verifique la hoja de datos para ver la corriente máxima antes del latchup)

Como un addendum, el año pasado me topé con un truco para leer las entradas hi / low / z que era para un PIC, pero podría (o no) funcionar para usted. Algo como (pseudo código):

STAT ----[10k]------ PIC
PIN starts as input

set PIN low
set PIN to output
set PIN to input
set PIN high
value = read PIN  (assuming 1 for high, 0 for low)
value = value << 1
set PIN to output
set PIN to input
value |= read PIN

Luego obtienes 0 para baja, 1 para Hi-Z y 3 para alta. YMMV.

    
respondido por el carveone

Lea otras preguntas en las etiquetas