Haz una pregunta
  Foros de Electrónica > Diseño digital > Microcontroladores y sistemas embebidos

Discusiones similares

03-feb-2012 #1
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
[APORTE] Control de LCD con 1 solo pin del PIC
En estos tiempos me estoy dedicando a un proyecto más o menos grande que tengo que presentar, y ya que los pines en los microcontroladores son un bien preciado, he decidido construir una controladora para displays LCD que se controla con un único pin.
La ventaja de esta controladora está más que clara, en vez de utilizar los 6 pines mínimos necesarios para el control del LCD, utilizamos 1, y liberamos el resto. Además, en el pic principal no tenemos que cargar la librería del LCD, lo que ahorra mucha memoria.

Características del controlador:
- CPU -> 16f628A
- Control por puerto RS232
- 5 comandos disponibles
- Control de brillo del backlight por software

Adjunto todo lo necesario para la simulación, el código fuente del controlador, un archivo de ejemplo, y el DNS de proteus.

Un abrazo a todos, y suerte en la vida
Miniatura de Adjuntos
Esquema.jpg  
Archivos Adjuntos
Tipo de Archivo: rar Controlador LCD 1 pin V2.0.rar (126,3 KB (Kilobytes), 103 visitas)

Última edición por arrivaellobo; 04-feb-2012 a las 09:02
Citar
03-feb-2012 #2
dinoelectro

<phrase 1=

Ubicación: ecuador
Mensajes: 268
muy bueno!!! felicitaciones
Citar
04-feb-2012 #3
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
Gracias dino!
Dejo por aqui el pcb del controlador, diseñado en Ares.

Un saludo!
Miniatura de Adjuntos
3D 1.png   3D 2.png   pcb.png  
Archivos Adjuntos
Tipo de Archivo: rar Controlador LCD PCB.rar (21,0 KB (Kilobytes), 20 visitas)
Citar
04-feb-2012 #4
dinoelectro

<phrase 1=

Ubicación: ecuador
Mensajes: 268
gracias!! LO vOY A CONSTRUIR..

OTRA VENTJA que le veo es el ahorro de espacio en el PCB ya que por lo general los LCD forman una telarraña a la hora de rutear jejeje

y no has investigado si se puede hacer lo mismo con un pic mas economico??
Citar
04-feb-2012 #5
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
Se podría hacer el controlador con casi cualquier pic, que tenga suficiente memoria y pines, y que disponga de puerto UART. Además, sería interesante que tuviera oscilador interno, para conseguir un pcb más pequeño.
En Ecuador no se qué pic es más barato con éstas características.
Cual recomiendas?
Citar
04-feb-2012 #6
asherar

<phrase 1=

Ubicación: Bs. As. - Argentina
Mensajes: 954
Hola arrivaellobo

Muy buena idea hacer una 'DPU', para controlar el LCD separado del resto.

Podrías enumerar las funciones que controlan los 5 comandos ?
(Disculpá pero, como no uso el proteus, no pude leer tus doc.)

Saludos

Última edición por asherar; 05-feb-2012 a las 05:18
Citar
04-feb-2012 #7
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
En el rar del primer post está el archivo "controlador.c". Está escrito en el compilador CCS, y al inicio del archivo viene explicado su uso y la lista de comandos. De todas maneras te pongo aquí la manera de utilizar el controlador:

