LCD por I2C no muestra texto

Hola!

Necesito una librería para programar un LCD mediante el bus IIC(I2C) y estoy un poco perdida por que no se en realidad que tengo que buscar. Mi pregunta es ¿ la librería tiene que ser específica para el microcontrolador que voy a usar(MC9S08QG8) o tiene que ser específica del módulo LCD que voy a usar?

Un saludo y gracias de antemano
 
Pues si y pues si.
La librería tendrá que ser del compilador que uses que a su vez es específico del microcontrolador y por supuesto del LCD. Eso si, si está escrita en un lenguaje estandard será fácil trasladar a otro.
 
Buenos días.

En realidad los Módulos LCD no se programan por Bus I2C, estos Módulos tienen 8 líneas de Datos y tres señales de control.

Dependiendo del Micro o Pic que utilices, tendrás que hacer tu el programa, si utilizas Pic de Microchip tendrás práctcamente casi todo el trabajo hecho ya que existen multitud de rutinas y ejemplos ya hechos, solo los tendrás, con pocos retoques, que adaptarlo a tus necesidades.

Te recomiendo que busques por Internet (Google) información de cómo programar estos Módulos LCD.



Sal U2
 

Adjuntos

  • LCD.pdf
    320.8 KB · Visitas: 18
Buenas tardes. Quiero usar un microcontrolado con un módulo IIC para establecer una comunicación serie con un lcd que dispone de un adaptador IIC.
Entiendo cómo configurar el módulo IIC, pero lo que no entiendo es ¿cómo debo mandar los datos para que adaptador IIC del lcd coloque los datos adecuados en cada pin del lcd? Lo único que se me ha ocurrido que podría ser es que si mi lcd tiene 10 pines y necesito introducir 10 bits de datos para controlarlo , tendría que enviar los datos en orden segun el número del pin del lcd,es decir, si mando 10 bits el primero que se mande irá al pin 1, el segundo al pin 2..etc.

Si alguien puede ayudarme se lo agradecería!
Un saludo. ...
 
los datos i2c no tienen que llegar a los pines paralelos del LCD sino al cerebro interno del LCD que sabe procesar los datos que le llegan ya sea en serie o en paralelo.
 
¿cómo debo mandar los datos para que adaptador IIC del lcd coloque los datos adecuados en cada pin del lcd?

los debes mandar segun la trama que se especifica en la ficha tecnica del LCD si es que este soporta I2C, si no tendras que mandarlos como te indique.

podrias poner con que microcontrolador y compilador lo quieres hacer y de que LCD se trata?
 
Quizás me he explicado mal.
Viendo la imagen que adjunto,mi duda es que yo envio los datos desde el microncontrolador al adaptador IIC, que en la imagen es el PCF8574(A), que está conectado en paralelo con el lcd. y mi pregunta es como sabe qué bit tiene que mandar al pin 4,11,12,13,14....etc del LCD. si hay que enviarlo en algún orden o algo. es que no me queda claro.



papirrin dijo:
podrias poner con que microcontrolador y compilador lo quieres hacer y de que LCD se trata?

El microcontrolador que quiero usar es el MC9S08QG8 de freescale, el adaptador IIC es el PCF8574A y el controlador del lcd es el hitachi hd44780U y usaré el compilador del codewarrior.
 

Adjuntos

  • Schematic_diagram.jpg
    Schematic_diagram.jpg
    120 KB · Visitas: 13
si hay que enviarlo en algún orden o algo

tu le envias los datos al pcf8574(a) y este se encarga de "convertirlos" para el LCD

lo que tienes que hacer es enviar en forma serial sincrona (i2c) mediante los pines SCL(clock) SDA(data), pero para eso tienes que ver la trama en su ficha tecnica.
 
papirrin dijo:
lo que tienes que hacer es enviar en forma serial sincrona (i2c) mediante los pines SCL(clock) SDA(data),

Ya, si entiendo como funciona el módulo IIC, yo le envio los datos por SDA y los recibe el PCF8574(A), el adaptador, lo que no entiendo es cómo envia los datos el adaptador al lcd de forma correcta.

papirrin dijo:
pero para eso tienes que ver la trama en su ficha tecnica.
He estado mirando la ficha técnica y no viene nada, simplemente explica el protocolo IIC.


¿ALguien sabe dónde puedo encontrar más información o sabe la respuesta a mi duda?

De antemano gracias.
 
el pcf8574 es un IO expander para I2C, la funcion que cumple es tipica de conversores serie a paralelo.

Los datos van entrando en serie hasta que se completa una trama I2C, solamente cuando llego la trama completa el dispositivo saca todos los bits hacia el LCD en paralelo, o sea simultaneamente
 
En la hoja de datos SEGURO dice, están para que la gente las lea.

El protocolo I2C, cuando escribís, mandás primero la dirección del esclavo, o sea, lo llamás o le avisás que le vas a mandar algo. Después, escribís la dirección donde vas a leer o escribir, y después lees o escribis sobre esa última dirección. Si volvés a escribir sin finalizar la transmisión, lo que escribas se guarda en la siguiente dirección de memoria.

