Autor Tema: problema programa LCD pic 16F84  (Leído 4057 veces)

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

Desconectado ingalen

  • PIC10
  • *
  • Mensajes: 12
problema programa LCD pic 16F84
« en: 21 de Enero de 2009, 20:01:52 »
Quisiera poder correr el siguiente programa de un mensaje HOLA en el modulo LCD

tengo los siguientes programas bajados de la red.



Programa principal.




// Ejemplo para simulación y/o MicroPIC Trainer

// El manejo de la pantalla LCD.

// Este ejemplo pretende introducirnos en el manejo de la pantalla LCD, para la
// visualización de diferentes mensajes (p. ej. Hola).

// Debe recordarse que las líneas RA0-RA2 actúan ahora como salida de señales de control
// hacia el LCD. Al estar conectadas con sendos interruptores en la MicroPIC Trainer,
// estos deben estar a nivel lógico "1" permanentemente.

#include <16f84.h>

#use delay(clock=4000000,RESTART_WDT)
#include <lcd2.c>

#use fast_io(A)
#use fast_io(B)

main() {000

  while(1)
  {
    lcd_init();   // Comandos de inicialización del LCD.

    lcd_enviar(LCD_COMANDO,LCD_CURSOR_BLINK); // Envía comando al LCD
    lcd_putc('H');  // Envía caracter al LCD.
    lcd_putc('o');
    lcd_putc('l');
    lcd_putc('a');
    lcd_putc(' ');
    sleep();
  }
}



Programa de LCD.



// Funciones para la gestion del display LCD de la MicroPIC Trainer.

//  lcd_init()   Debe ser llamada antes que las otras funciones.
//
//  lcd_putc(c)  Visualiza c en la siguiente posición del display.
//               Caracteres especiales de control:
//                      \f  Borrar display
//                      \n  Saltar a la segunda linea
//                      \b  Retroceder una posición.
//
//  lcd_gotoxy(x,y) Selecciona la nueva posicion de escritura en el display.
//                  (la esquina superior izquierda es 1,1)
//
//  lcd_getc(x,y)   Devuelve el caracter de la posicion x,y del display.


#bit  lcd_enable = 5.2
#bit  lcd_rw     = 5.1
#bit  lcd_rs     = 5.0
#byte lcd_a = 5
#byte lcd_b = 6

#define LCD_LINEA2 0x40    // Direccion de memoria para la segunda 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_a(0x18);
  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_a(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_a(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 compilar me da el siguiente error.

Error 128 lcd2.c a #device required before this line.
quizas no agregue bien el lcd2.c al proyecto yo lo adicione en el create proyect junto al programa.

cualquier ayuda es bienvenida muchas gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: problema programa LCD pic 16F84
« Respuesta #1 en: 22 de Enero de 2009, 01:39:24 »
Yo lo compile quitando un 000 que aparece por ahi y me lo compilo bien. Crea un nuevo proyecto solo con el programa principal en una nueva carpeta, y el lcd2.c solo copialo en la carpeta del proyecto. Con la instruccion include<> el compilador lo agrega al proyecto.-
Aca te adjunto otra libreria para controlar LCD
No contesto mensajes privados, las consultas en el foro

Desconectado fidodido18

  • PIC18
  • ****
  • Mensajes: 312
Re: problema programa LCD pic 16F84
« Respuesta #2 en: 29 de Enero de 2009, 18:19:14 »
Comprade no le de mas vuelta al asunto, ese es problema del compilador...

te lo digo porque me paso lo mismo, y pensé que yo era hasta bruto porque a todo el mundo le sale así  :?

Pero al final me di cuenta que si no estaba fallando yo, entonces tenia que ser el que compila.

Me bajé una versión mas reciente: 4.084 de csc compiler y lo trabajé directamente desde el PCWHD del programa y no lo integré con MAPLAB, y adiós problema!!  :-/

Me imagino que debes sentir frustración por no poder hacerlo, igual cuando yo intentaba, pero asi es la vida a veces jajaja


Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: problema programa LCD pic 16F84
« Respuesta #3 en: 01 de Febrero de 2009, 16:59:09 »
hola bueno si quieres escribir hola en la LCD te comento que el compilador ya trae la libreria incorporada el programa quedaria asi:
#include <16f84.h>            //pic a utilizar         
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=20000000)         //clock=20Mhz
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd


///PROGRAMA
void main(void)
{
lcd_init();         //inicializa lcd

printf(lcd_putc,"hola.");     

}

bueno es lo que te entendi  de que querias escribir por pantalla hola buen oes como te escribi arribita ^^. la salida a esta LCD es el puerto B del pic.
saludos

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: problema programa LCD pic 16F84
« Respuesta #4 en: 01 de Febrero de 2009, 17:04:28 »
la conexion ees como te mensiono a continuacion

Conexiones:

//               B0 -> E  --> de la LCD
//               B1 -> RS --> de la LCD       
//               B2 -> RW --> de la LCD   
//               B4 -> D4 --> de la LCD     
//               B5 -> D5 --> de la LCD         
//               B6 -> D6 --> de la LCD
//               B7 -> D7 --> de la LCD


de todas formas aqui en el foro ahy millones de ejemplos de todo te mando un lick para que chequees algunas cosas

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

saludos


 

anything