La transferencia SPI no funciona del todo en el controlador de Netduino

0

Tengo un controlador led TLC5916 ( manual aquí ) que puede encender 8 LED como se indica. a través de SPI por un microcontrolador. El final de escritura de la SPI es un usuario de Fez Panda (.NET MicroFramework). Cuando envío datos, a veces obtengo resultados correctos, pero generalmente es algo que se parece, pero no del todo, a lo que envié.

Por lo general, parece que el byte enviado se desvió un bit hacia la izquierda o se volcó un poco.

Al intentar enviar el mismo byte una y otra vez, normalmente produce la misma salida (incorrecta), pero incluso allí, he visto salidas ligeramente diferentes para la misma entrada que surgen de vez en cuando .

Tenga en cuenta que el controlador LED se alimenta a 5V (fuente de PC ATX), y el Fez tiene salidas de 3.3V.

También, he intentado volver a leer los valores del controlador LED (tiene un pin de salida SPI para encadenar varios controladores). Esta vez, los valores de 5 V se leen perfectamente con Fez uC, los valores que leí correspondían con los LED físicos encendidos. (La documentación de Fez dice que se admiten entradas de 5 V, por lo que supongo que se esperaba)

Intenté cambiar la configuración de muestreo para SPI (flanco CLK ascendente / descendente), pero los mismos resultados para cualquier configuración.

¿Alguna sugerencia para depurar?

No tengo un osciloscopio o sonda digital :(.

    

2 respuestas

1

Refiriéndose a la hoja de datos, página 8:

El voltaje de entrada de alto nivel de VIH es 0.7 * Vdd mínimo. Que es 3.5v! Esto es más alto que las señales de 3.3v que lo está enviando. Estás trabajando más allá de la especificación operativa de la pieza.

Puedes usar un convertidor de voltaje para aumentar esas señales de 3.3v a 5v.

O

Reduzca un poco la tensión de alimentación de 5 V del TLC5916. Puede hacer esto fácilmente agregando un diodo a su pin de suministro VDD. Esto caerá un poco de voltaje. Podría simplemente traerlo a especificaciones. Asegúrese de que la caída de tensión directa del diodo sea de aproximadamente 0.7v.

    
respondido por el Rocketmagnet
1

Este podría ser el problema, pero muchas veces estos registros de desplazamiento funcionan fuera de sus mínimos establecidos, por lo que también puede probar las cuatro permutaciones del estado inactivo y el borde del reloj de muestreo. Puse una saleae en un registro de turnos que estaba usando una vez (mbi5026), y descubrí que si bien funcionaría con diferentes configuraciones, siempre había una mejor combinación que lo hacía funcionar correctamente. Antes de encontrar la combinación correcta, vi discrepancias como las que mencionas.

También puedes variar la velocidad del reloj y ver qué pasa.

        Device1 = new SPI.Configuration(
            Pins.GPIO_PIN_17, // SS-pin
            true,             // SS-pin active state
            0,                 // The setup time for the SS port
            0,                 // The hold time for the SS port
            TRY BOTH - true,              // The idle state of the clock
            TRY BOTH - true,             // The sampling clock edge
            100,              // The SPI clock rate in KHz
            SPI_Devices.SPI1   // The used SPI bus (refers to a MOSI MISO and SCLK pinset)
        );
    
respondido por el john west

Lea otras preguntas en las etiquetas