TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: aitorsp en 08 de Septiembre de 2010, 08:00:46

Título: No funciona LCD
Publicado por: aitorsp en 08 de Septiembre de 2010, 08:00:46
hola:

El codigo que adjunto funciona  bien en proteus pero en el hardware real no. la lcd se enciende y solo me muestra la primera linea con todos los caracteres en negro en forma de cuadrado. He probado todas las combinaciones posibles de puertos y tampoco. Lo unico que no he hecho es cablear los pines 15 y 16 de la lcd pero esos creo que no se cablean.

un saludo

aitor
Código: [Seleccionar]

#include <16f876a.h>
#fuses XT,NOWDT
#use fast_io(c)
#use delay(clock=4000000)
#define CS PIN_C0
#define LCD_RS PIN_B1
#define LCD_RW PIN_B2
#define LCD_E  PIN_B3
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#include "flex_lcd.c"
int Templ=0;
int Temph=0;
signed int16 Temp16Bits=0;
float decimales=0;
float enteros=0;
int1 banderanegativo=0;
float Temperatura;
void main(){
set_tris_c(0b00010000);
setup_spi(spi_master|spi_l_to_h| spi_ss_disabled);
lcd_init();
//configuracion del sensor en modo continuo
//output_low(CS);
//spi_read(0);//leemos byte alto
//spi_read(0);//leemos byte bajo
//spi_write(0x00);
//spi_write(0xFF);
//spi_read(0);//leemos byte alto
//spi_read(0);//leemos byte bajo
//spi_write(0x00);
//spi_write(0x00);
//output_high(CS);
while(1){
output_low(CS);
Temph=spi_read(0);//obtenemos el Temp alto del registro de temperatura
Templ=spi_read(0);//obtenemos el Temp bajo del registro de temperatura
output_high(CS);
Temp16Bits=make16(Temph,Templ);//convertimos a un registro de 16Bits
banderanegativo=0;
if (Temp16Bits<0){
banderanegativo=1;
Temp16Bits=~Temp16Bits+8;
}//si es negativo lo complementamos a 2 y le sumamos 8
Temp16Bits=Temp16Bits>>3;//descartamos los 3 bits menos significativos
decimales=(float)(Temp16Bits&0b0000000000001111)*0.0625;//damos formato a los decimales
enteros=(float)(Temp16Bits>>4); //damos formato a los enteros, solo descartando los decimales
if (banderanegativo){
Temperatura=-1*(enteros+decimales);
}
else{
Temperatura=(enteros+decimales);
}
printf(lcd_putc,"\f");
lcd_gotoxy(1,2);
printf(lcd_putc,"Temp=%3.4f   \n",Temperatura);
delay_ms(100);
}
}


Título: Re: No funciona LCD
Publicado por: Suky en 08 de Septiembre de 2010, 10:03:09
Que marca de LCD es? Seguramente hay que retocar la inicialización. Busca en el foro sobre problemas con LCD, hay mucho para probar.....


Saludos!
Título: Re: No funciona LCD
Publicado por: aitorsp en 08 de Septiembre de 2010, 10:41:28
Que marca de LCD es? Seguramente hay que retocar la inicialización. Busca en el foro sobre problemas con LCD, hay mucho para probar.....


Saludos!

Hola:

Aqui tienes una imagen de la LCD.

Un saludo

Aitor

