?>/script>'; } ?> Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C. Widgets Magazine

Autor Tema: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.  (Leído 68755 veces)

0 Usuarios y 1 Visitante están viendo este tema.

raphik

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #40 en: 07-09-2017, 10:48 (Jueves) »
... la (pantalla) que tengo ahora mismo es ésta.


Por lo que se ve, se trata de una YwRobot LCM1602 IIC V1.


Le veo pocos componentes en comparación con otras, lo que no significa que sea una mala expansora. Según se lee en Internet, se alimenta con 5V y se conecta directamente al bus i2c, sin resistencias pull-up.
http://www.electronicapty.com/component/k2/item/4-lcd-1602-con-modulo-i2c-ywrobot-iic-v1/4-lcd-1602-con-modulo-i2c-ywrobot-iic-v1
http://henrysbench.capnfatz.com/henrys-bench/arduino-displays/ywrobot-lcm1602-iic-v1-lcd-arduino-tutorial/

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #41 en: 07-09-2017, 15:11 (Jueves) »
Bueno, en realidad no es la de la imagen.
Se ve que esa es la imagen que puso el vendedor en la página del artículo, pero el artículo en sí es ligeramente distinto:

De hecho, si se va a las características, en la descripción del artículo:
Caracterí­sticas:
    Pantalla LCD, 16 caracteres y 2 líneas
    Alimentación 5V
    Controlador compatible HD44780
    Adaptador II2C PCF8574T
    Fondo azul retroiluminado, letras en blanco
    Incluir un pin de contraste ajustable
    Dimensiones (mm): 80 x 36 x 19


Esta es la foto del adaptador que viene en cuestión:


He visto otro tuto por ahí y supuestamente también va directo sin resistencias y a 5V.
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)
(Aquí otro tuto con el mismo controlador)
Lo cual no hace más que aumentar la duda sobre qué es lo que me está fallando.
Está la diferencia de que tú lo tienes soldado con estaño y yo lo tengo con pegamento conductor, pero me parece muy raro que sea ese el problema. Parece que este pegamento da buen resultado con estos voltajes. Por cierto, por si a alguien le interesa, es este.

Lo único que se me ocurre ahora es que pueda haber habido un cortocircuito al haber contactado ligeramente el pegamento con el polo politivo y/o negativo de las bases para led (sin leds) que hay alrededor y aún habiéndolo limpiado después, ya se haya/n estropeado el/los gpios.
No me queda prácticamente más remedio que probar el otro router.
« Última modificación: 07-09-2017, 15:53 (Jueves) por peperfus »

Ficht

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #42 en: 07-09-2017, 23:59 (Jueves) »
Bueno, en realidad no es la de la imagen.
Se ve que esa es la imagen que puso el vendedor en la página del artículo, pero el artículo en sí es ligeramente distinto:

De hecho, si se va a las características, en la descripción del artículo:
Caracterí­sticas:
    Pantalla LCD, 16 caracteres y 2 líneas
    Alimentación 5V
    Controlador compatible HD44780
    Adaptador II2C PCF8574T
    Fondo azul retroiluminado, letras en blanco
    Incluir un pin de contraste ajustable
    Dimensiones (mm): 80 x 36 x 19


Esta es la foto del adaptador que viene en cuestión:


He visto otro tuto por ahí y supuestamente también va directo sin resistencias y a 5V.
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)
(Aquí otro tuto con el mismo controlador)
Lo cual no hace más que aumentar la duda sobre qué es lo que me está fallando.
Está la diferencia de que tú lo tienes soldado con estaño y yo lo tengo con pegamento conductor, pero me parece muy raro que sea ese el problema. Parece que este pegamento da buen resultado con estos voltajes. Por cierto, por si a alguien le interesa, es este.

Lo único que se me ocurre ahora es que pueda haber habido un cortocircuito al haber contactado ligeramente el pegamento con el polo politivo y/o negativo de las bases para led (sin leds) que hay alrededor y aún habiéndolo limpiado después, ya se haya/n estropeado el/los gpios.
No me queda prácticamente más remedio que probar el otro router.

