Autor Tema: Problema librería xlcd de C18  (Leído 4088 veces)

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

Desconectado Solink

  • PIC10
  • *
  • Mensajes: 7
Problema librería xlcd de C18
« en: 30 de Agosto de 2008, 07:06:56 »
Hola, tengo un problema con esta librería y es que cuando hago un reset después en el lcd se ve basura. Tengo que resetear 2 veces para que en el lcd aparezca la información correcta. Si reseteo una vez aparece basura, reseteo otra vez y todo bien, vuelvo a resetear y basura....  y así sucesivamente. Sigo al dedillo la configuración según microchip. ¿Alguien se le ocurre que puede estar pasando?

Desconectado redep

  • PIC12
  • **
  • Mensajes: 75
Re: Problema librería xlcd de C18
« Respuesta #1 en: 05 de Diciembre de 2008, 07:57:33 »
perdonar por resucitar el post, pero me esta pasando lo mismo que el chico que tengo que resetear una segunda vez el lcd para que funcione si no no va, a alguien mas le ha pasado, Gracias

He visto que ha otra gente tambien le a pasado pero no e encontrado solucion

Desconectado camigod

  • PIC10
  • *
  • Mensajes: 40
Re: Problema librería xlcd de C18
« Respuesta #2 en: 06 de Diciembre de 2008, 13:43:49 »
No podrias subir un fragmento del codigo que estas utilizando y la conexion de la LCD para poder ayudarte?
Un hombre no muere cuando su corazon deja de latir, un hombre muere, cuando deja de pensar

Desconectado moronilehi

  • PIC10
  • *
  • Mensajes: 17
Re: Problema librería xlcd de C18
« Respuesta #3 en: 16 de Julio de 2009, 23:13:11 »

Hola a todo soy nuevo en este mundo de microcontroladores y es la primera vez que escribo, tengo la siguiente inquietud es que  compre un Lcd VT162B/B que supuesta mente era compatible con S6A0069 bueno tuve problema con la compatibilidad del Lcd que no me funcionaba y aun no me funciona , la historia es que pedí ayuda a la empresa  ellos me enviaron un archivo y un data de este modelo(no aceptaban devoluciones) y bueno  me enviaron una librería que supuestamente trabaja con el LCD VT162B/B y es como me dijo el hombre  que la librería es del CCS, Bueno lo compilo y buala me sale un mensaje de error o es un bugs del compilador por la siguiente declaración
  #byte DataBus = PORTD               // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS         
#byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL
 Yo estoy usando el compilador CCS 4.08 y el pic16f874a no sé si es un bugs o es que me enviaron para callarme un código cualquiera de internet por favor ayúdenme le agradesco por su comprensión.
Pd aquí le envió el código de la libreria que me entrego la empresa para el LCD espero que le sirva y me puedan a su ves ayudarme a corregir:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                   LCD.H                                                                                      //
//                                                             VERSION   2.1                                                                                 //
//                                                              JULIO 2009                                                                                 //
//                                                                                                                                                               //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
#nolist

                                             // DEFINICION DE CONSTANTES PARA USO EN FUNCIONES
#define HOME               0x02      // PARA PONER CURSOR EN LA POSICION 0 DEL DISPLAY. USAR CON WRITE_LCD_COM
#define INCREASE         0x02      // INCREMENTA CURSOR. USAR CON LCD.ID
#define DECREASE         0x00      // DECREMENTA CURSOS. USAR CON LCD.ID
#define SHIFT_ON         0x01      // SHIFT DISPLAY. USAR CON LCD.SHIFT
#define SHIFT_OFF         0x00      // NO SHIFT DISPLAY. USAR CON LCD.SHIFT
#define LCD_ON            0x04      // ACTIVA LCD. USAR CON LCD.MODE
#define LCD_OFF            0x00      // DESACTIVA LCD. USAR CON LCD.MODE
#define CURSOR_ON         0x02      // ACTIVA CURSOR. USAR CON LCD.CURSOR
#define CURSOR_OFF      0x00      // DESACTIVA CURSOR. USAR CON LCD.CURSOR
#define BLINK_ON         0x01      // ACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK   
#define BLINK_OFF         0x00      // DESACTIVA PARPADEO DEL CURSOR. USAR CON LCD.BLINK   
#define BUS_8               0x10      // DEFINE BUS DE 8 BITS. USAR CON LCD.INTERFASE
#define BUS_4               0x00      // DEFINE BUS DE 4 BITS. USAR CON LCD.INTERFASE
#define CLEAR               0x01      // LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define NOCLEAR            0x00      // NO LIMPIA DISPLAY. USAR CON FUNCION WRITE_LCD_DATA()
#define   LINE1               0x00      // PRIMERA DIRECCION DE LINEA 1.
#define   LINE2               0x40      // PRIMERA DIRECCION DE LINEA 2.
#define   LINE3               0x14      // PRIMERA DIRECCION DE LINEA 3.
#define   LINE4               0x54      // PRIMERA DIRECCION DE LINEA 4.
#define LARGO               16         // Editar esta línea para indicar la cantidad de caracteres por línea del display
#define LINEAS            2            // Editar este línea para indicar la cantidad de líneas que dispone el display
#define   NULL               0x00

