Encienda varios LED juntos usando el microcontrolador PIC

Estoy usando un microcontrolador PIC18F2420 (puedo cambiar si es necesario). La tarea es controlar hasta 20 indicadores LED de nivel de potencia junto con algunos otros indicadores LED e interruptores mediante PIC. Puedo imaginarme conectando el ánodo de los 20 LED al riel (~ 30 V) y conectando el cátodo de cada LED a un pin de E/S PIC. Pero esto significaría 20 pines de E/S reservados solo para esto: desperdicio de muchas E/S. El expansor de E/S externo agregaría costo y solo brinda 8 E/S más con circuitos integrados como MCP23008. El costo y el espacio físico de la PCB son una consideración importante. Con los LED Charliplexing, solo puedo ENCENDER 1 LED a la vez. No quiero conducirlos en el ciclo de trabajo con brillo reducido.

¿Cómo puedo encender los 20 LED junto con el mejor uso de los pines de E/S del PIC? ¿Realmente necesito un controlador con tantos pines que deba asignar 1 pin para cada LED solamente? El dibujo del esquema de conexión de los LED sería útil para comprenderlo.

No quiero encender/apagar los 20 LED al mismo tiempo como un grupo... Estos LED son indicadores de nivel y, según la entrada del usuario, necesito encender cada LED indicador de siguiente nivel manteniendo todos los indicadores de nivel inferior ENCENDIDO también, a medida que el usuario aumenta el nivel y apaga cada LED de nivel más alto uno a la vez, a medida que el usuario disminuye el nivel.

Esto es confuso: "conectar los 20 LED en serie y enganchar el ánodo al riel (~ 30 V) y conectar el cátodo de cada LED a un pin de E/S PIC" Si los LED estuvieran en serie, solo necesitaría una E/ O pin para encenderlos (usando un transistor para amortiguar su pin de salida)
Hay expansores de puertos de 16 y 24 bits. Y siempre puede usar un segundo PIC como expansor de puertos.
Perdón por la confusión y gracias por sus comentarios... No quiero encender/apagar los 20 LED al mismo tiempo... Estos LED son indicadores de nivel y según la entrada del usuario, necesito encender cada nivel siguiente indicador LED ENCENDIDO manteniendo todos los indicadores de nivel inferior ENCENDIDO también, a medida que el usuario aumenta el nivel y apaga cada LED de nivel más alto uno a la vez, a medida que el usuario disminuye el nivel.
Soy consciente de los expansores de puertos, pero me gustaría evitarlos si puedo para reducir el costo y el espacio de diseño a bordo.
En este punto, me inclino a decir que sus requisitos no se pueden cumplir. No desea controlar esos 20 LED en paralelo, porque hay demasiados pines. No desea multiplexarlos, porque el brillo es demasiado bajo. Cualquier extensor de puerto que funcione con PWM, Serial, I2C es demasiado grande y costoso para usted. Así que tengo que concluir que no tengo ideas. Tal vez deberías revisar tus requisitos. Tal vez podría cambiar su diseño a menos LED. ¿Quizás incorporando el brillo en su pantalla?
gracias, así es, tendría que revisar mis requisitos o necesitaré más pines IO para manejar esto en paralelo.

Respuestas (5)

Parece que está creando algo así como un medidor de VU de audio. La forma más fácil de hacer esto sería crear una señal PWM, filtrarla y enviarla a un controlador de pantalla de puntos/barras LM3914 . Estos manejan diez LED cada uno y se pueden conectar en cascada al controlador tantos como sea necesario.

ingrese la descripción de la imagen aquí

Gracias por la respuesta. Me gustaría hacer esto solo con el microcontrolador PIC, ya que lo necesitaré para otro propósito de todos modos. Me gustaría evitar el uso de chips adicionales como LM3914 y expansores IO, si puedo, para reducir el costo y el espacio de PCB.

SI desea controlar los 30 LED individualmente...

Utilice un registro de desplazamiento con una capacidad de alta corriente (si lo necesita). Los registros de desplazamiento le permiten cambiar una mayor cantidad de pines con solo una pequeña cantidad de pines de entrada al serializar datos en el chip y enviarlos a la cantidad de pines que están en el dispositivo en paralelo. Hay muchos tutoriales sobre esto, solo busque registros de desplazamiento. Lo bueno de los registros de desplazamiento es que puede conectarlos en cadena para usar solo unos pocos pines de salida para controlar una gran cantidad de ellos, con la compensación de la rapidez con la que puede actualizar las salidas.

¿A qué voltaje y corriente desea ejecutar los LED? Esto limitará si puede o no ejecutar los LED desde cualquier registro de desplazamiento convencional. Es posible que deba usar el registro de desplazamiento para controlar un MOSFET si desea controlar LED grandes.

Aquí hay un enlace a un registro de desplazamiento de hundimiento de alta corriente común:

https://www.adafruit.com/products/457

Creo que tienes tres opciones:

(1) El control directo del LED, utilizando un PIC más grande, por ejemplo, el 18f4620 (que tiene 35 pines de E/S). Hay LED superbrillantes, estos también se iluminan bien con 2-3 mA.

(2) Igual que el anterior, pero use un transistor pequeño y barato como seguidor de emisor para cada LED y LED normales (incluso de alta potencia).

(3) Como escribió 'Korozjin' arriba, use registros de desplazamiento. El TPIC6B595 es muy bueno, pero el HC595, mucho más económico, también es suficiente (capaz de disipar/generar un máximo de 8-9 mA/pin a la vez).

Si todos sus LED deben controlarse como un grupo, todos encendidos y apagados simultáneamente, solo necesita usar una salida del microcontrolador, pero probablemente necesitará un transistor controlador para manejar la corriente total del LED.

gracias por sus comentarios... No quiero encender/apagar los 20 LED al mismo tiempo como un grupo... Estos LED son indicadores de nivel y según la entrada del usuario, necesito encender cada indicador LED de siguiente nivel ENCENDIDO manteniendo todos los indicadores de nivel inferior ENCENDIDO también, a medida que el usuario aumenta el nivel y apaga cada LED de nivel más alto uno a la vez, a medida que el usuario disminuye el nivel.

Chip de controlador led PMIC que habla sobre I2C. Más de 24 canales están disponibles fácil y comúnmente :)