¿Cómo puedo usar un microcontrolador para incrementar/disminuir 4 juegos de LED usando 8 entradas de botón?

Quiero diseñar un proyecto muy pequeño para un anotador portátil. Consiste en usar un microcontrolador para controlar 4 conjuntos/grupos de LED en una pequeña placa de circuito impreso. Es un proyecto de muy pequeña escala (3.5in X 1.5in). 2 de los 4 conjuntos constarán de 4 LED cada uno y los otros 2 constarán de 7 LED cada uno. Un total de 22 LED, pero solo necesitaré 4 LED encendidos a la vez. Me gustaría usar botones pulsadores para incrementar y disminuir la puntuación que encenderá un LED. Los LED estarán etiquetados por puntos de puntuación. El conjunto más pequeño será la puntuación del juego, mientras que el conjunto más grande será la puntuación establecida.

Me preguntaba si esto era posible y cómo lo haría. ¿Hay un microcontrolador lo suficientemente pequeño como para poder tener 8 entradas de botón pulsador para manipular 4 conjuntos/grupos separados de múltiples LEDS?

Estoy planeando usar baterías simples de celda de moneda de 3V por ahora, pero buscaré pequeñas fuentes de alimentación recargables. Hice un prototipo de interruptor DIP muy simple utilizando LED de montaje en superficie muy pequeños en una placa de circuito impreso delgada con una batería de celda de moneda. El interruptor DIP era voluminoso y ocupaba mucho espacio. Quisiera adelgazarlo y hacerlo más elegante con menos interruptores implementando estas ideas si es posible.

Cualquier palabra de consejo y ayuda será apreciada. Muchas gracias :D

Respuestas (2)

Oli dio una buena respuesta, pero espera, ¡la mía será mejor! :-)

Oli comentó sobre la corriente limitada de la celda de moneda, y eso es algo que hay que vigilar. Esta celda CR2430 da 5 mA como máximo continuo. Vamos a ver si podemos manejar eso.

Es bueno que solo necesite un LED encendido a la vez, de lo contrario, incluso consideraría la celda de moneda. Esto parece un buen LED: típicamente 15 mcd a 2 mA.

Oli optó por un registro de desplazamiento SIPO (Serial-In, Parallel-Out) para los LED y un PISO (Parallel-In, Serial Out) para los botones. Eso le ahorra una gran cantidad de E/S pero cuesta componentes adicionales. ¿No podemos usar la E/S de un microcontrolador directamente? 22 LED y 8 botones son 30 E/S, no hay problema, pero podemos hacerlo un poco más barato si multiplexamos los LED en una matriz de 4 x 5. Normalmente, esto disminuiría la luminosidad de los LED en un 75 %, pero como solo tenemos que encender un LED a la vez, podemos seleccionar una fila y una columna de forma estática. Entonces necesitamos 4 + 5 + 8 = 17 E/S.

Los sospechosos habituales de un microcontrolador son Atmel AVR y Microchop PIC. Por lo general, evitaría PIC para la conducción de LED porque no puede generar o absorber 20 mA, pero tenemos una corriente de LED baja, por lo que no hay problema. PIC también es más barato que AVR. El PIC16F57 tiene 20 E/S, eso es suficiente. La hoja de datos dice un máximo de 22,5 µA para un reloj de 32,768 kHz a 2 V, por lo que a 3 V todavía estará por debajo de 50 µA.

Eso es todo. Un microcontrolador, un cristal barato, 22 LED, 8 botones y 12 resistencias (4 para los LED y 8 para los botones. El PIC16F57 no parece tener pull-ups internos). No se necesitan registros de desplazamiento.

Jeje, buena respuesta: opté por la forma SR para tratar de mantenerlo simple, aunque es posible que haya juzgado mal, no estoy seguro. Pensé que preocuparme por ahorrar energía y hacer la multiplexación usando los pines podría hacer que el firmware fuera más desalentador para un novato completo, aunque probablemente sea tan probable que se confunda con los registros de desplazamiento :-) Me inclino por 1 pin por botón/LED ahora (como mencioné en mi segundo comentario), que seguirá siendo fácil en cuanto al espacio pero lo más simple posible con conexiones/firmware.
@Oli: creo que la complejidad de SR y mux es casi la misma para un principiante.
sí, creo que probablemente tengas razón. Todo buen aprendizaje para el OP de todos modos ...