#list

struct
{
   char TEXT[LARGO+1];                  // define texto para escribir en lcd   
   int ID;                                    // define si el cursor de incrementará o decrementará
   int SHIFT;                              // define el shift del cursor
   int MODE;                                 // define si el display está ON ú OFF
   int CURSOR;                              // define si el cursor estará visible
   int BLINK;                              // define si el cursor parpadeará
   int INTERFASE;                        // define interfase de 4/8 bits
} lcd;

// CONFIGURAR AQUI LOS PUERTO QUE SE USARAN PARA BUS DE DATOS Y DE CONTROL
#byte DataBus = PORTD               // DEFINE BUS DE DATOS
#byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS
#byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
#byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL

// GENERA PULSOS DE ESCRITURA PARA COMANDOS DEL DISPLAY Y SACA DATO
void WriteLcdComData(int x)
{
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = 0x00;
   DataBus = ControlBus = 0x00;
   ControlBus = 3;
   ControlBus = 0;
   ControlBus = 4;
   DataBus = x;
   ControlBus = 0;
   ControlBus = 3;
   delay_us(50);
}

// LIMPIA DISPLAY
void ClearLcd(void)
{
   WriteLcdComData(CLEAR);               // display clear
   delay_ms(2);
}

// INICIALIZA EL EL DISPLAY
 void IniLcd(void)
{
   delay_ms(20);
   WriteLcdComData(0x30);
   delay_ms(5);   
   WriteLcdComData(0x30);
   delay_us(150);
   WriteLcdComData(0x30);   
}

// CONFIGURA EL DISPLAY. LOS DATOS PARA LA CONFIGURACION DEBEN SER PUERTOS ANTES DE LLAMAR
// A ESTA FUNCION. LOS DATOS SON PARTE DE LA ESTRUCTURA LCD.
void SetupLcd(void)
{
   WriteLcdComData(0x04 | lcd.ID | lcd.SHIFT);                              //ENTRY MODE SET
   WriteLcdComData(0x08 | lcd.MODE | lcd.CURSOR | lcd.BLINK);      // DISPLAY ON OFF
   WriteLcdComData(0x28 | lcd.INTERFASE);                                    // SET FUNCTION
}

// ESCRIBE DATOS EN EL DISPLAY. X REPRSENTA DESDE QUE DIRECCIÓN DEL DISPLAY SE DESEAN ESCRIBIR LOS DATOS
// E Y INDICA SE SE LIMPIARÁ EL DISPLAY ANTES DE ESCRIBIR
// SI C = CLEAN, EL DISPLAY ES LIMPIADO
// SI C = NOCLEAN, SOLO SE ESCRIBEN LOS DATOS DESDE LA POCISION ESPECIFICADA POR POS
// LOS DATOS A ESCRIBIR DEBE SER COPIADOS PREVIAMENTE EN EL ELEMENTO LCD.TEXT DE LA ESCTRUCTIRA LCD
void WriteLcd(int pos, int c)
{
   int *p;
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = 0x00;
   DataBus = ControlBus =0x00;
   if (c)
      {
         clear_lcd();
         delay_ms(2);
      }
   pos|= 0x80;
   WriteLcdComData(pos);
   p = lcd.TEXT;
   for (; *p!=NULL; p++)
   {   
      DataBus = 0xff;
      ControlBus = 2;
      ControlBus = 1;
      ControlBus = 5;
      DataBus = *p;
      ControlBus = 1;
      ControlBus = 2;
      delay_us(50);
   }
}

void PutcLcd(int ini, char data)
{
   if (ini != CURRENT)
      {
         ini|= 0x80;
         WriteLcdComData(ini);
      }
   Tris_ControlBus = 0xF8 & Tris_ControlBus;
   Tris_DatalBus = ControlBus = 0x00;
   DataBus = 0xff;
   ControlBus = 2;
   ControlBus = 1;
   ControlBus = 5;
   DataBus = data;
   ControlBus = 1;
   ControlBus = 2;
   delay_us(50);
}