Código:
/**************************************************************************************
***************************************************************************************
**             Controlador de display LCD con 1 pin V2.0
**             Programador: Cristian Lobo (arrivaellobo)
**             
**  Funcionamiento:
**     Despues de construir el controlador y grabar el 
**     .hex en el pic, puedes controlar el LCD por
**     medio del puerto RS232 de tu proyecto principal.
**     Incluye al inicio de tu código la sentencia:
**          
**     #use RS232(stream=lcd, baud=9600, bits=8, parity=N, xmit=PIN_XX, rcv=PIN_XX);
**
**     Esto crea un puerto serie, con stream de datos llamado lcd.
**     Para enviar comandos y datos al controlador, utiliza la función fprintf(lcd, "");
**     El comando se envía al inicio de la cadena de texto. Los datos se colocan despues de éste comando.
**
**     Comandos disponibles:
**          F --> Borra el display y se situa en (1,1). Es necesario esperar 3ms despues de ejecutar este
**                comando para que el controlador esté listo.
**          W --> Escribe el texto situado despues de la W en la posicion actual del cursor
**          N --> Borra el LCD y escribe el texto situado despues de la N en la posicion (1,1)
**          G --> Equivale a lcd_gotoxy(x,y). Despues de la G coloca dos digitos, carácter y línea respectivamente.
**          B --> Controla el brillo del backlight. Despues de la B escribe un número de 0-9.
** 
**          Ejemplo de uso:
**             Al inicio del programa queremos que el display tenga un brillo del 50%, que muestre "Hola caracola",
**             y que tras 1 segundo borre el display, brillo del 20% y escriba en (5,2) 16f628.
**
**             const char pic[8]="16f628";
**             delay_ms(50);
**             fprintf(lcd, "B5");
**             delay_ms(3);
**             fprintf(lcd, "NHola caracola\r");
**             delay_ms(1000);
**             fprintf(lcd, "F");
**             delay_ms(3);
**             fprintf(lcd, "B2");
**             delay_ms(3);
**             fprintf(lcd, "G52");
**             delay_ms(3);
**             fprintf(lcd, "W%s\r" ,pic);
**
**     IMPORTANTE: (1)  Para que el controlador sepa cuándo termina la cadena de texto enviada, hay que colocar al
**                      final un retorno de carro, es decir, \r. Esto sólo es necesario usando los comandos W y N.
**                 (2)  Al arrancar el circuito, debes esperar unos 50ms antes de utilizar el controlador
**                 (3)  Cualquier modificación o mejora debería ser posteada en el foro correspondiente a este aporte,
**                      en la web www.forosdeelectronica.com.
**
**************************************************************************************
**************************************************************************************/
Citar
04-feb-2012 #8
asherar

<phrase 1=

Ubicación: Bs. As. - Argentina
Mensajes: 954
Ok. Muchas gracias.
Voy a ver si puedo hacer algo parecido con los LCD gráficos,
aunque seguro requerirá más comandos !!!
Citar
04-feb-2012 #9
Moyano Jonathan

<phrase 1=

Ubicación: Mendoza, argentina
Mensajes: 2.654
La verdad me parece una excelente idea, ahora has tenido algún problema de tiempos de refresco ?
Citar
05-feb-2012 #10
asherar

<phrase 1=

Ubicación: Bs. As. - Argentina
Mensajes: 954
Como no queda claro para quién va la pregunta, yo opino lo mío.

Los LCD, tanto 2x16 texto, como gráficos (aún los más chicos) son de por sí un poco lentos de reflejos.
Cuando digo lentos me refiero al tiempo de ejecución del micro a bordo del display.
Los de texto son un poquitín más lentos que los gráficos, al menos los que he usado.
No hay que olvidarse que las placas ya traen un micro, así que ahora habrían 3 CPUs en total.

Sin embargo, como está planteado el tema de usar unos pocos comandos, casi todo el trabajo
le queda al micro dedicado, y por lo tanto son de esperar los retrasos habituales.

Aún no he probado el control via RS232, pero creo que en algunos casos vale la pena tener
todo lo del LCD estandarizado, ya listo y probado.

Veremos qué opina arrivaellobo.

Última edición por asherar; 05-feb-2012 a las 12:56
Citar
05-feb-2012 #11
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
Moyano: A que te refieres exactamente con los tiempos de refresco?
El tiempo que hay que esperar después de enviar un comando al controlador es un poco variable, ya que cada comando tiene su tiempo de ejecución propio. Por ejemplo los comandos F, B y G necesitan 3ms.
Una tarea adecuada sería medir en el proteus el tiempo de ejecución de cada comando, para tener la medida exacta. Si tengo un hueco libre ésta tarde me dedicaré a eso.
asherar: Te refieres a que en algunos casos es mejor usar el LCD directamente?
Es posible. Este controlador lo he creado para un uso general, ya que en 90% de los casos usamos los LCD para mostrar información, y no necesitamos refrescarlo cada 3ms por ejemplo. Por lo que he probado yo hasta ahora con los comandos por rs232 funciona bastante bien, mejor de lo que esperaba. He probado en board el circuito, mandándole muchos comandos seguidos para cambiar el brillo del LCD, y escribir mensajes y tal, y funciona bien. Sólo hay que respetar los tiempos entre comandos, y acordarse del \r... jajaja

Un abrazo

Última edición por arrivaellobo; 05-feb-2012 a las 11:08
Citar
05-feb-2012 #12
asherar

<phrase 1=

Ubicación: Bs. As. - Argentina
Mensajes: 954
arrivaellobo dijo: Ver Mensaje
asherar: Te refieres a que en algunos casos es mejor usar el LCD directamente?
Es posible. Este controlador lo he creado para un uso general, ya que en 90% de los casos usamos los LCD para mostrar información, y no necesitamos refrescarlo cada 3ms por ejemplo.
Un abrazo
Justamente, depende mucho de la aplicación. Pero reitero la ventaja de tener
todo lo del LCD estandarizado, ya listo y probado.

