Autor Tema: Mismo LCD, distinto PIC  (Leído 2030 veces)

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

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
Mismo LCD, distinto PIC
« en: 22 de Diciembre de 2003, 09:39:00 »
Hola a todos:

Probe el clasico "Hola" con un LCD y un pic 16f84 y funciona bien pero luego lo probe con un 16f874 y no muestra nada.
Es distinta la programacion para de un pic u otro.
Y si alguien puede me gustaria cambiar el port de E, RS y RW que estan en el puerto A ya que este es el analogico y me gustaria usarlo para otra cosa.
Dejo el codigo para ver si hay que cambiar algo.

Como siempre muchas gracias.
Saludos.
Pablo

/*-------------------------------------------*
 |  LCD2.C                                   |
 |  Autor: Pedro M. Jimenez                  |
 |  (c) Microsystems Engineering (Bilbao)    |
*-------------------------------------------*/

// 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
//                      
  Saltar a la segunda linea
//                        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.

#use delay (clock=3276800)

#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 "
"   : lcd_gotoxy(1,2);               break;
     case ""   : 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;
}



Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Mismo LCD, distinto PIC
« Respuesta #1 en: 22 de Diciembre de 2003, 12:29:00 »
Hola Pablo.

- Para que muestre mensajes en pantalla la programación es idéntica en un PIC y en el otro.

- La rutina retocada te la he puesto en Simuladores - Ejemplos para simular.

- En la rutina de Microsystems que adjuntas hay una cosa añadida por tí que puede te dé problemas: #use delay (clock=3276800) , esto no está en la original de Microsystems.

Con todo esto espero que tires "pa lante".

Un saludo


Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Mismo LCD, distinto PIC
« Respuesta #2 en: 22 de Diciembre de 2003, 12:58:00 »
Hola Pocher:

Probe el ejemplo y tampoco me funciono, entoces comence a probar con los #fuses del icprog y cuando quite el LVP funciono.
Que es esto? Como se deshabilita desde programacion.

Mil gracias de nuevo.
Pablo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Mismo LCD, distinto PIC
« Respuesta #3 en: 22 de Diciembre de 2003, 13:05:00 »
LVP: programación en bajo voltaje, ojo, pero solo para aquellos PICs que vengan dotados de esta característica.

Si no tienes el PIC adecuado para esto hay que tener esta opción siempre deshabilitada, bien desde el ICPROG, bien desde programación. Desde programación se hace así:

#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD, NOWRT

Un saludo

Desconectado PabloFiscella

  • PIC16
  • ***
  • Mensajes: 154
RE: Mismo LCD, distinto PIC
« Respuesta #4 en: 22 de Diciembre de 2003, 13:34:00 »
Muchas gracias.

Felicidades.
Pablo


 

anything