Esto es ciertamente posible con casi cualquier pequeño micro. Puede obtener uno con suficientes pines o hacer un poco de multiplexación para los botones y hacer que los LED sean controlados por registros de desplazamiento.

Para 4 LED más micro, una celda de moneda realmente no va a funcionar, tienen una impedancia interna muy alta y, por lo general, solo pueden suministrar unos pocos mA antes de que el voltaje caiga por debajo de un nivel "utilizable". Algunos AAA/AA/Li-Ion serían más capaces.
Si ejecuta los LED a una corriente muy baja y el micro a, por ejemplo, 32 kHz, entonces podría funcionar, pero a menos que haya una necesidad apremiante de usar celdas de monedas, las evitaría.

Algo como el PIC16F1828 de 20 pines , algunos botones y algunos registros de desplazamiento serían una forma económica y fácil de hacerlo. Obviamente, si prefiere otra marca de micro, hay muchos equivalentes.

EDITAR - algunos detalles:

Registros de desplazamiento

Un registro de desplazamiento básicamente convierte los datos en serie en datos paralelos o viceversa. El que necesitará es un registro de desplazamiento de serie a paralelo como el 74HC595. Tiene 3 entradas de control principales, una entrada de reloj, una entrada de datos y una entrada de pestillo. El 595 tiene 8 flip-flops en una cadena (los flip-flops almacenan 1 o 0) como este (se muestran 4):

FF

Cuando el reloj cambia, cualquier valor que esté en el pin de entrada de datos (1 o 0) se cambia al IC, y el último valor se cambia (ya sea olvidado o enviado a otro 595 si están encadenados). Entonces, "cambia" los datos en un bit a la vez hasta que haya configurado los 8 flip flops al valor deseado.
Luego, para generar esos datos, configura el pin de cierre y los datos aparecen en los 8 pines de salida. Entonces, se pueden usar 3 pines para controlar 8 pines (o 16, 24, 32, etc.).
Aquí hay una imagen de 2 595 encadenados y controlados desde un Arduino:

Ejemplo de HC595

Hay un montón de tutoriales que entran en mucho más detalle que los anteriores, busque en Google "tutorial de registro de turnos" y obtendrá cosas como:

Tutorial de registro de desplazamiento PIC
Arduino 74HC595 tutorial
Otro tutorial 74HC595

Botones

Puede usar un multiplexor como el que mencioné anteriormente (vea cosas como el 74HC4051 , 4052 y 4053), pero como estamos hablando de registros de desplazamiento, vale la pena mencionar que podemos usar un registro de desplazamiento de entrada en paralelo y salida en serie para leer los botones. Las mismas conexiones, pero al revés: enganchamos los estados del botón en las chanclas, luego registramos los datos poco a poco en el pin de su microcontrolador (es decir, leemos en cada reloj y almacenamos para que termine con 8 valores binarios)
Aquí está un ejemplo:

Cambio de botones

Pensamientos finales

Por los comentarios y después de haber tenido algo de tiempo para pensar, me inclino por usar solo un micro con suficientes pines para tener 1 por LED y botón. Esta será una huella más pequeña que los registros de desplazamiento e involucrará el firmware más simple. Iría por esto al menos para empezar mientras prototipaba.

Steven dio una muy buena respuesta, y la multiplexación usando pines IO es una forma común de hacer las cosas (vea Charlieplexing para un método de multiplexación muy económico) y ciertamente vale la pena conocerlo.
La unidad de celda de moneda es ciertamente posible como se mencionó. Para tener una idea aproximada, aquí tengo un prototipo de proyecto que usa uno de los PIC16F1828 mencionados anteriormente que manejan una pantalla de 7 segundos, 2 botones (el 16F1828 tiene pull ups internos, por lo que no se necesitan resistencias) y 2 LED, que se ejecuta desde una celda de moneda y duerme entre operaciones: la celda dura hasta un año con un uso normal. Entonces, ciertamente es posible, solo agrega complejidad que es posible que desee guardar para más tarde.

