• Martes 28 de Octubre de 2025, 22:48

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - roseta

Páginas: [1]
1
Programación en C / Re: Escribir En Lcd
« en: Martes 19 de Septiembre de 2006, 09:47 »
Hola amigos,

Finalmente he logrado que el lcd se me inicializara. Pero ahora tengo dos problemillas un poco graves...

1. Una vez inicializado el cursor se m pone en la primera posicion y después m salta a la 2a linia y se situa en el medio mas o menos.

2.Y ES EL MAS IMPORTANTE es que no consigo que salga ningún caracter.

Alguien m puede ayudar?? Sobretodo a visualizar el caracter o q m salga un HOLA MUNDO.

Os adjunto mi programa.

Muchas gracias.

Hitachi 44780u (Bus 8 datos)
PIC 18F458.

La funcion "escriure"  es la que teoricamente tiene q escribir.

Gracias

#include <p18f458.h>
#include <delays.h>
#include <portb.h>

#define RETRASO 0xFFFF

char vector[]={'h','o','l','a',' ','p','e','',''};
int i;
void pausa(unsigned int retraso)
{
        while (retraso>0) {
          retraso--;
  }  
}


void enable (void)
{
   TRISE=0x00;

   PORTE=0x04;
   pausa(RETRASO);
   PORTE=0x00;
   pausa(RETRASO);
   
}


void lcd_ini (void)
{
   TRISD=0x00;
   TRISE=0x00;
   
   PORTE=0x00;      //per aqui en estes funcions fa falta lo del flag de busy pq no mirem en cap moment si la cosa esta plena i es pot enviar o no..///
   pausa(RETRASO);
   PORTD=0x38;
   pausa(RETRASO);
   enable();
   pausa(RETRASO);
   PORTD=0x00;
   pausa(RETRASO);
   
   PORTE=0x00;
   pausa(RETRASO);
   PORTD=0x038;
   pausa(RETRASO);
   enable();
   pausa(RETRASO);
   PORTD=0x00;
   pausa(RETRASO);
   
   PORTE=0x00;
   pausa(RETRASO);
   PORTD=0x038;
   pausa(RETRASO);
   enable();
   pausa(RETRASO);
   PORTD=0x00;
   pausa(RETRASO);

}


void escriure (void)
{

   //for(i=1;i<10;i++)
   //{
      TRISE=0x00;
      TRISD=0x00;

      PORTE=0x00;
      pausa(RETRASO);
      PORTD=vector[1];
      pausa(RETRASO);
      PORTE=0x01;
      pausa(RETRASO);
      enable();
//}
}
void main (void)
{
   lcd_ini();
   
   TRISD=0x00;
   
   PORTE=0x00;
   pausa(RETRASO);
   PORTD=0x01;      //Borra LCD y home
   pausa(RETRASO);
   enable();
   pausa(RETRASO);
   PORTD=0x00;
   pausa(RETRASO);

   
   PORTE=0x00;
   pausa(RETRASO);
   PORTD=0x0F;      //LCD on, curosr on, parpadeo on
   pausa(RETRASO);
   enable();
   pausa(RETRASO);
   PORTD=0x00;
   pausa(RETRASO);

   PORTE=0x00;
   pausa(RETRASO);
   PORTD=0x80;      //No sé exactamenent pq es fa....
   pausa(RETRASO);
   enable();
   pausa(RETRASO);


   escriure();
}

2
Programación en C / Lcd Hitachi
« en: Martes 5 de Septiembre de 2006, 10:59 »
Hola amigos...

No hay manera q consiga inicializar mi LCD!! Os adjunto el programa q he hecho siguiendo el diagrama de flujo que llevaba el manual del LCD.

Por otra parte no se pq el MPLAB al hacer una simulacion y activar el watch no hacce caso de lo que digo. Por ejemplo, cuando toco el puerto E sólo cambia el LATE y el PORTE sigue igual!!!! Esto pq ocurre, y en consecuencia si no se cambia el PORTE no puedo hacer el STROBE.

Muchas gracias por todo.

Ya se que el programa es muy simple y no hay funciones pero es que lo hice asi para comprobar cosas.

**************************************
#include <p18f458.h>
#include <delays.h>
#include <portb.h>





void ini_lcd (void)
{
   
   TRISD=0x00;
   TRISE=0x00;

   PORTEbits.RE2=0;
   PORTEbits.RE1=0;
   PORTEbits.RE0=0;
   Delay10TCYx(1);
   
//*******************************ENVIO TRE VEGADES AQUESTA COMANDA NO SE EXACTAMENT PQ*****************//
   PORTD=0x038;
   Delay10TCYx(1);
   PORTEbits.RE2=1;   //Strobe
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);
   Delay10KTCYx(1);   //Retraso de 64ms
   

   PORTD=0x038;
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);
   Delay10KTCYx(1);

   PORTD=0x038;
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);
   Delay10KTCYx(1);


//*********************EMPEZAMOS CON EL PLOWCHART DE INICIALIZACIÓN**************//

   PORTEbits.RE0=0;  //comando de control
   PORTEbits.RE2=0;  //enable=0 i encara no se pq

   PORTD=0x38;     //FUNCTION SET//
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);

   PORTD=0x0F;   // Display ON/OFF
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);
   

   PORTD=0x01;   //Display Clear
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);

   PORTD=0x07;   //Entry Mode Set
   Delay10TCYx(1);
   PORTEbits.RE2=1;
   Delay10TCYx(1);
   Delay10TCYx(1);
   PORTEbits.RE2=0;
   Delay10TCYx(1);

}
   
void main (void)
{
   ini_lcd();
}

*************************
PIC: 18f458
LCD: hitachi 44780u de un bus de datos de 8 bits.

Si alguien ha trabajado con estos dos componentes y tiene el código m lo podria pasar por favor??

Muchísimas gracias a todos

MPLAB v7.20

3
Programación en C / Lcd Hitachi 44780
« en: Jueves 17 de Agosto de 2006, 11:12 »
Hoa a todos,

Mi problema esta en que cuando yo hago el programa en c para inicializar mi LCD siguiendo el diagrama marcado por el fabricante, no me hae caso.

Preguntaba a ve si alguien podria mandarme un codigo de inicializacion del LCD con un PIC18F458.

Soy nueva en el foro, así que pido disculpas por adelantado si no he seguido alguna norma del foro.

Muchas gracias.

Páginas: [1]