Obteniendo múltiples entradas en Atmega32

0

Tengo que tomar las entradas de 10 botones pulsadores en mi circuito con el microcontrolador Atmega32. ¿Cómo puedo tomar varias entradas de botón pulsador utilizando 1 Pin de E / S en el microcontrolador? Me encontré con el CD4017 IC pero es un decodificador y solo se puede imprimir.

    
pregunta shikhar bansal

2 respuestas

2

Red de resistencia y ADC

Como se indica en la respuesta de Jay Carlson, puedes usar resistencias y un pin ADC. El circuito para hacer eso es el .

Lasresistenciasdebensermásprecisascuantomásbitstenga.Laprecisiónrequeridaseduplicaconcadabitadicional:para8bits,laprecisiónrequeridaserámejorque1/256(0.4%).Haycircuitosintegrados( como este ) disponibles que proporcionan dichos niveles de precisión, pero la mayoría solo son lo suficientemente precisos para 8 bits.

Además, para 10 bits, la precisión de su ADC integrado podría no ser suficiente. Incluso cuando genera 10 o 12 bits de salida digital, la precisión real puede ser menor, así que lea su hoja de datos detenidamente. También tendrá que usar el mismo voltaje de referencia sin interrumpir (exactamente dentro de los límites establecidos) tanto para DAC como para ADC, lo que puede ser una tarea difícil por sí sola.

Además, necesita botones de baja impedancia en la red de resistencias (botones que se conectan a tierra o referencia analógica). Los botones de solo tierra con pullups no serán suficientes. Si los usa, necesitará circuitos adicionales.

CI de expansión IO

Hay circuitos integrados disponible que proporciona toda la funcionalidad que desea (y muchas más, como las funciones de entrada y salida, pullups seleccionables) pero requiere una conexión de bus bidireccional a su microcontrolador, principalmente I²C o SPI.

  • I²C necesita dos cables, pero cualquier número de dispositivos se puede conectar a un solo bus. Si ya tiene un bus I²C, esta solución no le costará un solo cable adicional.

  • SPI cuesta tres cables por bus más uno por dispositivo conectado.

  • 1 cable necesita un cable por bus para cualquier número de dispositivos, pero no encontré ningún expansor de E / S que lo use. Sin embargo, esto no significa que no existan.

Si ya usas uno de estos buses, I²C y SPI cumplen con tu restricción de "como máximo un pin".

Microcontrolador adicional y UART

Si no tiene un bus y está limitado a un solo cable, puede usar un microcontrolador adicional que realiza el IO y envía los datos a través de una interfaz UART. Esto requiere un pin, es fácil de implementar y muy flexible. No está limitado a IO digital: puede incluir datos analógicos o incluso preprocesados, como la temperatura. Incluso dispositivos tan complejos como los receptores GPS utilizan esta interfaz simple: emiten latitud / longitud / altitud en texto ASCII legible por humanos, una muestra por línea.

Si desea incluir la salida o configurar el microcontrolador, debe agregar otro pin para UART bidireccional o usar una de las interfaces de bus descritas anteriormente. Si no existe un expansor de E / S de 1 cable y decide utilizar un microcontrolador conectado a través de 1 cable, esto básicamente se convierte en: haré mi propio expansor de E / S.

Comparación / Conclusión

Red de resistencias

  • Simple para un número bajo de botones pulsadores.
  • La precisión requerida crece rápidamente con el número de entradas.
  • Requiere botones de doble polo, no versiones de encendido / apagado.
  • Requiere un pin ADC.

IO-expansor

  • Fuera de la plataforma, casi no requiere componentes discretos. Incluso se incluyen las resistencias pullup para los botones.
  • Requiere una interfaz de bus, preferiblemente hardware I²C, SPI o pines de 1 cable.
  • No se requieren pines adicionales si un autobús ya está en uso para otros fines.
  • Se puede implementar mediante el uso de bitbanging en los pines GPIO, al costo de menos ancho de banda y más tiempo de desarrollador.

Microcontrolador

  • Las mismas ventajas que IO-expansor.
  • Más flexible.
  • Posible preprocesamiento.
  • Es posible un UART unidireccional (muy fácil de implementar).
  • Se requiere más tiempo de desarrollador.
  • Un paso más de producción (flasheando un controlador adicional).
respondido por el Rainer P.
0

Esto se hace comúnmente con un solo pin ADC y resistencias. Puede hacerlo con un registro de desplazamiento (o dos), pero la versión de ADC es más elegante y de menor costo (aunque solo marginalmente). No voy a entrar en detalles de diseño, ya que esta pregunta huele como un problema de tarea, pero esto debería hacerte pensar. Es fácil trabajar mentalmente pensando un poco, y hay muchas formas "correctas" de implementarlo.

    
respondido por el Jay Carlson

Lea otras preguntas en las etiquetas