Entonces, en resumen, hay muchas maneras de hacer esto: si tiene una placa de prueba, ¿por qué no toma los componentes para las opciones que desea probar (use las versiones dip y luego cambie a SMD para la versión final si es posible) y experimente en su tiempo libre.

¡Wow increible! esto suena complicado :( la pista de la computadora nunca fue mi lado fuerte de la ingeniería eléctrica. Si pudiera, ¿podría elaborarlo para que un principiante como yo pueda entender por dónde empezar y por dónde empezar este pequeño proyecto? es posible jaja. No estoy muy seguro de cómo multiplexar o utilizar el registro de desplazamiento y también qué partes obtener. Muchas gracias por su ayuda: D
Agregué más información, espero que esto ayude un poco, solo avíseme si necesita alguna aclaración.
gracias un montón. Acabo de leer un poco sobre cómo multiplexar. Leeré más esta noche, pero tengo curiosidad por saber si esto todavía cabe en una PCB de 3,5 x 1,5 pulgadas con todas las partes (LED, botón, controles de cambio, micro, fuente de alimentación y cableado/soldadura). Estoy confundido. acerca de si debo usar multiplexación y cambios de registro. Necesito leer sobre cómo funcionan los registros de turnos, jaja. Recuerdo hacer laboratorios, desearía haber prestado más atención. hasta ahora lo que tenía en mente era hacer un 5 por 5 usando 10 pines. pero luego estaba leyendo que tenía que estar conectado a transistores y resistencias. Estoy preocupado por el espacio en la PCB.
Puede usar los registros de cambio para ambos botones/LED, o puede usar un multiplexor si lo desea; hay muchos circuitos integrados diferentes y formas de hacerlo, lo anterior es solo una forma. Dependiendo de su micro, es posible que tenga suficientes pines para conectar los botones directamente (o incluso los LED también si elige un micro de 48 o 64 pines, por ejemplo, podría ser el camino a seguir si desea que sea simple y fácil) Si usas material SMD, deberías encajarlo en 3.5in x 1.5in, está bien.
gracias por ser tan servicial y paciente conmigo!!! Realmente aprecio esto! Entiendo que hay muchas maneras de hacer esto y no sabría cuál sería el mejor método o el más eficiente. Como último recurso, probablemente intentaré usar un micro jaja de 48 o 64 pines. Pero digamos que quería hacer la multiplexación de 5 por 5. ¿Qué necesitaría obtener y entender específicamente para usar este método? Hasta ahora estaba pensando que puedo usar un botón para aumentar y disminuir presionándolo o manteniéndolo presionado. Menos botones ahora :) En este caso, ¿cuáles son las cosas necesarias que debo hacer y comprender? Muchas gracias de nuevo
hmm discúlpame si estoy empezando a confundirme. Creo que necesito 6 pines para poder controlar 30 leds, ¿verdad? mi cabeza está empezando a doler y dar vueltas :(
Puede usar solo 3 pines si encadena algunos registros de desplazamiento juntos. Básicamente, puede controlar cualquier cantidad de LED con 3 pines si encadena muchos registros de desplazamiento juntos; la desventaja es que no podrá actualizarlos tan rápido como lo hizo. Cambia cada bit en uno a la vez (por lo general el tiempo es igual al período del reloj * número de bits en la cadena) No se preocupe si es confuso al principio, solo lea los ejemplos a los que me vinculé varias veces y déjelo entender un poco. Tomar algunos de los 595 y experimentar con ellos en una placa de prueba sería la mejor manera de aprender.
Tenga en cuenta que el 74HC595 solo puede suministrar 70 mA (máximo absoluto), por lo que querrá LED de alta eficiencia que necesiten menos de 10 mA.