Autor Tema: LCD.C de CCS  (Leído 10842 veces)

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

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
LCD.C de CCS
« en: 08 de Agosto de 2005, 11:03:00 »
Seguro que habeis escuchado esta pregunta mil veces!!! ¿Porque no rula el LCD con esta libreria corriendo a 20mhz y sí a 4?

¡¡He cambiado los delay_cycle por delay_us!! Y sigue sin ir ... Llorando ¿Necesita algo más? O en principio con eso basta ... de ser así me voi a volver loco.

P.D.:¿ alguien tiene el bootloader para un 877A a 4mhz y 192000bps?
Si juegas contra el mejor, pierdes como los demás.

Desconectado aprendiz_de_Pic

  • PIC10
  • *
  • Mensajes: 23
RE: LCD.C de CCS
« Respuesta #1 en: 08 de Agosto de 2005, 15:36:00 »
QUE TAL RADON

Saludos desde Mexico.  
 
Yo tengo uno lo voy a buscar, no se si te sirva pero a mi me ha funcionado bien,  lo busco y te lo mando a tu correo espero tenga espacio,  este lo uso con el PICdownloader, que tambien te anexare, suerte y cuenta si te sirvio.

Chicos del foro si a alguien mas le interesa avisenme o digan donde lo puedo subir



Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: LCD.C de CCS
« Respuesta #2 en: 09 de Agosto de 2005, 03:32:00 »
si el lcd de ccs no funciona a 20Mhz tambien me interesa a mi que lo publiques el que funciona. PEgalo aqui si te parece
Gracias

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: LCD.C de CCS
« Respuesta #3 en: 09 de Agosto de 2005, 04:49:00 »
Muchas gracias, mi correo es : the_radon@hotmail.com

