Autor Tema: Comunicacion pic 18f2550 y lcd 162c  (Leído 12818 veces)

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

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Comunicacion pic 18f2550 y lcd 162c
« en: 16 de Noviembre de 2008, 17:35:11 »
Antes de empezar quiero dejar constancia que de esto hay mil y un temas en el foro pero por mas k leo no tengo narices a ver que es lo que le pasa a mi codigo, ya llevo varios dias peleandome y me cabrea que este tipo de programacion no sea como la de alto nivel pues no doy pie con bola.

Os enseño mi codigo
#include <18f2550.h>

#use delay(clock=4000000)
#define use_portb_lcd TRUE
#define LCD_DB4   PIN_B4
#define LCD_DB5   PIN_B5
#define LCD_DB6   PIN_B6
#define LCD_DB7   PIN_B7
#define LCD_RS     PIN_B1
#define LCD_RW    PIN_B2
#define LCD_E      PIN_B0

#include "flex_lcd_c.c"
#fuses XT,NOWDT,NOPUT
void main()
 {
    lcd_init(); 
    lcd_putc("hola");
}

Sencillamente es un hola mundo con la libreria flex_lcd_c.c aqui os dejo la libreria por si estubiera mal

// flex_lcd.c

// These pins are for the Microchip PicDem2-Plus board,
// which is what I used to test the driver.  Change these
// pins to fit your own board.

//#define LCD_DB4   PIN_B4
//#define LCD_DB5   PIN_B5
//#define LCD_DB6   PIN_B6
//#define LCD_DB7   PIN_B7
//
//#define LCD_RS    PIN_C0
//#define LCD_RW    PIN_C1
//#define LCD_E     PIN_C2

// If you only want a 6-pin interface to your LCD, then
// connect the R/W pin on the LCD to ground, and comment
// out the following line.

#define USE_LCD_RW   1

//========================================

#define lcd_type 2        // 0=5x7, 1=5x10, 2=2 lines
#define lcd_line_two 0x40 // LCD RAM address for the 2nd line


int8 const LCD_INIT_STRING[4] =
{
 0x20 | (lcd_type << 2), // Func set: 4-bit, 2 lines, 5x8 dots
 0xc,                    // Display on
 1,                      // Clear display
 6                       // Increment cursor
 };


//-------------------------------------
void lcd_send_nibble(int8 nibble)
{
// Note:  !! converts an integer expression
// to a boolean (1 or 0).
 output_bit(LCD_DB4, !!(nibble & 1));
 output_bit(LCD_DB5, !!(nibble & 2));
 output_bit(LCD_DB6, !!(nibble & 4));
 output_bit(LCD_DB7, !!(nibble & 8));

 delay_cycles(1);
 output_high(LCD_E);
 delay_us(2);
 output_low(LCD_E);
}

//-----------------------------------
// This sub-routine is only called by lcd_read_byte().
// It's not a stand-alone routine.  For example, the
// R/W signal is set high by lcd_read_byte() before
// this routine is called.

#ifdef USE_LCD_RW
int8 lcd_read_nibble(void)
{
int8 retval;
// Create bit variables so that we can easily set
// individual bits in the retval variable.
#bit retval_0 = retval.0
#bit retval_1 = retval.1
#bit retval_2 = retval.2
#bit retval_3 = retval.3

retval = 0;

output_high(LCD_E);
delay_cycles(1);

retval_0 = input(LCD_DB4);
retval_1 = input(LCD_DB5);
retval_2 = input(LCD_DB6);
retval_3 = input(LCD_DB7);

output_low(LCD_E);

return(retval);
}
#endif

//---------------------------------------
// Read a byte from the LCD and return it.

#ifdef USE_LCD_RW
int8 lcd_read_byte(void)
{
int8 low;
int8 high;

output_high(LCD_RW);
delay_cycles(1);

high = lcd_read_nibble();

low = lcd_read_nibble();

return( (high<<4) | low);
}
#endif

