Autor Tema: Inconveniente con driver LCD 4x20  (Leído 3215 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado gemetzelgott

  • PIC10
  • *
  • Mensajes: 4
Inconveniente con driver LCD 4x20
« en: 05 de Enero de 2011, 09:58:10 »
Hola, soy novato en la programacion de microcontroladores en C, tengo un inconveniente con algunos drivers para el manejo de LCD 4x20 de 8 bits, este es uno que encontre

// Funciones definidas en esta en esta libreria, las cuales podemos llamar desde nuestro programa principal.

//  lcd_init()   Inicialización del LCD (debe utilizarse al principio, antes de trabajar con el LCD).
//
//  lcd_putc(c)  Saca un caracters en el LCD.
//               Caracteres especiales de control:
//                      \f  Borrar LCD
//                      \n  Saltar a la segunda linea
//                      \b  Retroceder una posición.
//
//  lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el LCD.
//                  (la esquina superior izquierda es 1,1)
//
//  lcd_getc(x,y)   Devuelve el caracter de la posicion x,y del LCD.


#bit  lcd_enable = 0x07.7          <<<------------------------ !!!EN ESTA LINEA APARECE EL ERROR¡¡¡
#bit  lcd_rw     = 0x07.6
#bit  lcd_rs     = 0x07.5
#byte lcd_c = 0x07
#byte lcd_b = 0x06

#define LCD_LINEA2 0x40    // Direccion de memoria para la segunda linea
#define LCD_LINEA3 0x14    // Direccion de memoria para la tercera linea
#define LCD_LINEA4 0x54    // Direccion de memoria para la cuarta linea
#define LCD_DATO    1
#define LCD_COMANDO 0

#define LCD_CLEAR   0x01
#define LCD_HOME    0x02

#define LCD_DISPLAY_OFF  0x08
#define LCD_DISPLAY_ON   0x0C
#define LCD_CURSOR_ON    0x0E
#define LCD_CURSOR_BLINK 0x0F

#define LCD_CURSOR_SHIFT_RIGHT  0x10
#define LCD_CURSOR_SHIFT_LEFT   0x14
#define LCD_DISPLAY_SHIFT_RIGHT 0x18
#define LCD_DISPLAY_SHIFT_LEFT  0x1C


int lcd_leer()
{
  int valor;

  set_tris_c(0b00110001);
  set_tris_b(0xFF);

  lcd_rw = 1;
  delay_cycles(1);
  lcd_enable = 1;
  delay_cycles(1);
  valor = lcd_b;
  lcd_enable = 0;
  delay_us(40);

  set_tris_b(0x00);
  return valor;
}

void lcd_enviar(int dir, int valor)
{
  set_tris_c(0x00);
  set_tris_b(0x00);

  lcd_rs = 0;
  while( bit_test(lcd_leer(),7) );
  lcd_rs = dir;
  delay_cycles(1);

  lcd_rw = 0;
  delay_cycles(1);
  lcd_enable = 0;
  lcd_b = valor;
  delay_cycles(1);
  lcd_enable = 1;
  delay_us(2);
  lcd_enable = 0;
  delay_us(40);
}


void lcd_init()
{
  int i;

  set_tris_c(0x18);
  set_tris_b(0x00);

  lcd_enable = 0;
  lcd_rw = 0;
  lcd_rs = 0;
  delay_ms(15);

  for(i=0; i<3; i++)
  {
    lcd_enviar(LCD_COMANDO,0x38);
    delay_ms(5);
  }
  lcd_enviar(LCD_COMANDO,LCD_DISPLAY_ON);
  lcd_enviar(LCD_COMANDO,0x06);
  lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  lcd_enviar(LCD_COMANDO,LCD_HOME);
}


void lcd_gotoxy( byte x, byte y) {
   byte dir;

   if(y!=1)
     dir=LCD_LINEA2;
   else
     dir=0;
   dir+=x-1;
   lcd_enviar(LCD_COMANDO,0x80|dir);
}


void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_enviar(LCD_COMANDO,0x01);
                   delay_ms(2);
                   break;
     case '\n'   : lcd_gotoxy(1,2);               break;
     case '\b'   : lcd_enviar(LCD_COMANDO,0x10);  break;
     default     : lcd_enviar(LCD_DATO,c);        break;
   }
}


char lcd_getc( int x, int y) {
   char valor;

    lcd_gotoxy(x,y);

    lcd_rs = 1;
    valor = lcd_leer();
    lcd_rs = 0;

    return valor;
}

Al momento de compilarlo me muestra el siguiente error: A #DEVICE  required before this line.

Alguien sabe como resolver este error, o si talvez conocen un codigo de alun driver para un LCD 4x20 de 8 bits que si funcione le agradecería.
« Última modificación: 05 de Enero de 2011, 10:00:14 por gemetzelgott »

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Inconveniente con driver LCD 4x20
« Respuesta #1 en: 05 de Enero de 2011, 10:12:01 »
estas usando ccs  verdad? cierra todos los proyectos que tengas abiertos en el menu con CLOSE ALL... vuelve a abrir el archivo a compilar y prueba a compilarlo...
un saludo
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado gemetzelgott

  • PIC10
  • *
  • Mensajes: 4
Re: Inconveniente con driver LCD 4x20
« Respuesta #2 en: 05 de Enero de 2011, 10:16:14 »
Hola, soy novato en la programacion de microcontroladores en C, tengo un inconveniente con algunos drivers para el manejo de LCD 4x20 de 8 bits, este es uno que encontre

// Funciones definidas en esta en esta libreria, las cuales podemos llamar desde nuestro programa principal.