Yo creo que hasta que no hagas parpadear los gpios, no habra i2c de ninguna manera... algo te está fallando en la "exportacion"  No creo que el gpio en si se haya fastidiado si el router arranca...

¿Has comprobado que la pasta de soldar o la plastilina no te estén haciendo algún tipo de cortocircuito o alimentándose de otro gpio o punto cercano?
« Última modificación: 08-09-2017, 00:03 (Viernes) por Ficht »

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #43 en: 08-09-2017, 01:09 (Viernes) »
No sé qué conductividad tendrá la plastilina  ;D De todas formas, ya la había quitado de la placa.
No veo nada mal... ni cortocircuitando.

Os pongo un vídeo de cómo lo tengo. Perdón por el tembleque y el mal enfoque, pero con el zoom y mi mal pulso, no he podido conseguir mejor calidad de imagen.

[ Invalid YouTube link ]
« Última modificación: 08-09-2017, 01:28 (Viernes) por peperfus »

raphik

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #44 en: 08-09-2017, 14:35 (Viernes) »
(Edito: en el tuto que he visto usaban el modelo  PCF8574, sin la T)

La T o su ausencia se refiere al encapsulado y no tiene importancia, excepto si eres diseñador.

Los que tienen la T son de soldadura superficial.


Y los que no la tienen van en placa perforada.

raphik

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #45 en: 08-09-2017, 18:40 (Viernes) »
No me queda prácticamente más remedio que probar el otro router.

Antes de probar con el otro router, igual te vendría bien intentarlo con otras dos GPIO presentes en los AR-5687un.

Según el post https://foro.seguridadwireless.net/openwrt/routers-con-gpio's-operativos-para-darle-usos-como-con-la-raspberry-pi/msg341543/#msg341543, junto al botón de RESET tienes otras dos GPIO libres. Están en los puntos sin conectar R79 (GPIO12) y R158 (GPIO24).


No sabría decirte si el contacto GPIO se corresponde con la soldadura de la izquierda o de la derecha. Habría que tirar de polímetro para averiguarlo.

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #46 en: 08-09-2017, 22:59 (Viernes) »
Gracias. En cuanto tenga algo de tiempo libre (ahora vuelvo a estar bastante liado), lo intentaré.
Es una oportunidad muy buena para hacer pruebas y ayudar a despejar dudas.

Ficht

  • Visitante
Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #47 en: 09-09-2017, 15:46 (Sábado) »
Gracias. En cuanto tenga algo de tiempo libre (ahora vuelvo a estar bastante liado), lo intentaré.
Es una oportunidad muy buena para hacer pruebas y ayudar a despejar dudas.
Cuando te pongas a ello, primero controla el GPIO y luego cuando veas que funciona, ya sigues con los cables y circuitos, así cuando algo de problema podrás descartar más fácil donde puede estar el fallo.

Saludos!

Enviado desde mi PRA-LX1 mediante Tapatalk


peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #48 en: 13-09-2017, 11:44 (Miércoles) »
Buenas. Sigo liado, pero he sacado un huequito para cofirmar los GPIOS. Los marcados en verde son tales:


(Foto original de raphik (gracias))

Además, he hecho un script que iba cambiando los values de ambos de 1 a 0 y viceversa con pausa de 1 segundo y evfectivamente he comprobado como iba cambiando la tensión (voltaje) de ambos, de 3,29 a 0 y viceversa, respectivamente y de forma correcta.

Este finde me pongo otra vez con el tema de la pantalla en estos GPIOS.

Gracias a todos.

Edito: Work in progress....
Cables pegados a los GPIOS R158 y R79. Mañana estará seco y probaré la pantalla.
La operación ha salido bien. Mañana veremos el resultado.
« Última modificación: 16-09-2017, 00:15 (Sábado) por peperfus »

danitool

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #49 en: 16-09-2017, 12:44 (Sábado) »
No usé nunca pegamento de ese tipo, pero yo lo veo más para reparar pistas dañadas o hacer soldaduras largas.

