Programación Específica > Programación en C
Lcd Hitachi 44780
roseta:
Hola,
Primero daros la gracias por contestar a mi POST. Quzá la pregunta sea un poco tonta pero el el programa q enviaste(lcd.h) es para un display de 4bits de datos no??Entonces lo que tengo q hacer es aplicarlo con un LCD de 8 bits, no??O sea, la función send_nibble puede ser directamente de 8 bits, no?? Me parece que mi compilador no reconoce la variable byte(puede ser??). Y también tengo problemas con el boolean dentro la estructura. Sabéis como puedo arreglar esto?? Declarando boolean como variable?? Tengo que declarar tb la estructura?? Qué hago con el Byte??
Bueno, perdonad por las múltiples preguntas que os hago. Supongo que las podre ir reparando yo misma con el tiempo..
oid init_lcd()
{
port_lcd.lcd_rs = 0;
port_lcd.lcd_e = 0;
delay_ms( 60 );
lcd_send_nibble( 3 );
delay_ms( 20 );
lcd_send_nibble( 3 );
delay_ms( 20 );
lcd_send_nibble( 3 );
delay_ms( 20 );
lcd_send_nibble( 2 );
No estiendo esta parte del código a la hora de inicializar?? Pq 4 veces la funcion send_nible???
Muchísimas gracias!!!
Nos vemos!!
Huguen_aus_Tirol:
Hola Roseta!
Si usas el LCD en modo 8 bits, nada más tienes que escribir los 8 bits en el puerto y listo; no necesitas de send_nibble(). Tambien vas a tener que modificar el valor de un bit al inicializar el LCD, para indicar que trabaje en 8 bits (lo encontraras en la hoja de datos)
No se que compilador usas, pero prueba reemplazar la declaración byte por int, o int8. En el caso del bool no se que decir ahora; pero seguro que el compilador tiene ayuda y allí encontrarás como declarar las variables.
Por qué 4 veces? Bueno, es algo que encontré en una de las tantas hojas de datos que bajé, lo hize así y me funcionó sin problemas (primero no había funcionado). Por qué, no lo se... :(
Saludos, y suerte!
roseta:
Hola,
Muchas gracias por haberme ayudado. El display continua sin funcionar pero espero que algun día de estos funcione (esto del pic es desesperante).
Tengo una pregunta tecnica y he pensado haber si m podeis ayudar.
Mi pic(18F458) funciona a 40MHz, y yo calculé que una instruccion duraba 25.6 us.
No se si está bién. Otra cosa que quisiera saber es si el tema del prescaler afecta al timpo de una instruccion. Diria que no, q afecta a temas de timer y eso, pero ya no se que mirar.
Lo del send nibbe, me limite a poner q PORTD=dat(en hexadecimas de 8 bits) y hacer un strobe con el enable.
Bueno, muchísimas gracias por todo!!!
Adios!!!
Huguen_aus_Tirol:
Hola Roseta!
Bueno, si usas un cristal de 40MHz, cada instruccion que se ejecute en un ciclo necesita solo de 25nseg (es la inversa de la frecuencia del cristal por 4)
Es muy probable que el problema del display venga por alli, hay tiempos que se deben respetar para que el LCD procese la informacion. Incluso en los pulsos de strobe y enable (fijate en la hoja de datos)
No se a que prescaler te refieres, pero ninguno afecta al tiempo de instruccion, es fijo y depende del cristal.
Sigue probando, que ya lo haras funcionar!
Saludos
Navegación
[*] Página Anterior
Ir a la versión completa