//  lcd_init()   Inicialización del LCD (debe utilizarse al principio, antes de trabajar con el LCD).
//
//  lcd_putc(c)  Saca un caracters en el LCD.
//               Caracteres especiales de control:
//                      \f  Borrar LCD
//                      \n  Saltar a la segunda linea
//                      \b  Retroceder una posición.
//
//  lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el LCD.
//                  (la esquina superior izquierda es 1,1)
//
//  lcd_getc(x,y)   Devuelve el caracter de la posicion x,y del LCD.


#bit  lcd_enable = 0x07.7          <<<------------------------ !!!EN ESTA LINEA APARECE EL ERROR¡¡¡
#bit  lcd_rw     = 0x07.6
#bit  lcd_rs     = 0x07.5
#byte lcd_c = 0x07
#byte lcd_b = 0x06

#define LCD_LINEA2 0x40    // Direccion de memoria para la segunda linea
#define LCD_LINEA3 0x14    // Direccion de memoria para la tercera linea
#define LCD_LINEA4 0x54    // Direccion de memoria para la cuarta linea
#define LCD_DATO    1
#define LCD_COMANDO 0

#define LCD_CLEAR   0x01
#define LCD_HOME    0x02

#define LCD_DISPLAY_OFF  0x08
#define LCD_DISPLAY_ON   0x0C
#define LCD_CURSOR_ON    0x0E
#define LCD_CURSOR_BLINK 0x0F

#define LCD_CURSOR_SHIFT_RIGHT  0x10
#define LCD_CURSOR_SHIFT_LEFT   0x14
#define LCD_DISPLAY_SHIFT_RIGHT 0x18
#define LCD_DISPLAY_SHIFT_LEFT  0x1C


int lcd_leer()
{
  int valor;

  set_tris_c(0b00110001);
  set_tris_b(0xFF);

  lcd_rw = 1;
  delay_cycles(1);
  lcd_enable = 1;
  delay_cycles(1);
  valor = lcd_b;
  lcd_enable = 0;
  delay_us(40);

  set_tris_b(0x00);
  return valor;
}

void lcd_enviar(int dir, int valor)
{
  set_tris_c(0x00);
  set_tris_b(0x00);

  lcd_rs = 0;
  while( bit_test(lcd_leer(),7) );
  lcd_rs = dir;
  delay_cycles(1);

  lcd_rw = 0;
  delay_cycles(1);
  lcd_enable = 0;
  lcd_b = valor;
  delay_cycles(1);
  lcd_enable = 1;
  delay_us(2);
  lcd_enable = 0;
  delay_us(40);
}


void lcd_init()
{
  int i;

  set_tris_c(0x18);
  set_tris_b(0x00);

  lcd_enable = 0;
  lcd_rw = 0;
  lcd_rs = 0;
  delay_ms(15);

  for(i=0; i<3; i++)
  {
    lcd_enviar(LCD_COMANDO,0x38);
    delay_ms(5);
  }
  lcd_enviar(LCD_COMANDO,LCD_DISPLAY_ON);
  lcd_enviar(LCD_COMANDO,0x06);
  lcd_enviar(LCD_COMANDO,LCD_CLEAR);
  lcd_enviar(LCD_COMANDO,LCD_HOME);
}


void lcd_gotoxy( byte x, byte y) {
   byte dir;

   if(y!=1)
     dir=LCD_LINEA2;
   else
     dir=0;
   dir+=x-1;
   lcd_enviar(LCD_COMANDO,0x80|dir);
}


void lcd_putc( char c) {
   switch (c) {
     case '\f'   : lcd_enviar(LCD_COMANDO,0x01);
                   delay_ms(2);
                   break;
     case '\n'   : lcd_gotoxy(1,2);               break;
     case '\b'   : lcd_enviar(LCD_COMANDO,0x10);  break;
     default     : lcd_enviar(LCD_DATO,c);        break;
   }
}


char lcd_getc( int x, int y) {
   char valor;

    lcd_gotoxy(x,y);

    lcd_rs = 1;
    valor = lcd_leer();
    lcd_rs = 0;

    return valor;
}

Al momento de compilarlo me muestra el siguiente error: A #DEVICE  required before this line.

Alguien sabe como resolver este error, o si talvez conocen un codigo de alun driver para un LCD 4x20 de 8 bits que si funcione le agradecería.
estas usando ccs  verdad? cierra todos los proyectos que tengas abiertos en el menu con CLOSE ALL... vuelve a abrir el archivo a compilar y prueba a compilarlo...
un saludo
no, aun aparece el error

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Inconveniente con driver LCD 4x20
« Respuesta #3 en: 05 de Enero de 2011, 10:21:29 »
que pic vas a utilizar para hecr algun proyecto con esta libreria?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado gemetzelgott

  • PIC10
  • *
  • Mensajes: 4
Re: Inconveniente con driver LCD 4x20
« Respuesta #4 en: 05 de Enero de 2011, 10:29:22 »
el 16f873a

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Inconveniente con driver LCD 4x20
« Respuesta #5 en: 05 de Enero de 2011, 11:24:41 »
yo he visto varios ejemplos de librerias para el lcd y los pines estan definidos, prueba con ....
#define  lcd_enable = 0x07.7
#define  lcd_rw     = 0x07.6
#define  lcd_rs     = 0x07.5

recuerda que antes de llamar a la libreria asigna un pic al proyecto... a lo mejor...
#include <16f873a>
#fuses ....
#use delay.....
#include <lcd_libreria_4x20.c>
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Inconveniente con driver LCD 4x20
« Respuesta #6 en: 05 de Enero de 2011, 13:04:03 »
Que tal gemetzelgott

Reviza aqui haber si te sirve

Saludos


 

anything