(http://img827.imageshack.us/img827/3910/lcd16x2.jpg)
Título: Re: No funciona LCD
Publicado por: manwenwe en 08 de Septiembre de 2010, 10:59:13
Hola aitorsp,

bajo mi experiencia con LCDs te puedo dar algunos consejos:

- Si funciona con Proteus DEBE funcionar con PIC; a no ser que el módulo esté roto: algo poco probable si no no se encendería o simplemente algunos caracteres se verían con menos contraste.
- No puentees el backligth.
- Revisa que todos los cables estén conectados de forma correcta. Muchas veces una conexión erronea envía ciertos comandos y otros no.
- ¿Estás  seguro de que el PIC funciona? ¿El cristal está conectado de forma correcta? ¿le pusiste los condensadores del valor que toca?

Tiene pinta de mala conexión. Yo revisaría el cableado y el reloj con un osciloscopio; tambien probaría el timming con un led parpadeando. Es poco probable que esté roto...

Un saludo.

Título: Re: No funciona LCD
Publicado por: mtristan en 08 de Septiembre de 2010, 11:23:36
.


Citar
- Si funciona con Proteus DEBE funcionar con PIC (...)

Por experiencia se que esto no es cierto, y sobre todo con LCDs, porque el módulo que trae el Proteus está basado un un modelo específico de controlador (que no se bien cuál es, pero me parece que es uno de Hitachi). Así que si tenés un módulo con un controlador distinto, la rutina de inicialización no tiene por qué ser igual, y lo único que terminás viendo es un montón de cuadraditos negros.
El "datasheet" de tu módulo: link (http://www.edu.xunta.es/contidos/premios/innovacion07/mod_b/1p_placa_solar/solar_07_xunta/archivos/sensor_pdf/lcd.pdf). Según esto, el controlador es el ST7066U-0A, así que deberías buscar su datasheet y seguramente ahí te detalle la rutina de inicialización que le corresponde.

¡Saludos!
Título: Re: No funciona LCD
Publicado por: aitorsp en 08 de Septiembre de 2010, 11:35:33
.


Citar
- Si funciona con Proteus DEBE funcionar con PIC (...)

Por experiencia se que esto no es cierto, y sobre todo con LCDs, porque el módulo que trae el Proteus está basado un un modelo específico de controlador (que no se bien cuál es, pero me parece que es uno de Hitachi). Así que si tenés un módulo con un controlador distinto, la rutina de inicialización no tiene por qué ser igual, y lo único que terminás viendo es un montón de cuadraditos negros.
El "datasheet" de tu módulo: link (http://www.edu.xunta.es/contidos/premios/innovacion07/mod_b/1p_placa_solar/solar_07_xunta/archivos/sensor_pdf/lcd.pdf). Según esto, el controlador es el ST7066U-0A, así que deberías buscar su datasheet y seguramente ahí te detalle la rutina de inicialización que le corresponde.

¡Saludos!


Hola:

Quieres decir que tendria que modificar la flex_lcd y concretamente la funcion lcd_init()?

Aitor
Título: Re: No funciona LCD
Publicado por: manwenwe en 08 de Septiembre de 2010, 11:43:07
Dí por hecho que el controlador era compatible con HD44780... Si no es así tendrás que cambiar la rutina de iniciación. No creo que los comandos difieran... pero en fín si me equivoqué una vez es probable q me equivoque 2...XD

Un saludo
Título: Re: No funciona LCD
Publicado por: manwenwe en 08 de Septiembre de 2010, 11:56:07
http://www.sparkfun.com/datasheets/LCD/HD44780.pdf
(pag 45)

http://www.allshore.com/pdf/Sitronix_ST7066.pdf
(pag 20)

Parece la misma secuencia... Ya nos cuentas!

Saludos!
Título: Re: No funciona LCD
Publicado por: Suky en 08 de Septiembre de 2010, 12:51:50
Citar
- Si funciona con Proteus DEBE funcionar con PIC (...)
Por experiencia se que esto no es cierto, y sobre todo con LCDs, porque el módulo que trae el Proteus está basado un un modelo específico de controlador (que no se bien cuál es, pero me parece que es uno de Hitachi). Así que si tenés un módulo con un controlador distinto, la rutina de inicialización no tiene por qué ser igual, y lo único que terminás viendo es un montón de cuadraditos negros.

Exactamente!
Título: Re: No funciona LCD
Publicado por: aitorsp en 08 de Septiembre de 2010, 12:56:45
Citar
- Si funciona con Proteus DEBE funcionar con PIC (...)
Por experiencia se que esto no es cierto, y sobre todo con LCDs, porque el módulo que trae el Proteus está basado un un modelo específico de controlador (que no se bien cuál es, pero me parece que es uno de Hitachi). Así que si tenés un módulo con un controlador distinto, la rutina de inicialización no tiene por qué ser igual, y lo único que terminás viendo es un montón de cuadraditos negros.

Exactamente!

Hola:

Y ninguno de vosotros ha utilizado este tipo de controlador?. He probado de todo y me siguen apareciendo los cuadrados negros.
Un saludo

Aitor
Título: Re: No funciona LCD
Publicado por: Suky en 08 de Septiembre de 2010, 14:03:30
Revisaste el hardware? En otros tantos hilos se habla de que hay que revisar cuando no anda el LCD.
Título: Re: No funciona LCD
Publicado por: aitorsp en 08 de Septiembre de 2010, 14:12:18
Revisaste el hardware? En otros tantos hilos se habla de que hay que revisar cuando no anda el LCD.

Hola:

si que lo revise. Posiblemente sea lo que comentan algunos compañeros sobre el controlador y la inicializacion. Como ultimo recurso me comprare una LCD con el controlador adecuado.

un saludo

aitor
Título: Re: No funciona LCD
Publicado por: mtristan en 08 de Septiembre de 2010, 14:15:30
.


A simple vista las inicializaciones solamente difieren en una instrucción. Fijate en los datasheets que buscó manwenwe, y cambiale esa partecita, a ver si anda.
Saludos.

Título: Re: No funciona LCD
Publicado por: aitorsp en 09 de Septiembre de 2010, 11:08:12
Hola:

A grandes males, grandes remedios asi que he conseguido una LCD compatible con la flex_lcd. Pero como no podia ser de otra manera, algo tenia que fallar. esta vez se trata de que no se me enciende el display pero si que muestra los caracteres tal como muestra la foto a continuación. Está hecha con flash en la camara asi que no es que haya luz de fondo (precisamente ese es el problema) sino que solo muestra los caracteres. ¿Alguna idea de que puede ser?.El modelo de LCD es LMB162A

Un saludo

Aitor

(http://img228.imageshack.us/img228/3928/lcdazul.jpg)

Título: Re: No funciona LCD
Publicado por: manwenwe en 09 de Septiembre de 2010, 11:44:33
esta vez se trata de que no se me enciende el display pero si que muestra los caracteres tal como muestra la foto a continuación.

Si te refieres al backligth: tienes que alimentar entre los pines 15 y 16 con la tensión y corriente que te indique el datasheet. Por cierto... yo le pondría regularía el contraste (pin 3: de VSS a VDD) porque no se acaba de ver del todo nítido.

Saludos.
Título: Re: No funciona LCD
Publicado por: Suky en 09 de Septiembre de 2010, 11:48:15
Por cierto... yo le pondría regularía el contraste (pin 3: de VSS a VDD) porque no se acaba de ver del todo nítido.

... A eso me refería cuando decía que tenia que leer otros hilos que tratan sobre el tema  :? En muchos de ellos se comenta que revisar cuando falla, y el colocar el control de contraste, ect...


Después el tema de la iluminación de fondo es lo que comenta  manwenwe, alimentar los pines 15 y 16 de forma correcta, con su resistencia para limitar la corriente según datos del datasheet.

Saludos!


Título: Re: No funciona LCD
Publicado por: aitorsp en 09 de Septiembre de 2010, 12:21:42
Por cierto... yo le pondría regularía el contraste (pin 3: de VSS a VDD) porque no se acaba de ver del todo nítido.

... A eso me refería cuando decía que tenia que leer otros hilos que tratan sobre el tema  :? En muchos de ellos se comenta que revisar cuando falla, y el colocar el control de contraste, ect...


Después el tema de la iluminación de fondo es lo que comenta  manwenwe, alimentar los pines 15 y 16 de forma correcta, con su resistencia para limitar la corriente según datos del datasheet.

Saludos!




Hola:

Ummm...segun el datsheet se conecta directamente a +5V el anodo y el catodo a tierra sin resistencia. Eso es que lleva resistencia limitadora interna?.

Un saludo

Aitor

(http://img836.imageshack.us/img836/8113/backlight.png)
Título: Re: No funciona LCD
Publicado por: aitorsp en 09 de Septiembre de 2010, 12:52:02
Hola:

Al final le puse la resistencia limitadora y funciona perfectamente  :-/  :-/

gracias por las respuestas

Aitor
Título: Re: No funciona LCD
Publicado por: manwenwe en 09 de Septiembre de 2010, 15:18:10
Enhorabuena! Ad+ tuviste suerte en no quemar el backligth sin la resistencia...

Yo tb aprendí que no todos los LCD llevan el famosillo controlador de HITACHI o compatible.

Saludos
Título: Re: No funciona LCD
Publicado por: aitorsp en 09 de Septiembre de 2010, 17:08:47
Enhorabuena! Ad+ tuviste suerte en no quemar el backligth sin la resistencia...

Yo tb aprendí que no todos los LCD llevan el famosillo controlador de HITACHI o compatible.

Saludos

Hola:

segun el datasheet no hace falta la resistencia aunque yo por costumbre y como bien dices, por precaución siempre las pongo.

Un saludo

Aitor
Título: Re: No funciona LCD
Publicado por: pwll en 10 de Diciembre de 2011, 21:45:23
Hola a todos,
Espero aportar algo:

-Los LCD comunes venidos del Asia, tienen rutinas en comun, salvo la rutina de inicialización (comparen los datasheets, solo varia la rutina de inicialización).
-Por lo general existen dos tipos de controlador: HD44780A-Hitachi y ST7066U-Sitronix.
-En proteus, solo funciona con rutinas de incializacíon del controlador HD44780A, ya el otro no funciona porque no esta implementado.
-En hardware fisico, ambas rutinas funcionan correctamente.
-Recomendación: Hagan sus programas normalmente con las rutinas de Hitachi para las simulaciones en Proteus. Al momento de grabarlos en el PIC, solo modifiquen la rutina de inicialización del LCD deacuerdo al controlador que tenga (HD44780A ó ST7066U).
-En el mercado existen varias marcas de LCD, pero estan hechos con base en "controladores" HD44780A o ST7066U.

Con respecto al BackLight:  si notan en el impreso veran que algunos LCD tienen una resistencia superficial instalada, solo que falta soldarlo (puentearlo con soldadura, es un "jump" en placa)... entonces habilitando este resistor ya no es necesario usar resistor externo...

Abrazo