Además, una salida numérica que cambia muy rápido puede resultar incómodo para leer,
y uno le tiene que poner retrasos adicionales de 1/2 a 1 seg.
Por eso pensé que Moyano Jonathan preguntaba por los display gráficos,
que tienen mucha más memoria que refrescar.

Saludos.

Última edición por asherar; 05-feb-2012 a las 13:18
Citar
05-feb-2012 #13
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
He medido los tiempos de ejecución de cada comando con el proteus, aquí están:
F --> 2.42ms
W --> 4.34ms
N --> 6.6ms
G --> 220us
B --> 58us


Me alegro que te parezca bien el proyecto entonces
Citar
05-feb-2012 #14
Moyano Jonathan

<phrase 1=

Ubicación: Mendoza, argentina
Mensajes: 2.654
Claro mi consulta estaba orientada a por ejemplo ...si nosotros tenemos que mostrar un mensaje pasante por el LCD..cuanto iba a tardar para mostrarlo en pantalla una vez que le enviáramos la trama RS232. Para displays gráficos habría que ver si es posible...algo que tiene el CCS es la opción #use fast_GLCD que crea un buffer intermedio en la RAM del microcontrolador...el único problema es que necesitamos un micro que tenga 1K de RAM para arriba para implementar la idea original del proyecto.
Citar
05-feb-2012 #15
asherar

<phrase 1=

Ubicación: Bs. As. - Argentina
Mensajes: 954
El pìc 16f876A tiene 4k de memoria flash.
Citar
05-feb-2012 #16
DJ T3

<phrase 1=

Ubicación: San Nicolás de los Arroyos, Buenos Aires,Argentina
Mensajes: 317
Hola, muy buen proyecto...
Te pregunto, sugiero, opino, o como quieras verlo...

Ya que utiliza 1 línea para comunicarse con el PIC que maneja el LCD, para ahorrar pines en el PIC principal, ¿no sería bueno que el que maneja el LCD implemente un teclado, y lo envíe de la misma forma, así ahorramos mas pines aún para el PIC principal?, serían 2 pines para comunicarse entre sí. O incluso si se puede, con 1 solo pin para todo...

También conozco una forma de utilizar 3 líneas (mas un 74XXX*) del PIC para manejar el LCD, entonces tenemos mas pines del PIC para mas botones, o teclado, u otras cosas...

Habría que ver si es conveniente en tema de memorias...

*No me acuerdo el número de parte
Citar
06-feb-2012 #17
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
Para LCD alfanuméricas simples los tiempos de refresco son suficientemente "rápidos", pero para el tema de los LCD gráficos habría que pensarlo más detenidamente, y quizá ajustar más los tiempos. Nunca he trabajado con displays gráficos así que en ese tema no puedo aportar mucho más.
La idea de introducir también un teclado matricial en el controlador no está mal, pero personalmente preferiría hacer un pcb aparte para éste, con una configuración de éste estilo, para manejarlo desde el PIC principal con 1 pin.

Un abrazo a todos
Citar
06-feb-2012 #18
arrivaellobo

<phrase 1=

Ubicación: España
Mensajes: 498
Hoy he terminado de construir el PCB del controlador. Dejo unas fotos del acabado
Miniatura de Adjuntos
DSC_0108.JPG   DSC_0109.JPG   DSC_0110.JPG   DSC_0111.JPG  
Citar
06-feb-2012 #19
dinoelectro

<phrase 1=

Ubicación: ecuador
Mensajes: 268
muy bueno arrivaelobo, .... se me ocurre qu podria usarse el I2C como opcion para no sacrificar el USART del pic... tu crees que seria posible lograrlo??

seria excelente contar con una libreria que te de como opcion comunicar tu controlador LCD ya sea utilizando USART o I2C
Citar
06-feb-2012 #20
Moyano Jonathan

<phrase 1=

Ubicación: Mendoza, argentina
Mensajes: 2.654
El pìc 16f876A tiene 4k de memoria flash.
A lo que yo me refería es que si queremos usar un display gráfico, CCS tiene una manera de hacerlo pero se necesita crear un buffer intermedio en la RAM de 1K...por eso necesitas PIC18F para hacerlo o
superiores.

muy bueno arrivaelobo, .... se me ocurre qu podria usarse el I2C como opcion para no sacrificar el USART del pic... tu crees que seria posible lograrlo??

seria excelente contar con una libreria que te de como opcion comunicar tu controlador LCD ya sea utilizando USART o I2C
Es totalmente posible pero ya necesitas 2 pines del microcontrolador y que además el PIC tenga I2C por hardware para poder configurarlo como esclavo.

Un saludo !
Citar
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0 ©2011, Crawlability, Inc.