En pequeños puntos debería funcionar mejor la soldadura de estaño, la capilaridad hace que se quede en el sitio y nunca cortocircuite con puntos circundantes, de hecho hay que poner mucho estaño para que ocurra.

El problema va tal vez más en los cables. Personalmente para soldar en puntos muy pequeños uso cable de bobinado que suele ir revestido con barniz aislante (hay que rascar un poco el extremo que se suelda). Un cable apropiado de este tipo es el hilo de cobre  que podemos encontrar en las bobinas de los microfiltros ADSL, de estos seguro todos tenemos una docena en casa.

A la hora de probar yo primero intentaría alimentar con 3.3V del puerto serie, que es un voltaje seguro, y ya luego con 5, y comparar resultados.
« Última modificación: 16-09-2017, 12:45 (Sábado) por danitool »

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #50 en: 17-09-2017, 00:34 (Domingo) »
Gracias por los consejos, danitool. De momento voy a seguir probando con el pegamento conductor.... a lo mejor en otro router me animo a soldar, pero un poco más adelante.

¡ NOVEDADES ! HA HABIDO UN AVANCE IMPORTANTE, POR FIN.

Código: [Seleccionar]
root@OpenWrt:~# i2cdetect  -y 0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --



Sin embargo... parece que no hablamos el mismo idioma xD:
Cuando he ejecutado el script... (después de modificar la dirección 3F por la mía=27...)

Supuestamente pone "HOLA MUNDO"


Ok, mira. He echado un vistazo al script. No entiendo ni la mitad..., pero he visto que se puede ejecutar con el parámetro init. Cuando lo he hecho, al poner HOLA MUNDO, sí que sale; lo escribe correctamente, , pero en vez de salir en blanco brillante, me sale en gris muy tenue. Pongo una imagen para que se vea como sale. Casi no se ve:



raphik, ¿De dónde sacaste el script lcd_write o la información para programarlo...?
¿Qué hacen los parámetros de dirección de memoria de "func_LCD"? Estaría bientener la lista de direcciones de memoria y lo que le activan/desactivan a la lcd...

(Según las pruebas que he estado haciendo...)
Código: [Seleccionar]
func_init() # inicializar display
{
  func_LCD I 0x33;
  func_LCD I 0x32; #  ?
  func_LCD I 0x28; # ?
  func_LCD I 0x0C; # OCULTA EL CURSOR
  func_LCD I 0x01; # BORRA PANTALLA
}

Como cosa también Muy Interesante, he visto por ahí, que otras pantallas tienen la habilidad de poder encender y apagar el led de iluminación por software ("lcd.setBacklight(LED_OFF);//Backlight OFF "), estaría chulo que aquí también se pudiera.
EDITO: Esos parámetros hexadecimal.... ¿son los defines de liquidcrystal_i2c.h?
He visto por ahí ejemplos que les aplica la operación exor a varios defines para obtener la hexadecimal a enviar a la controladora. ¿Es correcto?. Sé que esto ya se empieza a escapar de openwrt, pero ¿podrías poner un ejemplo de cómo calcular esos hexadecimales para enviar uno u otro comando? Estoy mirando la tabla:


Código: [Seleccionar]
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
#define LCD_DISPLAYCONTROL 0x08
#define LCD_CURSORSHIFT 0x10
#define LCD_FUNCTIONSET 0x20
#define LCD_SETCGRAMADDR 0x40
#define LCD_SETDDRAMADDR 0x80

// flags for display entry mode
#define LCD_ENTRYRIGHT 0x00
#define LCD_ENTRYLEFT 0x02
#define LCD_ENTRYSHIFTINCREMENT 0x01
#define LCD_ENTRYSHIFTDECREMENT 0x00

// flags for display on/off control
#define LCD_DISPLAYON 0x04
#define LCD_DISPLAYOFF 0x00
#define LCD_CURSORON 0x02
#define LCD_CURSOROFF 0x00
#define LCD_BLINKON 0x01
#define LCD_BLINKOFF 0x00

