Autor Tema: Configuracion LCD  (Leído 2949 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Configuracion LCD
« en: 30 de Diciembre de 2008, 20:04:27 »
Hola a todos, hasta ahora he programado en Proton y Mikrobasic pero ahora estoy aprendiendo C. Ya se cosas muy basicas, me interesa mucho saber controlar un LCD con el controlador HD44780 de Hitachi, el que se usar en Basic y ahora quiero aprender en C.

En mi placa que tengo conectada la LCD lo tengo conectado asi:
RS   - RC0
R/W - RC1
E     - RC5
DB4 - RA1
DB5 - RA2
DB6 - RA3
DB7 - RA5

En Mikrobasic esto tiene facil solucion:
Lcd_config(porta,5,3,2,1,portc,0,1,5) pero en C por mucho que leo no consigo aclararme de como se hace.

Estoy viendo estos ejemplos muy buenos de este mismo foro:
Ejemplitos en C para 16F648A

Para la configuracion he visto esta pagina, tambien muy buena pero, no me aclaro de como configurarlo para mi placa:
CCS - Uso de LCDs alfanuméricos.

Saludos.


Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #1 en: 30 de Diciembre de 2008, 22:39:46 »
.
« Última modificación: 30 de Diciembre de 2008, 22:45:56 por Trust »

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #2 en: 30 de Diciembre de 2008, 22:44:13 »
Ya me funciona.  :mrgreen:

He usado la libreria flex_lcd.c y funciona muy bien.
Aqui pongo el codigo:
Código: [Seleccionar]

#include <16f876a.h> //pic a utilizar
#fuses XT,NOWDT,NOPUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
//Configuracion Lcd
#define LCD_DB4   PIN_A1
#define LCD_DB5   PIN_A2
#define LCD_DB6   PIN_A3
#define LCD_DB7   PIN_A5
#define LCD_RS     PIN_C0
#define LCD_RW    PIN_C1
#define LCD_E      PIN_C5

#include "flex_lcd.c"                  //libreria manejo lcd

///PROGRAMA
void main(void)
{
set_tris_c(0b00000000);
set_tris_a(0b00000000);
   lcd_init();         //inicializa lcd
   lcd_putc("TRUST");
  }

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #3 en: 30 de Diciembre de 2008, 23:40:08 »
Hola, estoy haciendo pruebas y no funciona del todo bien. :x
Cuando lo programo, la primera vez que lo pongo en marcha va bien, luego las siguientes veces o no muestra nada o muestra caracteres extraños.
¿Sera que no va bien el LCD?
¿Sera la placa?
¿Os ha pasado algo asi, como que aparecen caracteres extraños?

Tendre que probar en otra placa, en la que tengo un 18f4550.


Desconectado Javicho

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 570
Re: Configuracion LCD
« Respuesta #4 en: 30 de Diciembre de 2008, 23:45:03 »
Tal vez en tu rutina de envio de dato o comando al lcd no revisas el bit BUSY para saber si el LCD está ocupado o no. Quizás tambien al desconectar la alimentación primero se resetea el LCD y el pic aun no, entonces si lo vulves a conectar de forma rapida el pic no se resetea o lo que es lo mismo no vuelve a inicializar el lcd de nuevo, mientras que este último ya se reseteó y está esperando que el pic lo inicialize.

Javicho.


Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #5 en: 30 de Diciembre de 2008, 23:52:02 »
Hola Javicho, gracias por la ayuda.
Lo que me has dicho no se como lo podria hacer.
¿Tienes algun ejemplo para todo eso?

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #6 en: 31 de Diciembre de 2008, 01:11:20 »
He probado varias cosas y sigue sin funcionarme. :(
Creo que para saber si el LCD esta ocupado o no el pic debe de leer el valor que le da el LCD por medio del pin DB7 que yo tengo configurado como RA5. Tambien le he puesto una pausa grande para que le de tiempo a cargarse todo bien.
Pongo uno de los codigos que he probado. Como de C se muy poco me esta costando muchisimo esto.

Código: [Seleccionar]

#include <16f876a.h> //pic a utilizar
#fuses XT,NOWDT,NOPUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
//Configuracion Lcd
#define LCD_DB4   PIN_A1
#define LCD_DB5   PIN_A2
#define LCD_DB6   PIN_A3
#define LCD_DB7   PIN_A5
#define LCD_RS     PIN_C0
#define LCD_RW    PIN_C1
#define LCD_E      PIN_C5

#include "flex_lcd.c"                  //libreria manejo lcd

///PROGRAMA
void main(void)
{

set_tris_c(0b00000000);
set_tris_a(0b00000000);
set_tris_b(0b00000000);

   lcd_init(); //inicializa lcd
   delay_ms(2000);
   
  if (input(PIN_A5)==0);
   
     lcd_putc("TRUST");

}

Intento leer el valor de ese pin DB7, con un if (input(PIN_A5)==0);, pero no estoy seguro de si es asi o no.  :?
Otra cosa que no entiendo el if, ¿cuando termina?, no lo veo claro, en Basic es un If-End IF, mas claro que el agua pero en C es bastante confuso para un novato como yo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Configuracion LCD
« Respuesta #7 en: 31 de Diciembre de 2008, 08:09:10 »
No es necesario que leas el estado del pin, debes sacar esa instruccion, ya que modifica el estado del port y no permite la escritura en ese bit.
La misma instruccion LCD_Putc() tiene el test de ocupado incorporado...
El problema que veo es que usas los Set_Tris () de los puertos detras de la declaracion de la libreria flex_lcd.
Comentalos a los tres y al testeo del bit y deberia funcionar. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #8 en: 31 de Diciembre de 2008, 08:35:34 »
Hola, MGLSOFT he provado eso y no me funciona. Si pongo los Set_tris antes de #include "flex_lcd.c" me da error.

Creo que tendre que comprarme otro LCD.


Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Configuracion LCD
« Respuesta #9 en: 31 de Diciembre de 2008, 08:48:12 »
Si no pones los set tris el CCS asume que el configura solo los puertos.
La libreria flex lcd tiene sus propia configuracion de los puertos, asi que esas declaraciones estan de mas y se solapan con las anteriores, por eso te digo de quitarlas o comentarlas, ni siquiera cambiarlas de lugar.... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Trust

  • PIC16
  • ***
  • Mensajes: 141
Re: Configuracion LCD
« Respuesta #10 en: 01 de Enero de 2009, 22:42:09 »
Ya me funciona.  :mrgreen:
He probado el LCD en otra placa que tiene un 18F4550 y funciona correctamente.
Aqui teneis el codigo:
Citar

#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=12000000)
//Configuracion Lcd
#define LCD_DB4   PIN_b4
#define LCD_DB5   PIN_b5
#define LCD_DB6   PIN_b6
#define LCD_DB7   PIN_b7
#define LCD_RS     PIN_b2
#define LCD_RW    PIN_b3
#define LCD_E      PIN_b1

#include "flex_lcd.c"                  //libreria manejo lcd

///PROGRAMA
void main(void)
{
   lcd_init(); //inicializa lcd
   delay_ms(2000);
           
     lcd_putc("TRUST");
     delay_ms(1500);
     lcd_gotoxy(1,2);
     lcd_putc("Hola a todos");
     
}

Muchas gracias Javicho y MGLSOFT.


Desconectado statit

  • PIC10
  • *
  • Mensajes: 1
Re: Configuracion LCD
« Respuesta #11 en: 16 de Enero de 2009, 19:06:54 »
gracias a todo pude hacer funcionar un display "lcd hd44780a00" que pensaba que estaba malo jejeje

Desconectado israelmx

  • PIC10
  • *
  • Mensajes: 7
Re: Configuracion LCD
« Respuesta #12 en: 17 de Enero de 2009, 04:22:01 »
Hola a todos, bueno este problema también me esta pasando con la el driver de flex_lcd ya que no admite aparte el fast_io y eso quita mucho rom ya que cada vez que se usan los puertos el compilador se asegura de declararlos, la otra es que cada vez que reinicio el micro con mclr al iniciar el micro hay veces que el LCD se queda con la ultima pantalla y no se reinicia, asi que se debe apagar el equipo, estoy proponiendo un nuevo driver el cual su funcionalidad para configuracion resulta muy facil, espero sacarlo el link es el siguiente:

http://www.todopic.com.ar/foros/index.php?topic=24462.0

saludos


 

anything