¿Qué interfaz es mejor para mi pantalla OLED?

Tengo un módulo de pantalla OLED amarillo-azul de 128x64 de 0,96 pulgadas como este: módulo OLED y quiero usarlo para un proyecto. El controlador de la misma es SSD1306. si ve en la hoja de datos de SSD1306, sabrá que admite interfaces SPI e I2C de 8 bits 68xx/80xx paralelo y de 3/4 cables. Ahora tengo varias preguntas:

  1. Si fueras yo, ¿cuál elegirías para conectarlo a MCU? (¿68xx de 8 bits? ¿80xx paralelo? ¿SPI de 3/4 cables? ¿I2C?) y por qué.
  2. ¿Cuál es mejor para más simple?
  3. Creo que las interfaces paralelas son más rápidas (¿verdad?) pero no puedo encontrar nada sobre 68xx y 80xx de 8 bits (artículo o página web, etc. Si tiene alguna información sobre esto, hágamelo saber). Además, pude encontrar esto: ¿ Qué son las interfaces paralelas de las series 6800 y 8080? y ¿Existe algún estándar de interfaz paralela de la serie 8080? pero, estos no son suficientes. ¿Cuál es la diferencia entre el 68xx y el 80xx de 8 bits? ¿Cuál es más rápido? Totalmente, en tu opinión cual es mejor?

Por cierto: mi MCU es STM32F1 (admite todas las interfaces, incluso 80xx y 68xx en paralelo) y todas las series AVR.

Respuestas (4)

Todos son comparables, y las compensaciones son Pins vs Speed. Realmente se reduce a su preferencia. ¿Cuántos pines libres tienes (¿Puedes prescindir de 8 pines de datos + 4/5 pines de control para datos paralelos?), ¿ya estás usando SPI o I2C? La versión I2C lo limitará a solo 2 LCD sin usar múltiples buses I2C o búfer/interruptores, pero solo requiere 3 líneas de datos (SDA/SCL/Reset) y simplifica el código de comando/datos al incluirlo en un byte en lugar de requerir alternancia de pines.

Si fueras yo, usaría i2c, pero sobre todo porque lo prefiero. Si ya está utilizando SPI, ese es el camino a seguir.

En cuanto al direccionamiento LCD 6800 vs 8080, son bastante similares y no tienen diferencia de rendimiento. La interfaz 6800 es un poco más fácil de implementar y, en su mayor parte, es exactamente igual que la interfaz común LCD de caracteres HD44780.

¿Es común que los chips compatibles con I2C como el SSD1306 tengan un número tan limitado de direcciones esclavas configurables?
@RedGrittyBrick A veces, a veces no. Este lcd específico solo usa 1 pin de dirección, y ese pin solo tiene dos estados (Alto/Bajo). Algunos tienen más pines de dirección y otros tienen pines que pueden ser Alto/Bajo/Flotante/Atado a SDA/Atado a SCL o cualquier otra combinación. O puede usar múltiples buses i2c o múltiples conmutadores/búferes. Es un protocolo direccionable, por lo que existen algunos límites.
@roh actualizó un poco.

Tenga cuidado aquí: SPI muy a menudo no permite leer desde la pantalla LCD. Y porque tienes que direccionar 4 u 8 píxeles adyacentes. Por lo tanto, el mapeo de la memoria LCD para colocar la imagen completa a la vez, sin manipulación de píxeles. 8080/6800 bueno para pequeños microcontroladores. Verifique el estado de los píxeles (lea desde la pantalla LCD), cambie el grupo completo de píxeles (para no alternar vecinos) y listo.

Según mi experiencia, la mejor opción es SPI con 4 cables, porque es fácil de usar con HW SPI y en combinación con DMA (sí, no todas las MCU tienen DMA) puede enviar un búfer de cuadro completo en segundo plano sin tocar desde el programa principal que puede hacer otras cosas durante este tiempo.

También es posible usar SPI con 3 hilos, pero con DMA será más complicado si necesita enviar 8 bits y un comando/datos de bit adicional como nueve bits.

Con I2C también es posible usarlo en combinación con DMA para transferir el búfer de cuadro completo a la vez en segundo plano. pero algunas MCU tienen un periférico I2C más complicado y necesitan más esfuerzo para que funcione.

Pero a veces no hay otra posibilidad porque algunas pantallas, especialmente 96x16 o 128x32, solo tienen I2C o SPI.

También es posible usar bit-banging simple, pero con muchas desventajas.

Nunca pruebo la interfaz paralela 8080 o 6800 con pantallas OLED, porque necesita muchos cables, pero generalmente es la interfaz más simple y está bien descrita en la hoja de datos SSD1306 en las secciones 8.1.1 y 8.1.2.

Me pregunto por qué las pantallas usan SPI de 9 bits en lugar de tener un comando que dice "tratar todo lo que sigue como datos siempre que CS permanezca afirmado". Y tal vez tenga un modo en el que dos o más flancos ascendentes consecutivos en la línea de datos mientras el reloj está bajo se trataría como una liberación y reafirmación de CS (reduciendo el número de pines requerido a dos mientras solo requiere ocho pulsos de reloj por byte).
@supercat Probablemente compatibilidad con la interfaz paralela de 8 bits+C/D

Seleccionaría la interfaz I2C, ya que puede usar el código bit bang de cualquier pin micro IO de repuesto si los UARTS ya están en uso.

Podrías morder SPI con la misma facilidad, ¿no?