// flags for display/cursor shift
#define LCD_DISPLAYMOVE 0x08
#define LCD_CURSORMOVE 0x00
#define LCD_MOVERIGHT 0x04
#define LCD_MOVELEFT 0x00

// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00

// flags for backlight control
#define LCD_BACKLIGHT 0x08
#define LCD_NOBACKLIGHT 0x00

#define En B00000100  // Enable bit
#define Rw B00000010  // Read/Write bit
#define Rs B00000001 // Register select bit

Pero no llego a entender muy bien cómo pasar de ahí a por ejemplo, cuando envías por ejemplo, "0x0C"...

(Por cierto, la sintaxis debería ser lcd_write.sh <linea> <columna> <texto> ¿verdad?)

(Sólo me falta que aparezca el texto brillante, como en la primera foto)
Me acaba de llegar una pantalla de 20x04 que tenía pedida, la he probado y me hace lo mismo: texto casi invisible. Estoy a la espera de la pantalla 16x02 (el mismo modelo que el tuyo), pero me parece que hará también lo mismo, porque supongo que llevan el mismo chip y van de la misma manera. La pregunta fundamental entonces es: ¿Por qué a ti te sale en brillo  8) (maravillosamente legible) y a mí casi invisible  :-\?
Muchas gracias.
« Última modificación: 18-09-2017, 13:47 (Lunes) por peperfus »

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #51 en: 21-09-2017, 11:41 (Jueves) »
Acabo de recibir la pantalla 1604, la misma* que pediste tú. La acabo de probar y me hace lo mismo. No sale el texto brillante.

Esto es rarísimo y se sale de mi entendimiento. La próxima cosa que probaré será con otro router ar5387un, pero esta vez, soldaré los cables con estaño en vez de usar el pegamento conductor. Ya tengo la punta fina de soldador y el estaño de 0,3 mm; así que creo que lo conseguiré.


(* la única diferencia es que yo la pedí de otra tienda, pero supuestamente es la misma).
Y de hecho, creo que es la misma que tengo yo aquí  :P

raphik, ¿Aceptarías probar mi pantalla en tu router? Te la enviaría yo por correo certificado a gastos pagados, por supuesto. Y cuando me la devolvieras, también te pagaría el envío. Sólo tendrías que desconectar la tuya y conectar la mía para hacer la prueba. No tardarías más de 3..4 minutos.
« Última modificación: 21-09-2017, 11:54 (Jueves) por peperfus »

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #52 en: 21-09-2017, 18:59 (Jueves) »
Tan sólo una sugerencia. A la hora de inicializar la pantalla, ¿por qué no le metéis una pausa entre comando y comando? Estos LCD suelen ser muy susceptibles a la temporización, y puede que le estéis enviando los comandos demasiado rápido.

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #53 en: 21-09-2017, 22:51 (Jueves) »
Gracias por la sugerencia. Yo de esto no tengo prácticamente ni idea. Me he limitado a seguir el tutorial de raphik.

El Santo Grial está en que hay distinto para que a él le salga el texto brillante después de hacer el init, pero a mí me sale súper tenue, casi invisible.

Acabo de probar a poner un sleep 10 (para estar seguro de que no me quedaba corto) entre comandos de init y tampoco; nada.

Cuando pruebe lo de soldar los cables... ya veré si consigo algo distinto. Me gustaría quemar todos los cartuchos antes de tirar la toalla.

Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Proyecto GiquieraPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #54 en: 25-09-2017, 10:50 (Lunes) »
Gracias por la sugerencia. Yo de esto no tengo prácticamente ni idea. Me he limitado a seguir el tutorial de raphik.

El Santo Grial está en que hay distinto para que a él le salga el texto brillante después de hacer el init, pero a mí me sale súper tenue, casi invisible.

Acabo de probar a poner un sleep 10 (para estar seguro de que no me quedaba corto) entre comandos de init y tampoco; nada.

