Hace poco, me di
cuenta que un familiar se estaba deshaciendo de un par de celulares que
consideraba obsoletos por ser un modelo muy viejo y básico, aunque funcionaban
perfectamente. Así que vi mi oportunidad de rescatarlos del bote de basura para
tratar de reutilizar algunas de sus partes. Lo primero que revise del par de
teléfonos idénticos, fue la marca y modelo, los cuales resultaron ser Nokia modelo 1208b.
Desde hace mucho
tiempo sabía que se podían utilizar las pantallas de ciertos celulares, siempre
y cuando se tenga la hoja de datos del controlador que incorporan, convenientemente
en la red se encuentra mucha información sobre el manejo del LCD de algunos
modelos de celulares Nokia, específicamente del modelo 6100. Desafortunadamente del modelo 1208b no hay mucho que
encontrar. La poca información que encontré
es que el controlador de dicho LCD es el chip LDS184 de acuerdo a una lista que indica las características
de las pantallas de varios celulares, esta lista me parece muy buena pese que
algo de texto se encuentra en Ruso, se las comparto al final de esta entrada.
Para mi mala
suerte tampoco pude encontrar la hoja de datos del chip en cuestión, pero
investigando más encontré este vídeo www.youtube.com/watch?v=y3UOGYaFeBk, donde confirme que el chip LDS184
es compatible con el chip PCF8833, del cual hay mucha información en la
red.
Ya teniendo la
suficiente información para manejar el LCD, el siguiente paso fue identificar la
función de cada pin del conector SMD de la pantalla, para esto utilicé un
analizador lógico. El resultado fue el siguiente.
Después realice
el circuito para poder utilizarlo a partir de una fuente de 5V y con niveles de
control TTL. Como el controlador del LCD puede trabajar con una tensión máxima
de 3.3V es necesario colocar un regulador para esta tensión, como no tenía un
regulador para tal tensión, utilicé dos reguladores variables LM317LZ, uno
para el controlador y el otro para alimentar el LED de la iluminación, en el
que la tensión puede estar entre 6 a 7 Volts.
Y así fue como
quedo el modulo LCD-Nokia1208, una
de las cosas más difíciles fue el soldar los conductores al conector SMD,
debido al pequeño tamaño y a la poca separación; siendo muy cuidadoso conseguí soldar
los alambres. Como se darán cuenta en las imágenes el conector al cual soldé
los alambres fue al que se utiliza como una extensión entra la pantalla y la
placa de circuitos.
Ahora sí, llego
la hora se probar el modulo. Tomando de referencia la librería escrita en el
compilador mikroC PRO para la pantalla
del celular Nokia 6610 de esta página microcontrolandos.blogspot.mx/2013/06/pic-nokia-6610.html, que por cierto tiene librerías muy
interesantes, la modifique y adapte para el compilador PCW de CCS. Pensaran
porque no trabajar directamente en el primer compilador, la razón es porque la
mayoría de mis proyectos los tengo en CCS, por lo tanto me favorece que la
librería se encuentre en este lenguaje. Aclaro que esta librería esta
configurara para trabajar con el LCD del Nokia 1208b con 8 bits por color, pero
puede configurarse fácilmente para otro modelo compatible con el chip PCF8833,
la modificaciones radican en la forma en que se escribe en la memoria RAM
usando el comando MADCTL.
El primer
ejemplo que presento utiliza todas las funciones de la librería como
demostración. Además se imprime una imagen con el icono del compilados PCW, generada
con el programa Nokia Image Converter
también desarrollado por el autor de la pagina anterior, igualmente lo modificamos ligeramente para que admita
imágenes de menor tamaño a 132x132 píxeles pero mayores a 29x29 píxeles.
void main() { char msg1[]="Font6x8"; char msg2[]="Font8x8"; char msg3[]="Font8x16"; setup_adc_ports(AN0_TO_AN2|VSS_VDD); setup_adc(ADC_CLOCK_DIV_32); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_16,249,1); setup_timer_3(T3_INTERNAL|T3_DIV_BY_1); setup_ccp1(CCP_OFF); setup_ccp2(CCP_OFF); set_pwm1_duty(pwm1); set_pwm2_duty(pwm2); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_RTCC); disable_interrupts(INT_TIMER1); enable_interrupts(INT_TIMER3); enable_interrupts(INT_EXT); disable_interrupts(GLOBAL); // TODO: USER CODE!! PCF8833_Init(); While(1){ PCF8833_Fill(BLANCO,0,0,97,69);//98 pixeles horizontales y 70 verticales PCF8833_Line(0,0,97,69,AZUL); PCF8833_Set_Pixel(5,10,AZUL); PCF8833_Write_Char('C', 5, 15, FONT6x8,NEGRO,ROJO); PCF8833_Write_Text(msg1, 5, 24, FONT6x8, ROJO, GRIS); PCF8833_Write_Text(msg2, 5, 37, FONT8x8, CAFE, AMARILLO); PCF8833_Write_Text(msg3, 5, 50, FONT8x16, BLANCO, NARANJA); PCF8833_Circle(90,10,5, AZUL); PCF8833_Rect(80,20,90,25, VERDE); PCF8833_Rect_Fill(80,30,90,35,VERDE,AZUL ); PCF8833_Circle_Fill(85,50,10,45 , ROJO, AZUL); delay_ms(1500); PCF8833_Image(); delay_ms(6000); } }//FIN MAIN
El segundo
ejemplo se trata de un pequeño osciloscopio, en este caso muestra una señal de
un rectificador de media onda con una frecuencia cercana a los 5 kHz.
void main() { int8 i; int8 Y[100]; float Vprom=0; char msg1[]="Vprom="; char Volts[5]; setup_adc_ports(AN0_TO_AN2|VSS_VDD); setup_adc(ADC_CLOCK_DIV_8); setup_spi(SPI_SS_DISABLED); setup_wdt(WDT_OFF); setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1); setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); setup_timer_2(T2_DIV_BY_16,249,1); setup_timer_3(T3_INTERNAL|T3_DIV_BY_1); setup_ccp1(CCP_OFF); setup_ccp2(CCP_OFF); set_pwm1_duty(pwm1); set_pwm2_duty(pwm2); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); enable_interrupts(INT_RTCC); disable_interrupts(INT_TIMER1); enable_interrupts(INT_TIMER3); enable_interrupts(INT_EXT); disable_interrupts(GLOBAL); // TODO: USER CODE!! PCF8833_Init(); While(1){ PCF8833_Fill(BLANCO,0,0,97,69);//98 pixeles horizontales y 70 verticales PCF8833_Line(1,3,1,52,NEGRO); //Linea del eje Y PCF8833_Line(1,53,97,53,NEGRO); //Linea del eje X PCF8833_Write_Char('X',90,55, FONT6x8,AZUL,BLANCO); PCF8833_Write_Char('Y',3,3, FONT6x8,AZUL,BLANCO); for(i=0;i<96 ;i++){ //Captura de muestras set_adc_channel(0); delay_us(1); Y[i]=READ_ADC(); } for(i=0;i<96 ;i++){ //Mostrar las capturas PCF8833_Set_Pixel(i+2,(53-(int8)(Y[i]*0.196)),ROJO); Vprom=Vprom+Y[i]; } Vprom=(Vprom/96)*5/255; sprintf(Volts,"%f",Vprom); PCF8833_Write_Text(msg1, 1, 60, FONT8x8, CAFE , GRIS); PCF8833_Write_Text(Volts, 49, 60, FONT8x8, VERDE, GRIS); delay_ms(2000); } }//FIN MAIN
Para concluir,
les digo que con un poco de trabajo podemos armar un módulo LCD gráfico sin
tener que gastar mucho dinero, pues como les reitero estos los obtuve gratis,
pero si no tienen un conocido que les pueda donar su celular, pueden recurrir a
un tianguis donde los precios de celulares “antiguos” son bastante cómodos, ya
he visitado estos lugares y he encontrado celulares en venta por menos de 2
dólares. De esta forma podremos utilizar estas pantallas para cualquier
proyecto que lo requiera, en mi caso estoy considerando emplearlo para una
fuente de poder digital con función de cargador de baterías universal, que me
encuentro desarrollando y que por supuesto la compartiré por este medio.
Sin más que
decir les comparto la biblioteca, los ejemplos, el programa Nokia Image
Converter, la hoja de datos del PCF8833 y la lista de los controladores de las
pantallas de celulares, que gracias a ella mi próxima víctima será el Alcatel
OT557 muuaajaja, hasta pronto...