Compré un par de controladores LCD / I2C y he estado tratando de hacer que la cosa se inicialice. Soy capaz de comunicarme con el controlador I2C sin problemas, pero obtener la secuencia de inicialización correcta ha demostrado ser un verdadero dolor.
Este es el módulo y la pantalla LCD que tengo: LCD y controlador
La pantalla LCD se muestra como tipo 2004A
y tiene J204A
grabado en la parte posterior.
He leído que este controlador en particular utiliza el modo LCD de 4 bits y tiene las siguientes conexiones físicas al módulo LCD (desde el enlace anterior).
Del esquema, puedes derivar eso:
P0: RS
P1: RW
P2: CS
P3: BL
P4: D4
P5: D5
P6: D6
P7: D7
Teniendo en cuenta que las tramas de datos se envían (descuidando el ACK, inicio y parada) MSB, supongo que la MSB del byte cambiado a este dispositivo se representa en su salida como P7 (no pude encontrarlo directamente en el hoja de datos, pero después de un poco de prueba parece cierto).
Ahora, con todo eso a un lado y después de dirigir con éxito (y recibir un bit ACK) desde el controlador I2C, se debe inicializar el módulo LCD en modo de 4 bits y configurar otros parámetros; aquí es donde estoy completamente atascado.
He escrito la siguiente secuencia de inicio que simplemente no funciona:
void lcdInit(void){
_delay_ms(20);
//D7 D6 D5 D4 BL CS RW RS
// x x x x 1 1 0 0 = XC (hex)
i2c_write(0x2C); _delay_us(4200);
i2c_write(0x8C); _delay_us(4200); //0x28
i2c_write(0x2C); _delay_us(120);
i2c_write(0x8C); _delay_us(120); //0x28
i2c_write(0x2C); _delay_us(50); //0x28
i2c_write(0x8C); _delay_us(50); //4 bit mode, N=1(2lines), F=0(5x8)
i2c_write(0x0C); _delay_us(50); //0x06
i2c_write(0x6C); _delay_us(50); //I/D=1(increment), S=0(display shift off)
i2c_write(0x0C); _delay_us(50); //0x0C
i2c_write(0xCC); _delay_us(50); //Display on, cursor off, blink off
i2c_write(0x0C); _delay_us(1700); //clear display
i2c_write(0x1C); _delay_us(1700); //0x01
}
Sé que cada byte enviado tiene el formato correcto (es decir, 0 0 1 DL N F X X), pero no se dijo nada con respecto al orden de dichas declaraciones.
Esta secuencia parecía la más lógica:
Conjunto de funciones (4 bits)
Modo de entrada (desplazamiento, etc.)
Comandos (variables de estado)
¿Alguna idea?