//----------------------------------------
// Send a byte to the LCD.
void lcd_send_byte(int8 address, int8 n)
{
output_low(LCD_RS);

#ifdef USE_LCD_RW
while(bit_test(lcd_read_byte(),7)) ;
#else
delay_us(60);
#endif

if(address)
   output_high(LCD_RS);
else
   output_low(LCD_RS);

 delay_cycles(1);

#ifdef USE_LCD_RW
output_low(LCD_RW);
delay_cycles(1);
#endif

output_low(LCD_E);

lcd_send_nibble(n >> 4);
lcd_send_nibble(n & 0xf);
}

//----------------------------
void lcd_init(void)
{
int8 i;

output_low(LCD_RS);

#ifdef USE_LCD_RW
output_low(LCD_RW);
#endif

output_low(LCD_E);

delay_ms(15);

for(i=0 ;i < 3; i++)
   {
    lcd_send_nibble(0x03);
    delay_ms(5);
   }

lcd_send_nibble(0x02);

for(i=0; i < sizeof(LCD_INIT_STRING); i++)
   {
    lcd_send_byte(0, LCD_INIT_STRING);

    // If the R/W signal is not used, then
    // the busy bit can't be polled.  One of
    // the init commands takes longer than
    // the hard-coded delay of 60 us, so in
    // that case, lets just do a 5 ms delay
    // after all four of them.
    #ifndef USE_LCD_RW
    delay_ms(5);
    #endif
   }

}

//----------------------------

void lcd_gotoxy(int8 x, int8 y)
{
int8 address;

if(y != 1)
   address = lcd_line_two;
else
   address=0;

address += x-1;
lcd_send_byte(0, 0x80 | address);
}

//-----------------------------
void lcd_putc(char c)
{
 switch(c)
   {
    case '\f':
      lcd_send_byte(0,1);
      delay_ms(2);
      break;

    case '\n':
       lcd_gotoxy(1,2);
       break;

    case '\b':
       lcd_send_byte(0,0x10);
       break;

    default:
       lcd_send_byte(1,c);
       break;
   }
}

//------------------------------
#ifdef USE_LCD_RW
char lcd_getc(int8 x, int8 y)
{
char value;

lcd_gotoxy(x,y);

// Wait until busy flag is low.
while(bit_test(lcd_read_byte(),7));

output_high(LCD_RS);
value = lcd_read_byte();
output_low(lcd_RS);

return(value);
}
#endif

void lcd_setcursor_vb(short visible, short blink) {
  lcd_send_byte(0, 0xC|(visible<<1)|blink);
}


al compilar con pcw de css directamente esta todo ok, pero cuando utilizo el mplab y le digo k por medio de el compile llamando a css me da el siguiente error:

Executing: "C:\Program files\Picc\CCSC.exe" +FH "flex_lcd_c.c" +EXPORT +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 128 "C:\Documents and Settings\Pedro Francisco\Desktop\16f84_flexlcd\flex_lcd_c.c" Line 28(142,183): A #DEVICE required before this line
C:\Documents and Settings\Pedro Francisco\Desktop\16f84_flexlcd\flex_lcd_c.o ===>  1 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Sun Nov 16 20:16:40 2008

la verda que me deja total mente fuera de juego por que no entiendo como en un lado todo esta bien y en el otro me da un erros, por favor me podeis echar una mano??.

Muchas gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #1 en: 16 de Noviembre de 2008, 17:52:15 »
Hola

No repitas los post por favor
El papel lo aguanta todo

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #2 en: 16 de Noviembre de 2008, 18:31:47 »
No he repetido ningun post solo pregunto por un problema propio pero eso si, como dije ya se a hablado mucho del tema y hay errores parecidos pero que en ningun caso queda clara la solución. Gracias por responder pero en vez de eso por favor necesito que me enchen una mano pues no se como cogerlo.

Eso si te invito a que me digas en que parte del forohay algo igual a lo que e puesto, pues yo aun no le e encontrado y llevo varios dias buscando

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #3 en: 16 de Noviembre de 2008, 18:39:21 »
El papel lo aguanta todo

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #4 en: 16 de Noviembre de 2008, 18:41:30 »
Y solo por si acaso  :D :

Hola, antes que nada darte las gracias por tanto ejemplo y tan claros.

