TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: elpeibel en 19 de Abril de 2009, 13:20:05

Título: Usar puerto a invertido para LCD
Publicado por: elpeibel en 19 de Abril de 2009, 13:20:05
Buenas a todos, ante todo agradecer vuestro trabajo.

Y al tema.

Uso un pic 18F2550, compilador ccs pcwhd 4.084.

Estoy usando un LCD 44780 en el puertoA con el siguiente mapeo:
//     A0  D4
//     A1  D5
//     A2  D6
//     A3  D7
//     A4  enable
//     A5  rs

Funciona bien pero no me gusta nada como lo he conseguido.

os pego el codigo y os explico:

struct lcd_pin_map {               
           int     data : 4;
           BOOLEAN enable;           
           BOOLEAN rs;               
           BOOLEAN unused1;               
           BOOLEAN unused2;           
        } lcd;
//
//#if defined(__PCH__)
#byte lcd = 0xF80                   // This puts the entire structure


hasta aqui seria el puerto de datos invertdo a como lo tengo en la pcb, hasta ahora D4 sería A0, D5->A1....  para invertirlo y dejerlo como en la pcb(D7 en A0, D6 en A1....) tengo una rutina que lo invierte:

BYTE inv(byte n){
   
   BYTE i;
 
   if (bit_test(n,0))
      bit_set(i,3);
   else
      bit_clear(i,3);
     
   if (bit_test(n,1))
      bit_set(i,2);
   else
      bit_clear(i,2);
     
   if (bit_test(n,2))
      bit_set(i,1);
   else
      bit_clear(i,1);
     
   if (bit_test(n,3))
      bit_set(i,0);
   else
      bit_clear(i,0);
 
   return i;
}

y cuando send_nibble escribe en el puerto llama a esta rutina,  de la siguiete forma:

void lcd_send_nibble( BYTE n ) {
      lcd.data = inv(n);
      ...
      ...


en fin estoy seguro que hay otra forma mejor de hacerlo por ejemplo cuando defino el struct, si me pudieran ayudar estaré muy agradecido.

Saludos
Título: Re: Usar puerto a invertido para LCD
Publicado por: josnelihurt en 19 de Abril de 2009, 14:03:52
Hola, hace un tiempo intente acomodar los pines para el manejo de la LCD en diferentes pines del pic, por comodidad al montar, el problema es que el disco duro en que tenia eso murio por una descarga electrica, pero recuerdo que modificando la libreria o implementado una nueva puedes llegar a hacerlo la que yo use se llamaba flex_lcd.c creo que es muy parecida a esta, Espero haber sido de ayuda
http://hades.mech.northwestern.edu/wiki/index.php/C_Example:_Parallel_Interfacing_with_LCDs (http://hades.mech.northwestern.edu/wiki/index.php/C_Example:_Parallel_Interfacing_with_LCDs)
Título: Re: Usar puerto a invertido para LCD
Publicado por: elpeibel en 20 de Abril de 2009, 17:58:53
Muchas gracias, me sirvió mucho, me vino perfecto.

Gracias y saludos