TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ingalen 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
-
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
-
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
-
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
-
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