Autor Tema: configuracion lcd pic18f4550 libreria modificada  (Leído 4772 veces)

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

Desconectado jaimearmandofc

  • PIC10
  • *
  • Mensajes: 22
configuracion lcd pic18f4550 libreria modificada
« en: 03 de Agosto de 2011, 19:08:34 »
estoi aprendiendo css, y he configurado la siguiente libreria para usar un lcd en el pic 18f4550 y al parecer funciona y compila, pero el puerto que le indique es el B y en proteus envia datos en el puerto D, que puede ser??

libreria:
Código: [Seleccionar]
///////////////////////////////////////////////////////////////////////////
// LCD.C modificada por uControl.com.ar                                   
///////////////////////////////////////////////////////////////////////////
//     B0 
//     B1 
//     B2  E
//     B3  RS
//     B4  D4
//     B5  D5
//     B6  D6
//     B7  D7
//   (Sin 'RW')
//
// Funciones soportadas:
//                         lcd_init()
//                         lcd_gotoxy( BYTE col, BYTE fila)
//                         lcd_putc( char c)
//                              \f  Clear display                             
//                              \n  Go to start of second line               
//                              \b  Move back one position
//
///////////////////////////////////////////////////////////////////////////
#define use_portb_lcd TRUE  //LCD conectado al puerto b.
//
struct lcd_pin_map {
   BOOLEAN unused1; // RB0
   BOOLEAN unused2; // RB1
   BOOLEAN enable;  // RB2
   BOOLEAN rs;      // RB3
   int data : 4;    // RB4-RB7
} lcd;
//
#byte lcd = 0xF81  // Direccion de la estructura "lcd".
#byte lcd = 6      // Direccion del puerto B.
#define set_tris_lcd(x) set_tris_b(x)
#define lcd_type 2           // Tipo de LCD: 0=5x7, 1=5x10, 2=2 lineas
#define lcd_line_two 0x40    // Dirección de la LCD RAM para la 2da. linea
//
//Defino la cadena de inicializacion del LCD.
BYTE const LCD_INIT_STRING[4] = {0x20 | (lcd_type << 2), 0xc, 1, 6};
//
//Configuro el estado de cada pin para lectura y escritura:
struct lcd_pin_map const LCD_WRITE = {0,0,0,0,0}; // Escribir.
struct lcd_pin_map const LCD_READ = {0,0,0,0,15}; // Leer.
//
//Funciones:
BYTE lcd_read_byte() {
      BYTE low,high;
      set_tris_lcd(LCD_READ);
      delay_cycles(1);
      lcd.enable = 1;
      delay_cycles(1);
      high = lcd.data;
      lcd.enable = 0;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(1);
      low = lcd.data;
      lcd.enable = 0;
      set_tris_lcd(LCD_WRITE);
      return( (high<<4) | low);
}
//
void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}
//
void lcd_send_byte( BYTE address, BYTE n ) {
      lcd.rs = 0;
      while ( bit_test(lcd_read_byte(),7) ) ;
      lcd.rs = address;
      delay_cycles(1);
      delay_cycles(1);
      lcd.enable = 0;
      lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);
}
//
void lcd_init() {
    BYTE i;
    set_tris_lcd(LCD_WRITE);
    lcd.rs = 0;
    lcd.enable = 0;
    delay_ms(15);
    for(i=1;i<=3;++i) {
       lcd_send_nibble(3);
       delay_ms(5);
    }
    lcd_send_nibble(2);
    for(i=0;i<=3;++i)
       lcd_send_byte(0,LCD_INIT_STRING[i]);
}
//
void lcd_gotoxy( BYTE x, BYTE y) {
   BYTE 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;
   }
}


programa:
Código: [Seleccionar]
#include <fuses.h>

#include <lcd_sin_rw.c>

//------Prototipos de funciones-----
void lcd_saludo_inicial(void);


void main(){
   //-----Inicializo el LCD y muestro

lcd_init();
   lcd_saludo_inicial();
 
}

void lcd_saludo_inicial(void) {
   Lcd_putc ("uControl.com.ar");   //Escribo en la primera fila
   delay_ms(2000);                 //Espero dos segundos
   lcd_gotoxy(4,2);                //columna 4, fila 2
   Lcd_putc( " LCD en CCS");       //Escribo en la segunda fila
   delay_ms(3000);                 //Espero tres segundos
   Lcd_putc( "\f");                //Limpio pantalla
}


fuses:
Código: [Seleccionar]
#include <18f4550.h>  //archivo de cabecera
//#fuses HSPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,NOVREGEN,NOPBADEN // Fuses a declarar

#fuses INTEC, VREGEN, NOWDT, NOPBADEN, NOMCLR //FUSES

#use delay(clock=4000000) // clock obtenido de 96/2=48Mhz, se debe declarar el cristal de clok a utilizar

Desconectado jaimearmandofc

  • PIC10
  • *
  • Mensajes: 22
Re: configuracion lcd pic18f4550 libreria modificada
« Respuesta #1 en: 03 de Agosto de 2011, 19:49:18 »
lo sesolvi, el problema es que en proteus habia cargado otro *.hex jaja, pero ya esta funcionando a full, seguire con el proyecto, ahora viene la comunicacion USB


 

anything