Cuando pruebe lo de soldar los cables... ya veré si consigo algo distinto. Me gustaría quemar todos los cartuchos antes de tirar la toalla.

No tiene pinta de ser problema de comunicación. Si lo fuera, no saldría nada, ni siquiera en tenue.
Mira a ver si tu LCD tiene algún cableado para el contraste.

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #55 en: 25-09-2017, 12:20 (Lunes) »
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.
« Última modificación: 25-09-2017, 12:24 (Lunes) por peperfus »

Ficht

  • Visitante
Re: Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #56 en: 25-09-2017, 12:53 (Lunes) »
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.
No será falta de corriente o mala masa?
Prueba sacar la alimentación de algún otro punto de la placa... Y no estaría de más soldar los puntos de alimentación.
Saludos.

Enviado desde mi PRA-LX1 mediante Tapatalk


Desconectado Tki2000

  • Moderador
  • *
  • Mensajes: 2247
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #57 en: 25-09-2017, 14:06 (Lunes) »
He preguntado en un foro de arduino a ver qué me dicen.

Para mí: O son estas pantallas mías, que son defectuosas (o distintas), aunque parecen ser las mismas que usa raphik, mismo chip y tal.
O bien, falla algo en los comandos esos de inicialización, esas secuencias que se le envían de valores en hexadecimal...

Seguiré investigando hasta que me harte o se me acaben las opciones y lo deje en un expediente X, o bien hasta que dé en el clavo del problema.

Lo del contraste dudo mucho que tenga algo que ver. Se maneja igual que el de raphik, con un potenciómetro a modo de "tornillo" de estrella. Aunque sí que es raro, que el mío al máximo sale más tenue que el suyo, pero aún así, no parece tener nada que ver; ya que en el primer ejemplo que pongo, cuando muestro texto en la pantalla, SIN inicializar, salen caracteres raros, pero en un brillo PERFECTO. En cambio, cuando inicializo la pantalla, sale ya el texto correcto, pero es como si ese brillo se apagara y ya casi no se ve el texto. Este finde probaré con otro router idéntico y soldando los cables. Todo lo demás lo haré exactamente igual, para respetar las condiciones iniciales del experimento. Aunque una prueba ideal sería yo probar la pantalla de raphik o bien, él probar la mía (o ambas opciones). Eso nos daría más pistas sobre cuál puede ser el problema.

En ese caso me inclino a pensar que uno de los comandos de inicialización está cambiando el contraste, y lo está poniendo al mínimo, o que como dije, al hacer reset, el contraste se ponga al mínimo, y el comando de volver a ponerlo a un valor normal, o no está, o se le está dando tan rápido, que no ha acabado de resetearse, antes de dárselo, con lo que no se ejecuta. Los LCDs éstos, son un quebradero de cabeza, pero casi todo es por la temporización. En su tiempo me pasaba con los PICs, ya que no estamos usando la línea Bsy, para saber cuándo el LCD ha terminado de ejecutar el último comando, y darle el siguiente.

Para probar, pondría un sleep 1 al final de la función func_LCD, o entre cada línea de nibb, y a ver qué pasa. O el siguiente paso es coger el datasheet del controlador del LCD, y ver qué se le está pasando como comandos de inicialización.
« Última modificación: 25-09-2017, 14:15 (Lunes) por Tki2000 »

peperfus

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #58 en: 26-09-2017, 12:14 (Martes) »
Cosas que he probado:

Poner un sleep 5 (para asegurarme) entre comando y comando del init (e incluso en los de la función interna que envía las señales) = sin cambios.
Lo de la señal eléctrica lo comprobé con el multímetro, midiendo los GPIOS y me daba las tensiones correctas: 3,3V y 0V respectivamente correspondidos con el 1 y el 0.
Lo del potenciómetro del contraste está al máximo.

El finde lo probaré todo desde cero con un router nuevo; pero esta vez soldando los cables.

Saludos y gracias.

raphik

  • Visitante