queria decirte que e intentado montar el ejemplo 24 sobre el Mplab con el plugin para css y no hay manera, creo k es por una incompatibilidad de librerias , al menos eso e leido, pero queria saber que es lo k me pasa realmente. esto es lo k me da mplab:

Executing: "C:\Program files\Picc\CCSC.exe" +FH "flex_lcd_c.c" +EXPORT +DF +LN +T +A +M +Z +Y=9 +EA
*** Error 128 "C:\Documents and Settings\Pedro Francisco\Desktop\16f84_flexlcd\flex_lcd_c.c" Line 28(142,183): A #DEVICE required before this line
C:\Documents and Settings\Pedro Francisco\Desktop\16f84_flexlcd\flex_lcd_c.o ===>  1 Errors,  0 Warnings.
Halting build on first failure as requested.
BUILD FAILED: Sun Nov 16 19:57:11 2008

Cuando monto tu ejemplo, por que me da este error??.

Un saludo

Que esta en el hilo que te pase.

Saludos

El papel lo aguanta todo

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #5 en: 17 de Noviembre de 2008, 08:41:22 »
Gracias milo, perdona la respuesta anterior, esa pregunta fue mia, pero no e sabido arreglarlo, no tengo nada metido en sourcefiles o estoy tonto, pues prove con ese ejemplo y al no funcionar segui con el mio que es este , pero cosa rara que me dan el mismo error y no se por donde cojerlo  , ya que me dejo fuera de juego rapidamente

Un saludo y gracias

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #6 en: 17 de Noviembre de 2008, 10:32:31 »
Hola.

No hay lio.

Me dices que no tienes ningun archivo en el Source? Debe estar linkeado el archivo fuente de tu proyecto unicamente, pero no el archivo flex_lcd_c.c. Otra cosa, si usas #include "flex_lcd_c.c" el archivo debe estar en la misma carpete de tu proyecto.

Prueba colocar los #fuses luego de la directiva #include <18F2550.h>

Saludos
El papel lo aguanta todo

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #7 en: 17 de Noviembre de 2008, 10:40:57 »
perdona si tengo dos archivos en source no entendi lo que querias preguntar, el archivo del proyerto y el de la libreria flex-lcd, tambien tengo el los archivos de cabecera el 18f2550.h. Acavo de probar lo que me as dicho pero sigue dando el mismo error son el mplab en cambio con el pwc  va perfecto no entiendo por que, si tomo la libreria de css la lcd.c tambien me da el mismo error.

gracias por tu atencion MLO

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #8 en: 17 de Noviembre de 2008, 10:42:46 »
Hola.

Podrias anexar el codigo .c en un zip de los 2 archivos?
El papel lo aguanta todo

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #9 en: 17 de Noviembre de 2008, 10:48:53 »
Aqui tienes mlo, soy nuevo en programacion de microcontroladores y estoy acostumbrado a la programacion basada en objetos por lo k no termino de entendar los errores

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #10 en: 17 de Noviembre de 2008, 12:33:57 »
tenes que incluir el fichero de cabecera antes de los fuses .. por ejemplo

Código: [Seleccionar]
#include <18F2550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
LAS MALVINAS SON ARGENTINAS!

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #11 en: 17 de Noviembre de 2008, 12:49:58 »
aaaaaaaaaaaaaaaaaaaa ya se cual es tu problema...... vos estas usando una version 4.057 del CCS???? a mi me paso lo mismo con esa version, es mas no la pude usar integrada a MPLAB. para integrar CCS a MPLAB tuve que bajar a una version 3.4 (creo  :?), de cualquier manera lo que yo hago es compilar en CCS y luego importar el .HEX a MPLAB. La desventaja es si estas utilizando el debug....
          Saludos



EDITO: yo compile sin problemas tu codigo en ccs....
« Última modificación: 17 de Noviembre de 2008, 12:58:48 por cerebro »
LAS MALVINAS SON ARGENTINAS!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #12 en: 17 de Noviembre de 2008, 13:33:53 »
Hola.

Varias cosillas:

1) Tal como lo dice cerebro (y como te lo mencione mas abajo), los #fuse, van despues de la directiva #include <18F2550.h>.
2) No hay funcion Delayms(), la funcion correcta es delay_ms().

