Autor Tema: LCD via I2C con PCA9554  (Leído 4776 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
LCD via I2C con PCA9554
« en: 02 de Noviembre de 2013, 14:49:57 »
Muy buen dia a todos

Quisiera saber si alguno a trabajado con un LCD de 2X16 via I2C con un expansor de puertos PCA9554, he leido todos los post existentes acerca de tema, aunque los que han trabajado con expansor de puertos I2C es con el PCF8574 (que es completamente compatible pin a pin con el que yo uso, pero no se si tenga alguna caracteristica que no le permita ser 100% compatible), e incluso existe una libreria que ya he probado y no me funciona.

Por lo cual me di a la tarea de leer el datasheet del controlador HD44780, e intentar realizar una pequeña libreria que me permitiera usar el lcd con el expansor de puertos PCA9554, pero no lo he logrado.

Entonces mi situacion es la siguiente:
   -El expansor me trabaja correctamente, leo y escribo cualquier pin sin problema
   -Uso un PIC pequeño (buscando aprobechar los expansores de puertos que tengo y aprender en el proceso) el 12F683
   -Lenguaje C, con el compilador CCS v5.013
   -El lcd lo tengo conectado tal como indica la libreria que esta en este fantastico foro, es decir, pines de datos del lcd (DB4,DB5,DB6,DB7) a los pines P4,P5,P6,P7 respectivamente del expansor, el bit R/W a
    GND, RS a P1,y E a P0 (aunque tambien he probado RS a P0, R/W a P1, E a P2 y nada), quedan sin utilizar P2 y P3 del expansor
   -Resistencias de 10K en el bus I2C
   -Oscilador interno a 8Mhz en el PIC (aunque he probado con un cristal externo de 4Mhz y nada)
   -Programando el PIC con el PICKIT 3
   -Realice una simple rutina de inicializacion guiandome, con el datasheet del controlador del lcd, pero creo que algo no estoy haciendo nada bien porque a pesar de que he probado de mil y una formas
    (cambiando tiempos, opciones de configuracion, conexiones fisicas distintas, y un largo etc etc) no he logrado siquiera inicializar y borrar la pantalla

Lo que quisiera lograr es:
   -Que el bendito LCD inicialice y borre la pantalla, eso es todo lo que quisiera para empezar jaja

Coloco el codigo con el que he estado probando:

Código: [Seleccionar]
#include<12f683.h>
#fuses INTRC_IO,MCLR,NOWDT,PUT
#use delay(clock=8Mhz)

#use I2C(master,scl=PIN_A5,sda=PIN_A4,force_sw,slow)

#include"i2c.h"

void main(void)
{
   delay_ms(20);
   write_expansor(CFGEXPANSOR,0b00000000);
   write_expansor(POLAEXPANSOR,0b00000000);
   write_expansor(OUTEXPANSOR,0b00000000);

   write_expansor(OUTEXPANSOR,0b00110100); //Funcion Set 8bits
   delay_ms(4); //Esperamos (deberia ser 4.1ms)
   delay_us(100);
   write_expansor(OUTEXPANSOR,0b00110100); //Funcion Set 8bits
   delay_us(100); //Esperamos 100us
   write_expansor(OUTEXPANSOR,0b00110100); //Funcion Set 8bits
   delay_ms(5);
   write_expansor(OUTEXPANSOR,0b00100100);
   write_expansor(OUTEXPANSOR,0b00100100);
   write_expansor(OUTEXPANSOR,0b10000100);
   write_expansor(OUTEXPANSOR,0b00000100);
   write_expansor(OUTEXPANSOR,0b10000100);
   write_expansor(OUTEXPANSOR,0b00000100);
   write_expansor(OUTEXPANSOR,0b00010100);
   write_expansor(OUTEXPANSOR,0b00000100);
   write_expansor(OUTEXPANSOR,0b01100100);

      while(true)
      {
     
      }
}

En la libreria i2c.h tengo mis rutinas para el manejo del Expansor que como ya mencione, funciona bien.

Ojala alguien me ayude un poco, por lo pronto seguire intentando, muchas gracias a todos.
 
« Última modificación: 02 de Noviembre de 2013, 14:52:26 por thegame »
Nunca se deja de aprender

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #1 en: 03 de Noviembre de 2013, 02:57:37 »
Bueno, he estado todo el dia dandole, y solo he logrado que se active la segunda linea del lcd, es decir, cuando lo alimentamos normalmente solo se ve la primera linea del lcd con recuadros, bueno pues ahora si se me activan las dos, pero no apaga, ni limpia el lcd.... :x

Sospecho que es o un problema de tiempos o la forma en la que envio los datos, y es que no me queda muy claro lo siguiente:



Uploaded with ImageShack.us

los comandos encerrados en rojo, ¿Deben o no, llevar un delay entre cada uno?, es decir, los envio uno tras otro tal cual o debo darle un tiempo despues de cada par de comandos?????

Lo he intentado de varias formas y no logro terminar la inicializacion... :( :( :(

gracias
Nunca se deja de aprender

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #2 en: 03 de Noviembre de 2013, 15:28:22 »
Hola

Un favor podria alguien decirme cual es el resultado visual en el LCD la intruccion lcd_init() (por ejemplo con la libreria flex_lcd).

Es decir, si solo lo inicializan, que les aparece en el display o en que estado queda????

muchas gracias.
Nunca se deja de aprender

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: LCD via I2C con PCA9554
« Respuesta #3 en: 03 de Noviembre de 2013, 16:50:08 »
no aparece nada... comprobado
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #4 en: 04 de Noviembre de 2013, 16:18:55 »
 :? :? eso me temia, entonces no estoy terminando la inicializacion correctamente, ok gracias, sigo intentando.
Nunca se deja de aprender

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #5 en: 06 de Noviembre de 2013, 10:47:51 »
Aun sin resultados  :? , alguna idea???

saludos
Nunca se deja de aprender

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #6 en: 07 de Noviembre de 2013, 11:54:47 »
Ok pues he seguido intentando y no he encontrado la solucion aun a mi problema, comienzo a pensar que estos dos expansores (PCA9554 y PCF8574) solo son compatibles en pinout pero no del todo en funcionamiento.

Ojala alguien me de una idea  :(

Saludos
Nunca se deja de aprender

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #7 en: 08 de Noviembre de 2013, 00:08:03 »
hasta ahora he probado poniendo el lcd a 4 y 8 bits y nada, esto es lo que pongo para inicializar a 8 bits

Código: [Seleccionar]
//Primera instruccion
write_pca9554(OUTEXPANSOR,0x30);
on_off();
delay_ms(5);
//Segunda instruccion
write_pca9554(OUTEXPANSOR,0x30);
on_off();
delay_us(120);
//Tercera instruccion
write_pca9554(OUTEXPANSOR,0x30);
on_off();
delay_ms(45);
//Cuarta instruccion
write_pca9554(OUTEXPANSOR,0x38);
on_off();
delay_us(50);
//Quinta instruccion
write_pca9554(OUTEXPANSOR,0x08);
on_off();
delay_us(50);
//Sexta instruccion
write_pca9554(OUTEXPANSOR,0x01);
on_off();
delay_ms(50);
//Ultima instruccion
write_pca9554(OUTEXPANSOR,0x06);
on_off();
delay_us(50);

Resultado: la pantalla se pone gris, es decir se ponen todos los recuadros de las dos filas pero no se borra la pantalla.

Nadie puede sugerirme algo???

gracias.
Nunca se deja de aprender

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: LCD via I2C con PCA9554
« Respuesta #8 en: 08 de Noviembre de 2013, 19:56:24 »
Como no amigo no faltaba mas  :D
Aqui tienes lo que buscas  ;-)
O al menos es una gran ayuda  :D

Saludos

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #9 en: 09 de Noviembre de 2013, 02:30:15 »
jajaja gracias RALF2 de echo ya lo habia leido, el detalle es que el expansor que estoy tratando de usar es el que me da problema.

tengo dos teorias

1ra: el expansor al momento de energizarse envia todo el puerto a 0xFF hasta que le doy la instruccion de configurar es que cambia el estado, no se si el lcd malinterprete ese estado inicial del lcd y sea por eso que se inicializa mal.

2da: estoy emulando el protocolo i2c, y no se eso le cause algun problema, lo raro es que ya he colocado una memoria 24C02, un rtc DS1307 y un sensor de temperatura TC74 emulando el protocolo y todo funciona ok, e incluso el expansor me responde a escritura y lectura, pero nada de poder inicializar el lcd.

He pedido los PCF8574 y probare, asi como pondre tambien un PIC con el modulo I2C por HW, haber si hay cambio (aunque lo dudo).

Sigo creyendo que el PCF8574 y el PCA9554 no son 100% compatibles

No me dare por vencido seguire intentando

saludos.
Nunca se deja de aprender

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: LCD via I2C con PCA9554
« Respuesta #10 en: 10 de Noviembre de 2013, 05:24:56 »
Fíjate que el puerto del LCD es bidireccional. Escribe y lee... me ha pasado alguna vez tener el puerto de la pantalla declarado como fast_io y no funcionar
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #11 en: 11 de Noviembre de 2013, 02:54:13 »
hola ppyote, sabes el detalle esta en que yo uso un expansor de puertos, el PCA9554, no el puerto en si del PIC, y puedo escribir y leer en el expansor sin problema, pero no logro inicializar el lcd, estan a punto de llegarme los PCF8574 (el expansor de puertos para el que si hay librerias) probare y comento si se pudo o no y asi salimos de dudas si es o no totalmente compatible el PCA9554 con el PCF8574.

de echo hice una consulta en texas instruments preguntando por la compatibilidad de ambos expansores, pero no he tenido respuesta  :?

por el momento estoy a la espera para probar con el otro expansor y ya comentare que paso.

gracias.

P.D. vi tu trabajo con la pantalla TFT, muy bueno  ((:-))
Nunca se deja de aprender

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: LCD via I2C con PCA9554
« Respuesta #12 en: 11 de Noviembre de 2013, 06:55:41 »
lo que yo digo, es que el lcd también tiene que leerse en algunos momentos, revisa la librería de flex_lcd y veras a lo que me refiero
el expansor tiene que cambiar su direccionamiento en algunos momentos para habilitar la lectura de los datos que recibes desde el mismo lcd
te voy a poner unas lineas y veras...

este trozo de codigo esta sacado de la libreria de flex_lcd, decir que trabaja a 4 bits, algo diferente a lo que tu estas haciendo

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
  int8 retval;
  // Create bit variables so that we can easily set
  // individual bits in the retval variable.
  #bit retval_0 = retval.0
  #bit retval_1 = retval.1
  #bit retval_2 = retval.2
  #bit retval_3 = retval.3

  retval = 0;

  output_high(LCD_E);
  delay_cycles(1);

 retval_0 = input(LCD_DB4);
  retval_1 = input(LCD_DB5);
  retval_2 = input(LCD_DB6);
  retval_3 = input(LCD_DB7);


  output_low(LCD_E);

  return(retval);
}
#endif

por cierto, me alegro que te gustara mi trabajo con la tft...a ver si me animo un dia y cuelgo todo el proyecto....
« Última modificación: 11 de Noviembre de 2013, 07:15:23 por ppyote »
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado thegame

  • PIC18
  • ****
  • Mensajes: 439
    • Mcu Tronics
Re: LCD via I2C con PCA9554
« Respuesta #13 en: 11 de Noviembre de 2013, 15:20:43 »
A claro, también lo intente sin resultados,pero también en el datasheet del controlador HD44780 menciona que si no se lee el bit de BF (busy flag) se debe esperar un poco mas a que la instrucción termine, e leído en varias partes que se debe esperar mas o menos un 10% mas de lo que dura la instrucción y que no debe haber problema.

seguiré intentando y comparare cuando me llegue el otro chip, agradezco mucho la ayuda, y ojala te animes a publicar tu proyecto que la verdad esta muy interesante y muy bien echo, felicidades por ello.

saludos desde Morelia
Nunca se deja de aprender

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: LCD via I2C con PCA9554
« Respuesta #14 en: 11 de Noviembre de 2013, 19:30:20 »
hoy he pedido unos cuántos expansores como los que tú tienes, cuando lleguen, intentaré utilizarlos para control de un lcd ya que tengo una cosa entre manos  :mrgreen:
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...


 

anything