Lo más coherente es que le mandés la dirección (1,1) o (2,8) del cursor, y después el carácter de 8 bits en ASCII.
 
Hola!

Tengo un par de nuevas dudas sobre unos de los registros del módulo iic del microcontrolador MC9S08QG8.

¿En el registro IICA se pone la dirección del dispositivo que va a ser el esclavo?, en este caso la dirección una pantalla lcd, o ¿qué dirección es la que se pone ahí?

Para iniciar una trasmisión i2c lo primero que hay que hacer es enviar una señar start ,luego la dirección del dispositivo esclavo, y finalmente los datos a trasmitir y mi duda es :
si la dirección del esclavo la tengo que colocar en el registro IICD, que es donde se irá colocando los bytes de datos que vamos a trasmitir, o se coloca en el registro IICA y en IICD se van poniendo los datos que quiero ir trasmitiendo?

Espero que entendais lo que quiero decir.

Un saludo y gracias.
 

Adjuntos

  • IICA.png
    IICA.png
    38.8 KB · Visitas: 9
  • IICD.png
    IICD.png
    90.6 KB · Visitas: 7
Hola a todos.
Estoy intentado escribir en un LCD via I2C (Los que tienen una plaquita con un chip PCF8574).
No he encontrado ninguna librería (Todo para Arduino) que me sirva, así que me he puesto manos a la obra.
Estos LCD funcionan igual que los Hitachi HD44780 de toda la vida en modo 4 BIT, con la diferencia que el PCF8574 se encarga de interpretar los datos recibidos por I2C y escribirlos de forma paralela (8 bit) en el LCD.
El caso es que lo tengo casi resuelto, y digo casi porque los estados que veo en las señales (D4-D7, RS, RW y E) parecen corréctos, pero sin embargo el LCD no muestra nada.

La secuencia que he seguido, tras horas en Google y revisando la librería de Arduino:
Con RS y RW a 0, y haciendo pulso de E con cada dato válido:
INICIALIZACION
- Retardo 1sg.
-> 0x3 (4 bits en D4 a D7)
- Retardo 20 ms. (En la imagen aparecen 10, pero lo he reducido para que cupiera)
-> 0x3
- Retardo 20 ms
-> 0x3
Retardo 20 ms
Hasta aquí se supone que he reseteado el LCD, y queda en modo 8 BIT
-> 0x2
- Retardo 20ms. Tras esto el LCD está en modo 4BIT. Según el Datasheet, con 40 usg. se ejecuta

A partir de aquí comandos (En dos "nibbles" o semibytes, cada uno con un pulso de E):
0x28 (4BIT, 2 líneas, 5x7 puntos)
0x08 (Deshabilito LCD, cursor y parpadeo)
0x0F (Habilito LCD, cursor y parpadeo)
0x07 (Habilito autoincremento hacia +)
0x02 (Vuelta a HOME del cursor)

Tras esto, activo RS (Envio de datos, no comandos) y envío 20 veces 0x45 ('E')

Creo que debería funcionar. ¿Será defectuoso mi LCD?

Adjunto un pantallazo de lo que he capturado en las diferentes señales.
Están todas las señales del LCD. La última, SCL_TRIG, la he cogido del bus (I2C) para el trigger del analizador.

Si a alguien se le ocurre algo, agradecería una respuesta.

P.D.: No tengo problema en compartir la librería (Si consigo que funcione), aunque aviso que no me dedico profesionamente a esto del C y mi programación puede ser bastante ... cuando menos curiosa. La he hecho para un STM32F4 Discovery, usando Chibios con sus librerías HAL en vez de las de STM.
 

Adjuntos

  • BUS_LCD.jpg
    BUS_LCD.jpg
    63 KB · Visitas: 23
no me quedo claro si es para arduino o para otro micro

la idea principal para hacer un LCD en modo serie es el siguiente:
1.- tratar de hacer una libreria que escriba en un puerto de 8 bits
2.-una vez que consigas escribir en el puerto trata de que en lugar de escribir en el puerto se guarde todo el patillaje en un registro de 8 bits como un char.

3.- una vez que logres enviar todo el patillaje al registro trata de reflejar ese registro al puerto
deberia encender la pantalla sin problemas, asi puedes ver que el registro puede ser mapeado a cualquier puerto

4.- trata de enviar un dato por I2c sin problemas

5.- ahora trata de enviar el registro de la LCD por el I2C deberia funcionar
NOTA:

no uses muchos delays por que todo puede estropearse
 
Gracia por tu pronta respuesta.
No es para Arduino sino para ARM (Kit Discovery STM32F4).
Hasta el punto 5 está resuelto, como puede verse en la imagen (Estoy registrando los Estados lógicos de los pines reales en el LCD).
Respecto a los retardos, los he ido incrementando mucho, ya que no he visto en ningún sitio valores máximos. Incluso leído un artículo en el que lo hacen manualmente con interruptores.
 
Atrás
Arriba