• Miércoles 15 de Mayo de 2024, 06:29

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.


Mensajes - 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 / Re: Lcd Hitachi 44780
« en: Jueves 24 de Agosto de 2006, 10:42 »
Hola,

Muchas gracias por haberme ayudado. El display continua sin funcionar pero espero que algun día de estos funcione (esto del pic es desesperante).

Tengo una pregunta tecnica y he pensado haber si m podeis ayudar.

Mi pic(18F458) funciona a 40MHz, y yo calculé que una instruccion duraba 25.6 us.
No se si está bién. Otra cosa que quisiera saber es si el tema del prescaler afecta al timpo de una instruccion. Diria que no, q afecta a temas de timer y eso, pero ya  no se que mirar.

Lo del send nibbe, me limite a poner q PORTD=dat(en hexadecimas de 8 bits) y hacer un strobe con el enable.

Bueno, muchísimas gracias por todo!!!

Adios!!!

4
Programación en C / Re: Lcd Hitachi 44780
« en: Martes 22 de Agosto de 2006, 10:38 »
Hola,

Primero daros la gracias por contestar a mi POST. Quzá la pregunta sea un poco tonta pero el el programa q enviaste(lcd.h) es para un display de 4bits de datos no??Entonces lo que tengo q hacer es aplicarlo con un LCD de 8 bits, no??O sea, la función send_nibble puede ser directamente de 8 bits, no?? Me parece que mi compilador no reconoce la variable byte(puede ser??). Y también tengo problemas con el boolean dentro la estructura. Sabéis como puedo arreglar esto?? Declarando boolean como variable?? Tengo que declarar tb la estructura?? Qué hago con el Byte??

Bueno, perdonad por las múltiples preguntas que os hago. Supongo que las podre ir reparando yo misma con el tiempo..

oid init_lcd()
{
   port_lcd.lcd_rs = 0;
   port_lcd.lcd_e = 0;
   delay_ms( 60 );
   lcd_send_nibble( 3 );
   delay_ms( 20 );
   lcd_send_nibble( 3 );
   delay_ms( 20 );
   lcd_send_nibble( 3 );
   delay_ms( 20 );
   lcd_send_nibble( 2 );

No estiendo esta parte del código a la hora de inicializar?? Pq 4 veces la funcion send_nible???

Muchísimas gracias!!!

Nos vemos!!

5
Programación en C / Re: Lcd Hitachi 44780
« en: Viernes 18 de Agosto de 2006, 10:06 »
Hola!!!

Perdonad por los pocos datos que os di, iré mejorando...Mi compilador es el MPLAb IDE 7.20 con el programador ICD2. Los puertos que uso son:

PORTE para los bits de control y PORTD para el bus de datos. El bus de datos es de 8 bits.

Las opciones que pretendo configurar son: 2-line mode, 5x8 Dots...aunque esto ya se que es secundario y se puede cambiar.

Tambié pediría por favor al final una pequeña función que me saque una letra.

Espero haberos dado toda la información, si necesito buscar alguna otra información ponedme sobre la pista y ya la busco.

muchísimas gracias.

6
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]