Tengo una pantalla a color TFT de 1,8" de Banggood. Es muy agradable con los colores vivos.
Sin embargo, la actualización de la pantalla es lenta. Estoy limitado por la velocidad SPI de 1 MHz. Da como resultado una tasa de actualización de:
160 píxeles x 128 píxeles x 16 bits/píxel ÷ 1 MHz = 0,33 s por fotograma
Efectivamente, es aún más bajo ya que Teensy LC se detiene durante aproximadamente 1 ciclo después de cada byte y hay una sobrecarga entre las transacciones SPI. Así que es más como 0,5 s por cuadro o 2 fps, lo cual es muy notable. Es más como una animación de deslizamiento de izquierda a derecha (ver imagen a continuación).
Entonces mi pregunta es:
Actualizar
Aquí hay una foto de la parte inferior del tablero.
No hay mucho que ver:
La parte interesante probablemente esté escondida entre la PCB y la pantalla.
TSCYCR , el ciclo de reloj serie (lectura) es de 150 ns. Eso es 6,6 MHz. Pero no espere milagros de una pantalla SPI. (podría funcionar bien a 10Mhz)
El software debe optimizarse para actualizar la menor cantidad de píxeles por actualización.
Todavía hay algunas cosas que puede hacer:
- Reducir la profundidad de color.
- Usa una palabra más larga. (por ejemplo: 16 en lugar de 8 bits)
- Asegúrese de que la rutina SPI, si se bloquea, sea lo más corta posible. No espere a que se complete el spi, espere a que el spi esté listo para una nueva palabra.
Si desea una visualización rápida, obtenga una paralela con un búfer de cuadros en el que pueda realizar operaciones.
Obtuve el mejor resultado (más de 30 fps) usando la biblioteca TFT_eSPI https://github.com/Bodmer/TFT_eSPI donde el contenido se almacena en un sprite. La velocidad en baudios establecida en el archivo de configuración que funcionó a la perfección (en mi placa) fue. Este código se estaba ejecutando en un ESP32 que estaba conectado a la pantalla.
#define SPI_FRECUENCIA 40000000
Ahora está funcionando correctamente. En un Teensy LC funciona a 16 MHz, en un Teensy 3.2 funciona a 18 MHz. Ambas son las velocidades de reloj SPI máximas para estas placas.
Resultó ser un problema de software. El principal problema era que no había desactivado correctamente DMA. Entonces se activaría demasiado pronto en la siguiente transmisión SPI, es decir, comenzaría con el primer byte de la transmisión aunque se suponía que debía comenzar en el segundo byte. Esto mezcló algunas cosas y dejó al dispositivo esperando que se transmitiera el último byte.
Todavía no entiendo realmente por qué funcionó en frecuencias más bajas pero falló en las más altas.
chris stratton
codo
próximo truco
codo
próximo truco
codo
Kuba no ha olvidado a Monica