Aver si alguien tiene algo para el LCD a 4 bits y 20 Mhz ...
Respecto al bootloader tb uso el PICdownloader solo que para el 877A solo encuentro  a 20mhz y no a 4mhz (que si tengo para la version 877 pero no sirve para el "A"Giño Avergonzado
Si juegas contra el mejor, pierdes como los demás.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: LCD.C de CCS
« Respuesta #4 en: 09 de Agosto de 2005, 05:02:00 »
Juas, esto me pasa por no leer ... acabo de ver esta nota:


Info on Crystal-Frequency and Baudrate:

The Bootloaderfile for 16MHz/38400bps can also be used
for 8MHz/19200bps or 4MHz/9600bps

The Bootloaderfile for 20MHz/38400bps can also be used
for 10MHz/19200bps

AvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzadoAvergonzado

Pero sigo con la pega del LCD, me gustaria hacerlo andar a 20 Mhz RollEyes
Si juegas contra el mejor, pierdes como los demás.

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: LCD.C de CCS
« Respuesta #5 en: 09 de Agosto de 2005, 06:55:00 »
Hola, yo lo tengo funcionando a 20MHz con este driver.
El driver es marca de la casa, lo adapte para poder utilizar cualquier pin del pic, asi que tambien servira para la gente que buscaba algo asi.

Codigo:

// coach_lcd.c
//
// Funciones para la gestion del display 2x16 [ByCoach]:
//
//  lcd_iniciar()   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.

//Definición de pines:

#define   lcd_rs      PIN_C0                                          //
#define   lcd_rw      PIN_C1                                          //
#define   lcd_en      PIN_C2                                          //
#define   lcd_DB4      PIN_C4                                          //
#define   lcd_DB5      PIN_C5                                          //
#define   lcd_DB6      PIN_C6                                          //
#define   lcd_DB7      PIN_C7   

void   lcd_enviar_nibble( int nibble )
{
   output_bit( lcd_DB4, bit_test( nibble, 0 ) );   //Pone en el puerto B[4..7] el valor en nibble[0..3]
   output_bit( lcd_DB5, bit_test( nibble, 1 ) );
   output_bit( lcd_DB6, bit_test( nibble, 2 ) );
   output_bit( lcd_DB7, bit_test( nibble, 3 ) );
   delay_us( 1 );
   output_high( lcd_en );   //Activa y desactiva enable para que el lcd capture el nibble
   delay_us( 2 );
   output_low( lcd_en );
}

int   lcd_leer_byte( void )
{
   int valor = 0;

   output_high( lcd_rw );   //Se activa rw indicando que se va a realizar una lectura
   delay_us( 1 );
   output_high( lcd_en );   //Se activa enable para que el lcd saque la parte alta del byte deseado
   delay_us( 1 );         //por los pines de datos
   
   if( input( lcd_DB7 ) )   //Se captura la parte alta del byte deseado
      bit_set( valor, 7 );
   if( input( lcd_DB6 ) )
      bit_set( valor, 6 );
   if( input( lcd_DB5 ) )
      bit_set( valor, 5 );
   if( input( lcd_DB4 ) )
      bit_set( valor, 4 );

   output_low( lcd_en );   //Se desactiva y se vuelve a activar enable para que el lcd saque la parte
   delay_us( 1 );         //baja del byte deseado por los pines de datos
   output_high( lcd_en );
   delay_us( 1 );

   if( input( lcd_DB7 ) )   //Se captura la parte baja del byte deseado
      bit_set( valor, 3 );
   if( input( lcd_DB6 ) )
      bit_set( valor, 2 );
   if( input( lcd_DB5 ) )
      bit_set( valor, 1 );
   if( input( lcd_DB4 ) )
      bit_set( valor, 0 );

   output_low( lcd_en );   //Se desactiva enable, indicando al lcd el fin de la lectura del byte

   return( valor );   //Devuelve el byte capturado
}

void   lcd_enviar_byte( int dir, int valor )   //Si recibe en dir un 1 se trata de un dato y si es un 0 es un comando
{
   output_low( lcd_rs );
   while( bit_test( lcd_leer_byte(), 7 ) );   //Lectura del Flag de Busy (ocupado), si 1 se espera, si 0 se continúa
   output_bit( lcd_rs, dir );               //Se asigna a rs el valor de dir para indicar si es dato o comando
   delay_us( 1 );
   output_low( lcd_rw );            //Se pone a cero rw para indicar que se va a realizar una escritura
   delay_us( 1 );
   output_low( lcd_en );            //Se pone a cero enable para preparar el valor a enviar
   lcd_enviar_nibble( valor >> 4 );   //Se envía primero la parte alta del byte
   lcd_enviar_nibble( valor & 0x0F );   //a continuación se envía la parte baja
}

void   lcd_posicionar( int x, int y )      //Se reciben las coordenadas x e y a las que se desea desplazarse
{
   int   dir;

   if ( y != 1 )      //La posición "y" determinará la línea elegida, si es 1 -> Línea 1, si no -> Línea 2
      dir = 0x40;      //Dirección de la RAM del LCD para la 2ª línea
   else
      dir = 0x00;      //Dirección de la RAM del LCD para la 1ª línea

   dir += x - 1;      //Resta uno, ya que la posición 1 sería la 0 para el lcd
   lcd_enviar_byte( 0, dir | 0x80 );   //Se envía el byte, indicando que es un comando y poniendo el bit
}                              //más significativo a 1, para diferenciar este comando de los demás

void   lcd_iniciar( void )
{
   int   i;
   int   bytes_inicio[4] = { 0x28, 0x0C, 0x01, 0x06 };

   output_low( lcd_rs );      //Pone a cero todos los pines de control
   output_low( lcd_rw );
   output_low( lcd_en );
   delay_ms( 30 );
   
   for ( i = 1 ; i <= 3 ; i++ )
   {
      lcd_enviar_nibble( 3 );
      delay_ms( 5 );
   }
   
   lcd_enviar_nibble( 2 );

   for( i = 0 ; i <= 3 ; i++ )      //Se configura el lcd con las características indicadas anteriormente
      lcd_enviar_byte( 0 , bytes_inicio );
}

void   lcd_putc( char c )   //Se recibe el caracter a enviar
{
   switch( c )
   {
      case "f" :   lcd_enviar_byte( 0, 1 );   //Si c = "f", se envía un 1, e indica que es un comando
               delay_ms( 2 );            //Enviando un 1, se borra la pantalla del lcd
               break;
      case "
" :   lcd_posicionar( 1, 2 );      //Si c = "
", se posiciona en la segunda línea
               break;
      case "" :   lcd_enviar_byte( 0, 0x10 );   //Si c = "", se sitúa una posición a la izquierda
               break;
      default   :   lcd_enviar_byte( 1, c );   //Si no es ninguna de las anteriores, envía un caracter
               break;
   }
}

char   lcd_getc( int x,int y )   //Se reciben las coordenadas x e y de las que se desea el dato
{
   char   valor;
   lcd_posicionar( x, y );      //Se posiciona en el punto deseado
   output_high( lcd_rs );      //Pone a 1 el pin rs, indicando que se trata de un dato
   valor = lcd_leer_byte();   //Lee el byte de la posición deseada
   output_low( lcd_rs );
   return( valor );         //Devuelve el caracter leído
}




Espero haberos ayudado Giño

Saludos y buen verano! Divertido
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: LCD.C de CCS
« Respuesta #6 en: 09 de Agosto de 2005, 08:41:00 »
Muchas gracias!!! lo probare en cuanto pueda ..RebotadoRebotadoRebotadoRebotadoRebotado
Si juegas contra el mejor, pierdes como los demás.

Desconectado aprendiz_de_Pic

  • PIC10
  • *
  • Mensajes: 23
RE: LCD.C de CCS
« Respuesta #7 en: 09 de Agosto de 2005, 11:27:00 »
Que tal chicos una disculpa Enfurruñado .   Yo me referia a la peticion de la P.D  sobre que necesitaba radon un bootloader y no al LCD.  Digo solo para hacer la aclaracion.

Me acabo de conectar radon asi que en unos instantes te mando el bootloader junto con el Picdownloader,  espero te sea de utilidad.


y reitero si alguin mas lo necesita digan donde lo subo? ó denme su direccion y se los haré llegar.

David
Saludos desde México

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: LCD.C de CCS
« Respuesta #8 en: 09 de Agosto de 2005, 16:06:00 »
A mi me interesan gracias
masmontero@hotmail.com

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
RE: LCD.C de CCS
« Respuesta #9 en: 09 de Agosto de 2005, 16:54:00 »
Hola:

A mi tambien me interesa....

g_lafebre@yahoo.com

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: LCD.C de CCS
« Respuesta #10 en: 16 de Agosto de 2005, 07:07:00 »
YO probe tu driver y no me funciona ni a 4 MHZ, querria ponerlo en marcha y no se porque no va. TEngo uno que me funciona bien a 4 pero quiero hacer trabajar el 16F877 a 20 y usar el tuyo. ME gusta como esta hecho.
DIme que programa de pruebas utilizas o con que aplicacion cargada en el pic a ver si veo donde esta el fallo.
Gracias

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: LCD.C de CCS
« Respuesta #11 en: 16 de Agosto de 2005, 08:01:00 »
Yo no he tenido tiempo para probarlo aún, ¿y dices que no te va? ¿Estas seguro que has configurado los pines correctamente en el LCD?

Codigo:

#define   lcd_rs      PIN_C0                                          //

#define   lcd_rw      PIN_C1                                          //

#define   lcd_en      PIN_C2                                          //

#define   lcd_DB4      PIN_C4                                          //

#define   lcd_DB5      PIN_C5                                          //

#define   lcd_DB6      PIN_C6                                          //

#define   lcd_DB7      PIN_C7   



Tu nos dirás Flash
Si juegas contra el mejor, pierdes como los demás.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: LCD.C de CCS
« Respuesta #12 en: 16 de Agosto de 2005, 08:07:00 »
he cambiado el puerto al D, es el unico cambio. Bueno tambien el nombre de las funciones para que sean identicas a en las dos librerias.
TE pego el cambio

//Definicion de pines:

#define   lcd_rs      PIN_D0                                          //
#define   lcd_rw      PIN_D1                                          //
#define   lcd_en      PIN_D2                                          //
#define   lcd_DB4      PIN_D4                                          //
#define   lcd_DB5      PIN_D5                                          //
#define   lcd_DB6      PIN_D6                                          //
#define   lcd_DB7      PIN_D7
 
Es similar al de la otra libreria


y solo el nombre de las funciones que pasan a ser lcd_init()
es la unica que cambie.
Lo demas quedo igual y no va en ese puerto.

En otro post estan pegadas las dos librerias la que funciona y la que no, echale un vistazo, te estare muy agradecido-

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: LCD.C de CCS
« Respuesta #13 en: 16 de Agosto de 2005, 08:08:00 »
por cierto lo de usar el D no es mania mia sino que uso I2C y RS232 y queria dejar el puerto C libre para eso.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: LCD.C de CCS
« Respuesta #14 en: 16 de Agosto de 2005, 08:10:00 »
Ya, yo tb uso el puerto D para el LCD, ademas es el mas indicado, el A son para los analogicos al igual que el E, el B son para entradas sobre todo por ello de las resistencias pull-up, así que, el msa idoneo es el D para esta labor Muchas risas
Si juegas contra el mejor, pierdes como los demás.