Compilando el codigo desde el MPLAB con el CCS v.4.073:

Código: CSS
  1. #include <18f2550.h>
  2. #fuses XT,NOWDT,NOPUT
  3.  
  4. #use delay(clock=4000000)
  5. #define use_portb_lcd TRUE
  6. #define LCD_DB4   PIN_B4
  7. #define LCD_DB5   PIN_B5
  8. #define LCD_DB6   PIN_B6
  9. #define LCD_DB7   PIN_B7
  10. #define LCD_RS     PIN_B1
  11. #define LCD_RW    PIN_B2
  12. #define LCD_E      PIN_B0
  13.  
  14. #include "flex_lcd_c.c"
  15.  
  16. void main()
  17.  {
  18.  
  19.         delay_ms(100);    
  20.         lcd_init();
  21.         for(;;){
  22.         lcd_putc("hola");
  23.         }
  24. }

Me dio como resultado:

Executing: "C:\Archivos de programa\PICC\Ccsc.exe" +FH "lcd_16f84.c" +DF +LN +T +A +M +Z +Y=9 +EA
      Memory usage:   ROM=2%      RAM=0% - 1%
      0 Errors,  0 Warnings.
Loaded C:\Documents and Settings\Miguel Lopez\Mis documentos\Mis archivos recibidos\Pruebas\lcd_16f84.cof.
BUILD SUCCEEDED: Mon Nov 17 10:29:20 2008


Saludos
El papel lo aguanta todo

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #13 en: 17 de Noviembre de 2008, 13:45:39 »
2) No hay funcion Delayms(), la funcion correcta es delay_ms().

Compilando el codigo desde el MPLAB con el CCS v.4.073:

Me dio como resultado:

Executing: "C:\Archivos de programa\PICC\Ccsc.exe" +FH "lcd_16f84.c" +DF +LN +T +A +M +Z +Y=9 +EA
      Memory usage:   ROM=2%      RAM=0% - 1%
      0 Errors,  0 Warnings.
Loaded C:\Documents and Settings\Miguel Lopez\Mis documentos\Mis archivos recibidos\Pruebas\lcd_16f84.cof.
BUILD SUCCEEDED: Mon Nov 17 10:29:20 2008



Saludos


Si habia corregido el delay_ms() me habia olvidado de comentarlo.... gracias Miguel por comprobar el funcionamiento de las nuevas versiones de ccs en MPLAB
me parece que vamos a tener que entrar a toquetear al ccs y MPLAB  con kicho mueje je je jeeee (risa macabra)

pregunta CCS v.4.073 y MPLAB IDE v8.00?
LAS MALVINAS SON ARGENTINAS!

Desconectado kicho

  • PIC10
  • *
  • Mensajes: 39
Re: Comunicacion pic 18f2550 y lcd 162c
« Respuesta #14 en: 17 de Noviembre de 2008, 14:02:44 »
Muchisismas gracias a los dos, mi principal problema desde el principio es que en ccs si compila muy bien pero cuando pongo el mplab me dice el error de antes aunke tenia fallos por k ya de la desesperacion comence a cortar y pegar de diferentes ejemplos y eso es un gran error.

teno el mplab 7.6 y el pwc de css la 4.0 y queria usar mplab para debugear pues en lenguaje orientedo a objetos puedo depurar paso a paso y queria lo mismo aqui para asegurarme de lo que hago esta bien, ya que soy muy patoso programando pic en c, Otra cosa no se si me equivocare uniendo caples pues utilizo una pic school de mse una maravilla de placa para hacer pruebas que posterior mente la implementare en un circuito propiamente dicho, estoy con el proyecto de fin de carrera y la lcd no es necesaria pero quiero hacer las cosas bonitas. ya os comentare como va mi proyecto pues es algo grande ya que tengo que implementar la pila de protocolos tpc(parte de ella) y darle servicio


Muchas gracias a los dos

nota: con este codigo no e conseguido que funcione la lcd, pero tened en cuenta que esta montada de fabrica(no ay soldadurs defectuosas), esta encendida y se nota que hay recuadros en negro con lo que el contraste esta bien.
« Última modificación: 17 de Noviembre de 2008, 14:14:27 por kicho »