void ClearLcdLine(int x)
{
   int y;
   for (y=0; y<=LARGO; y++)
      {
         lcd.TEXT[y] = ' ';
      }
   lcd.TEXT[++y] = NULL;
   switch (x)
      {
         case 1   :   WriteLcd(LINE1,NOCLEAR);
                        break;
         case 2   :   WriteLcd(LINE2,NOCLEAR);
                        break;
         case 3  :   WriteLcd(LINE3,NOCLEAR);
                        break;
         case 4  :   WriteLcd(LINE4,NOCLEAR);
                        break;
         default :   break;
      }
}



Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema librería xlcd de C18
« Respuesta #4 en: 19 de Julio de 2009, 12:03:13 »
Hola.

Cuales son los errores que te tira el compilador?

Segun creo, lo que falta es designar a PORTD, TRISD, PORTE y TRISE las respectivas direcciones de SFR.

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema librería xlcd de C18
« Respuesta #5 en: 19 de Julio de 2009, 14:30:33 »
MLO_ por lo visto moronilehi ha posteado una rutina funcional para el control del LCD, y lo ha ha hecho en varios post antiguos  :undecided:
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Problema librería xlcd de C18
« Respuesta #6 en: 19 de Julio de 2009, 15:36:36 »
 :? :?

Eso parece .....
El papel lo aguanta todo

Desconectado moronilehi

  • PIC10
  • *
  • Mensajes: 17
Re: Problema librería xlcd de C18
« Respuesta #7 en: 20 de Julio de 2009, 17:47:07 »
hola gracias por la respuesta pero como ago lo que me estas diciendo con  los  SFR soy nuevo en la programando pic en CCS y sobre todo en c.
te agradeceria tu respuesta.


 :)

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problema librería xlcd de C18
« Respuesta #8 en: 20 de Julio de 2009, 20:00:24 »
hola gracias por la respuesta pero como ago lo que me estas diciendo con  los  SFR soy nuevo en la programando pic en CCS y sobre todo en c.
te agradeceria tu respuesta.


 :)
:mrgreen: Leí mal, pensé que era una librería que funcionaba! Lee las reglas del foro, has hecho tu consulta en varios hilos, y además este es de C18  :?

Reemplaza
Código: C
  1. #byte DataBus = PORTD               // DEFINE BUS DE DATOS
  2. #byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS        
  3. #byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
  4. #byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL

Por
Código: C
  1. #byte DataBus = 0x08              // DEFINE BUS DE DATOS
  2. #byte Tris_DataBus = 0x88         // DEFINE TRIS DE BUS DE DATOS        
  3. #byte ControlBus = 0x09           // DEFINE BUS DE CONTROL
  4. #byte Tris_ControlBus = 0x89   // DEFINE TRIS DEL BUS DE CONTROL


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado moronilehi

  • PIC10
  • *
  • Mensajes: 17
Re: Problema librería xlcd de C18
« Respuesta #9 en: 20 de Julio de 2009, 23:17:15 »
gracia por la respuesta eres el único que me ha respondido bien, hablando entre otro tema yo pensaba que este pos era para CCS ahora veo que es de otro compilador que no sabía que existía me parece súper bueno :) creo que me voy a cambiar a este compilador .bueno yo creo que el código CCS te va servir igual para tu compilador c18 debes adaptarles el código si es que lo necesita un codigo para el LCD Y C supuestamente es un estándar y este código para  lcd se ve estándar no tiene codigos de CCS puras funciones y creo que te servirá, yo busque por internet sobre c18 y los comandos usado por este código de mi lcd son puede ser usados por el C18 no debería darte ningún problema a tu compilador.yo uso el ccs pero varias veces he adaptado codigos de otras fuestes de programas de otros compiladores y no hay mucho en que cambiar.yo se que existe versiones de c para pic que son netamente distintas o codigos propios para no asustar a los chiquillos de la pos este codigo de lcd no tiene puesto casi ningun codigo o comando propio del ccs    y es casi perfecto para ustedes
lo unico que veo que puedes cambiar CCS A C18 ES EL CODIGO DE BAJO y adaptar igual que me paso endenante y agradesco por la respuesta que me dieron es:
Código: [Seleccionar]
1.#byte DataBus = PORTD               // DEFINE BUS DE DATOS2.
#byte Tris_DataBus = TRISD         // DEFINE TRIS DE BUS DE DATOS       
 3.#byte ControlBus = PORTE            // DEFINE BUS DE CONTROL
4.#byte Tris_ControlBus = TRISE   // DEFINE TRIS DEL BUS DE CONTROL
el resto del codigo es estandar.

, bueno cuidate espero que te sirva a todos ustedes que usan el c18 :-/ :D :) suerte.
« Última modificación: 20 de Julio de 2009, 23:48:54 por moronilehi »