Use pull-ups internos para escanear claves de fila / columna con diodos

1

Estoy escribiendo un software de microcontrolador para leer un teclado mecánico, que tiene diodos para evitar que las teclas interfieran entre sí.

El teclado tiene las teclas configuradas con salidas de fila y entradas de columna que se pueden escanear; Básicamente, el área encuadrada en este esquema, pero con muchas más claves:

simular este circuito : esquema creado usando CircuitLab

Las filas R0 , R1 y las columnas C0 , C1 son pines GPIO en mi microcontrolador, AT90USB1286 (AVR de 8 bits).

Tengo un conocimiento limitado de la electrónica real y no sé cómo usar los diodos de manera efectiva. Creo que podría escanear las claves utilizando el siguiente proceso (ingenuo):

  1. Establezca R0 en salida alta, todos los demás bajos
  2. Lea todos los pines Cn para averiguar qué teclas R0 se presionan
  3. Repita para R1 , R2 , etc.

Para que funcione, entiendo que cada columna debería tener una resistencia desplegable para evitar señales flotantes cuando no se presionan las teclas de columna. Mi microcontrolador tiene pull-ups internos opcionales en cada pin GPIO pero no tiene pull-downs, por lo que necesitaría agregarlos yo mismo. No creo que pueda usar los pull-ups y cambiar la salida de la fila de exploración a baja porque los diodos evitarán que la señal baja llegue a la entrada de la columna.

Sin embargo, me pregunto si podría intercambiar los roles de fila y columna:

  1. Habilitar dominadas internas en todos los Rn
  2. Establezca C0 en salida baja, todas las demás son altas (o hi-z?)
  3. Lea todos los pines Rn para averiguar qué teclas C0 se presionan
  4. Repita desde 2 para C1 , C2 , etc.

Esto significaría que mi esquema usaría R0 y R1 como entradas con pullups habilitados, y C0 / C1 como salidas; cada uno saldría bajo al escanearlo.

Mi principal preocupación es que los diodos de alguna manera evitarán que la baja salida anule los pull-ups, o algo así.

¿Este enfoque funciona? ¿Debo mostrar alto en los pines de la columna que no estoy escaneando, o está bien (o mejor) hacerlos hi-z / entradas?

    
pregunta mrb

1 respuesta

2

Sí, es posible. Si Cn es 0V, el diodo conducirá, y en el punto de conmutación Rm habrá una tensión directa del diodo. asegúrese de que esté por debajo del umbral bajo de Vin de la MCU.

    
respondido por el Lior Bilia

Lea otras preguntas en las etiquetas