Respuesta parcial de pantalla TFT de 1,8 pulgadas con arduino

Estoy probando mis manos en las pantallas LCD. Así que elegí esta pantalla TFT LCD de 1,8 pulgadas y la probé con la placa TM4c123gxl usando una biblioteca ST7735 (adaptada de Adafruit) y la pantalla funciona perfectamente como se esperaba. ( Código LCD de 1.8 'Serie Tiva ).

Entonces, para algún otro proyecto, planeo usar la misma pantalla pero con Arduino UNO. Así que conecté lo mismo e intenté probar el ejemplo de graphicstest empaquetado con la biblioteca Adafruit, pero desafortunadamente, no funciona como se esperaba, como puede ver en el video .

Estoy usando una red divisora ​​de resistencias para cambiar el voltaje de la lógica de 5V a 3V.cambio de voltaje

Revisé las líneas SPI con un sniffer lógico y parecen funcionar como se esperaba. Y esto no puede ser ruido porque ha sido programado repetidamente y el comportamiento es exactamente el mismo que en el video.

Lo que puedo concluir es que probablemente me falta algo con la configuración, pero comparé el archivo de la biblioteca Tiva y Arduino y ambos parecen configurar la pantalla LCD con valores idénticos.

Así que cualquier dirección sería de gran ayuda ya que no tengo ideas.

¿Cuál es la velocidad que estás usando? He probado en otra pantalla spi que si la resistencia equivalente R 1 R 2 R 1 + R 2 es 10k, la frecuencia máxima que puede usar es de aproximadamente 1 MHz, debido a las capacitancias parásitas. Su resistencia equivalente es de aproximadamente 3k, por lo que no puede ir más rápido que 3 MHz. Si usa un divisor de resistencia de 1k + 1.5k, debe alcanzar la velocidad SPI ATMEGA328P máxima de 8MHz.
Sé que no es la solución, pero encendí el arduino directamente desde 4.7V (ST7735 es tolerante a 4.7V) y todo funcionó a la perfección. Actualizará la solución final una vez hecha.

Respuestas (3)

La pantalla LCD que está utilizando es una pieza de 3,3 V. El Tiva Launchpad también es una pieza de 3.3V. Sin embargo, el Arduino Uno es una parte de 5V.

Está suministrando a la pantalla LCD un voltaje demasiado alto; francamente, tiene suerte de que funcione. Use un cambiador de nivel o use una pantalla LCD compatible con 5V.

Oye, olvidé mencionar que estoy bajando el voltaje usando una red de resistencias ( openimpulse.com/blog/wp-content/uploads/2012/06/… ) y he observado la forma de onda en DSO y es de alrededor de 3V.

Los valores de resistencia de su divisor parecen ser demasiado altos, a menos que su velocidad SPI esté configurada en una frecuencia muy baja.

He probado en otra pantalla SPI que, debido a capacitancias parásitas, si la resistencia equivalente R 1 R 2 R 1 + R 2 es 10   k Ω , entonces la velocidad SPI máxima confiable es 1MHz.

Por supuesto, su pantalla + PCB podría tener diferentes capacitancias parásitas, pero no espero una variación mayor que un orden de magnitud.

Su resistencia equivalente es aproximadamente 3   k Ω . Esto produciría en mi caso una velocidad máxima de 3,3 MHz (es decir, 2 MHz en Arduino Uno).

soluciones posibles:

  • Utilice un divisor de resistencia R 1 = 1   k Ω y R 2 = 1.5   k Ω .
  • Si no funciona, o si no te apetece tener un consumo de corriente adicional de unos mA:

    1. comprobar la velocidad máxima de SPI F metro a X en el que funciona su pantalla.
    2. Calcular k = F d mi s i r mi d F metro a X
    3. dividir ambas resistencias por k.
Hola @next-hack. Lo intenté con una resistencia de 1k y 1.5k, pero no tuve suerte. Pero creo que tu idea puede llevarme en la dirección correcta. Debido a que ver las señales en DSO muestra un comportamiento capacitivo (señales ascendentes y descendentes graduales en lugar de señales agudas) ¿Puedo saber cómo calculó la velocidad máxima con la ayuda de resistencias?
a partir de ahora no me importa el exceso de corriente porque en el circuito final planeo usar un búfer (como se muestra en la página de adafruit). Conducir el búfer a 3,3 V y cambiar los niveles de V a 3,3 V.
Solo prueba y error :) Una pregunta: si establece una velocidad SPI de, digamos, 250 kHz, ¿funciona?
No lo intenté... déjame intentarlo y te responderé.
Sin suerte. Probé con una frecuencia de reloj de 250kHz. Mismos resultados, solo actualizaciones más lentas. (resultados:- ibb.co/mD0M0b )
Lo que puedo concluir es que hay algo mal con el archivo de configuración y no con la comunicación SPI.
¿Podría publicar también el código fuente en su pregunta? Además, ¿conectó el reinicio, CS y D/C (a través de un divisor)? ¿Puedes comprobar los voltajes?
Estoy usando el código de muestra "graphicstest" de la biblioteca de controladores Adafruit ST3775 ( learn.adafruit.com/1-8-tft-display/downloads ). Y sí, conecté el reinicio y D/C (a través del divisor), CS lo conecté directamente a tierra ya que no tenía resistencias. Los niveles de voltaje están en 3V como se esperaba. Y el código original que funciona con Tiva también está vinculado en la pregunta (compartido en github).
El CS no siempre debe estar conectado a tierra, ya que se usa como "Inicio del marco". De esta forma, el controlador de pantalla sabe cuándo está enviando el primer byte del comando. Puede probar con el par de resistencias CS "cualquiera" (por ejemplo, 10-15k) que proporcione una relación de 3/5, usar una frecuencia de reloj muy lenta e intentarlo.

Como sospechaba, el problema estaba en la biblioteca en sí y no en el hardware.

En lugar de usar la biblioteca Adafruit ST7735 y Adafruit GFX, utilicé la biblioteca TFT predeterminada provista con Arduino y funcionó de maravilla.

Y este problema es muy errático. Debido a que a veces funciona con ciertas pantallas LCD, a veces, durante el arranque de Arduino, puede ver un destello de lo que se suponía que debía mostrar. Pero la biblioteca TFT funciona muy bien con la pantalla LCD siempre.

youtube.com/watch?v=LZ6oAqTX5fg&feature=youtu.be&t=186 . Este video es lo que me llevó a la solución.