Problemas de conducción de leds con el MM5450

Primero cuál es mi objetivo final: controlar 24 LEDS RGB utilizando un microcontrolador conectado en serie a un controlador LED Micrel MM5450 . Sería bueno poder controlarlos todos individualmente (72 LED), pero me conformaré (como lo hice) con multiplexar y controlar solo un color a la vez. En el caso del MM5450, estoy usando 3 salidas para controlar 3 transistores, uno para cada color.

Ahora aquí está el problema que estoy teniendo.

Estoy usando el paquete PLCC44, que parece mostrar algunas diferencias con el texto estándar en la hoja de datos. Por ejemplo, la hoja de datos se refiere a 35 bits de datos, pero el PLCC solo tiene 34 pines de salida en lugar de 35 en el DIP.

Solo para mojarme los pies, conecté 4 LED a los pines de salida 1 a 4 y dejé el resto desconectado. He cableado VDD y VSS (sin condensadores de desacoplamiento), puse un potenciómetro de 100K en el pin 21 (control de brillo) y un 1nF en ese mismo pin como sugiere la hoja de datos.

Intenté conectar DATAENABLE a GND, a VCC ya una resistencia desplegable, pero no funcionó tan bien.

Los síntomas son que después de enviar datos utilizando el tiempo indicado en la hoja de datos, obtengo resultados extraños. Por ejemplo, si envío todos los bits a cero, al encender, solo se encenderán los leds 1, 3 y 4. Reinicie la uc y luego se encienden los led 2, 3 y 4. Si envío solo un bit alto, entonces se encienden los LED 1 y 4, y luego, cuando reinicio, se encienden los LED 3 y 4 de UC. Solo para aclarar, cuando digo reiniciar, significa que afirmo la línea de reinicio del microcontrolador, que inicia mi programa nuevamente (y envía un flujo de bits al controlador LED).

No puedo ver un patrón claro de lo que está sucediendo aquí. ¿Alguien con más experiencia en este chip (o una sugerencia de un chip completamente diferente que logrará mis objetivos) para ayudarme?

Salud

Editar:

Ok, hice algunas pruebas más y conecté un alcance de almacenamiento a datos y reloj. Aquí están mis hallazgos:

El reloj y los datos están haciendo exactamente lo que les digo que hagan. Como se sugirió, puse el reloj y los datos en mi PORTB y la habilitación de datos en mi PORTC, si eso importa.

Mi secuencia de datos se ve así: datos: comienza en nivel bajo habilitación de datos: comienza en nivel alto secuencia de datos: 0 - [habilitación de datos en nivel bajo] - 1 - 34 bits de datos - 0 - 0 - [habilitación de datos en nivel alto]

Ahora mismo estoy trabajando en los pulsos de 10ms. Como estoy usando una placa de prueba conectada a mi placa de desarrollo a través de cables de clip largos, analicé la forma del reloj y las señales de datos para detectar cualquier timbre y la señal fue bastante buena.

Por los síntomas, parece que mi flujo de bits no está sincronizado con el chip... No tengo ideas

Respuestas (3)

Sospecho que el problema es que necesita controlar la línea de habilitación de datos con el microcontrolador. Ajústelo alto en el reinicio. Luego, configúrelo bajo justo antes (más de 100 ns) de comenzar a transmitir datos. Después de los 35 bits, vuelva a subirlo.

Además, la hoja de datos explica el pin 35 faltante sobre el que se preguntaba en la Nota 1 en la página 1. En el MM5450, se reemplaza por la línea de habilitación de datos.

Este fue mi pensamiento también. Consulte la Figura 5 en la hoja de datos para ver el diagrama de tiempos. Parece que está usando un bus SPI de modo 0 (selección de chip SPI = habilitación de datos MM5450, reloj = reloj, MOSI = datos y MISO = NC), por lo que puede intentar usar un periférico SPI para hablar con él más fácilmente.
Intenté eso. El problema es que cuando conecto DE a un pin de salida en mi uc, está siendo impulsado por la línea de datos. Por ejemplo, si configuro DATA alto, no importa si configuro DE alto o bajo, seguirá a DATA. Según la hoja de datos, ¿parece que DE es el riel de un amplificador operacional interno que tiene DATOS como entrada? ¿Me estoy volviendo loco?
Por cierto, probé lo anterior con un pullup y un pulldown en mi pin de salida.
Aunque el símbolo de un opamp es de hecho un triángulo, supongo que el triángulo en la hoja de datos representa un búfer de entrada, y la línea que viene en la parte superior representa una línea que habilita ese búfer. Dado que DE y DATA son entradas en el MM5450, supongo que su problema radica en el lado del microcontrolador. Intentaría hacer que dos salidas funcionen de forma independiente en el micro y luego verificar que aún funcionan de forma independiente cuando las conecta al MM5450. Probablemente estés cerca, sigue así.
Por cierto, que micro estas usando?
Es un pic18f4550 en una placa de desarrollo hecha por mikroe

Algunas cosas sobre el uso del MM5540 para multiplexar LED... La línea de habilitación de datos realmente necesita una resistencia desplegable. Alimentando el chip desde un Arduino, tengo mejor suerte atándolo bajo o conectándolo a una salida digital y agregando una resistencia (1k) a tierra.

El resto del chip está diseñado para SINK actual, no para suministrar voltaje. Mirando de cerca la hoja de datos, APAGADO establece las salidas a 3V. Entonces, el lado positivo del diodo debe estar alto, 3 V es suficiente, y el ánodo debe estar en uno de los pines de salida, donde el voltaje caerá para absorber la corriente que pasa por el diodo.

Finalmente, el control de brillo también es un sumidero de corriente. En mis manos, atando el extremo superior de la resistencia de control de brillo a 5V, 2k Ohms genera alrededor de 600 microamperios, lo que permite que el chip absorba 12mA/diodo, que es lo que normalmente quiero.

Tienes que usar la habilitación de datos. Tras la transición, el búfer de serie a paralelo se restablece. Los siguientes 35 bits de reloj cargan datos en el búfer. El 35 luego transfiere el búfer a las salidas.

Si no usa la habilitación de datos, entonces es posible que no esté sincronizado.

También tome nota de la velocidad máxima de funcionamiento. Parece que ya has terminado de hacerlo.