Re: Proyecto GPIO: Manejo de una pantalla LCD vía bus I²C.
« Respuesta #59 en: 26-09-2017, 12:27 (Martes) »
@peperfus

Es una buena noticia saber que el comando "i2cdetect -y 0" está respondiendo, porque significa que la pantalla está bien conectada al bus I2C. Una cosa menos de la que preocuparse.

El script lo escribí yo. Desafortunadamente no lo documenté. La información la saqué de distintos sitios. Los primeros documentos que leí fueron
http://www.epemag.wimborne.co.uk/lcd1.pdf
http://www.epemag.wimborne.co.uk/lcd2.pdf

Son un poco viejunos. Probablemente te venga bien leer este artículo de la wikipedia
https://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller.

El script gira en torno al comando "i2set", que permite enviar información a la pantalla. Su sintaxis:
Código: [Seleccionar]
i2cset -y BUS ADDRESS INFO1 INFO2-y obliga al comando a ejecutarse sin hacer preguntas
BUS=0
ADDRESS=0x27 (0x27 es la dirección de tu pantalla)

El comando permite enviar uno o dos bytes (INFO1 es obligatorio; INFO2 es opcional). Por simple economía, lo habitual es enviar dos bytes de una tacada. Más adelante veremos cómo.

Por otra parte, conviene puntualizar que a la pantalla se le puede enviar tanto INSTRUCCIONES como CARACTERES. Los caracteres se visualizan en pantalla, mientras que las instrucciones sirven para controlar su funcionamiento (borrar la pantalla, posicionar el cursor, hacer cursor visible, etc.)

Es importante saber que nuestra pantalla funciona en modo 4-bits, debido a que sólo las líneas D7 a D4 están físicamente conectadas a la placa expansora, quedando sin uso las líneas D3 a D0.

Trabajar en modo 4-bytes obliga a enviar cada byte en dos pasos. Por ejemplo, para enviar 0x25 hay que enviar primero el nibble alto (el 2) y luego el bajo (el 5).
Por otra parte, la pantalla tiene una forma peculiar de trabajar: hay que enviarle la info dos veces. Una para que la guarde y otra para que la procese.

Todo lo anterior se traduce en que una triste instrucción (o caracter) de 1 byte requiere el envío de 4 bytes. Lo vemos con un ejemplo: envío de la instrucción 0x01 (borrar pantalla)
Código: [Seleccionar]
i2cset -y 0 0x27 0x0C 0x08    # envío del nibble alto (el 0) en dos tiempos 0x0C para que lo guarde, 0x08 para que lo procese.
i2cset -y 0 0x27 0x1C 0x18    # envío del nibble bajo (el 1) en dos tiempos 0x1C para que lo guarde, 0x18 para que lo procese.
Es un co*azo, pero es así como hay que hacerlo. La función func_LCD() pretende simplificar el envío de datos. Utiliza dos parámetros. El primero puede ser la letra I o la letra C, según se envíe una instrucción o carácter. El segundo parámetro es el propio dato que se envía.
Código: [Seleccionar]
nibb=$(($data/0x10*0x10));                                          # nibble alto
i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))  # 1. guarda el dato - 2. procesa el dato
nibb=$(($data%0x10*0x10));                                          # nibble bajo
i2cset -y $BUS $ADDRESS $(($nibb+$INST_SET)) $(($nibb+$INST_SEND))  # 1. guarda el dato - 2. procesa el dato

Efectivamente, como bien dices, la sintaxis es
Código: [Seleccionar]
lcd_write.sh <linea> <columna> <texto>Ya lo he corregido en el primer post. Gracias por reportarlo.

En cuanto a que me envíes la pantalla para probarla, ya llegaríamos a un acuerdo si fuera necesario.

Respecto a lo de poner una pausa entre comandos, no es necesario. Tened en cuenta que el script está escrito en un lenguaje interpretado, por lo que es su ejecución es bastante lenta.

Por último, el contraste se regula por hardware. No conozco ningún comando para hacerlo por software.
« Última modificación: 26-09-2017, 12:30 (Martes) por raphik »