Autor Tema: LCD LOKA  (Leído 1599 veces)

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

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
LCD LOKA
« en: 24 de Abril de 2006, 14:55:27 »
Hola amigos estoy realizando un programa para una LCD el caso es que lo pruebo en el proteus y funciona sin problemas, pero lo paso al pic y no hay manera de hacerlo funcionar correcto podeis echarle un vistazo al programa?


Código: [Seleccionar]
#include <16F877A.h>
#device adc=8

#FUSES NOWDT                  //No Watch Dog Timer
#FUSES XT                    //Crystal osc <= 4mhz
#FUSES NOPUT                  //No Power Up Timer
#FUSES NOPROTECT              //Code not protected from reading
#FUSES NODEBUG                //No Debug mode for ICD
#FUSES BROWNOUT              //Reset when brownout detected
#FUSES LVP                    //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOCPD                  //No EE protection
#FUSES NOWRT                  //Program memory not write protected

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)

#include "I:\Menu\menu.h"
#include <lcd.c>
#include <ctype.h>
#include <string.h>


//-----------------------------------E/S PIC----------------------------------

#define subir bit_test(input_b(),0)
#define bajar bit_test(input_b(),1)
#define aceptar bit_test(input_b(),4)
#define cancelar bit_test(input_b(),5)

//---------------------------------DEFINICIONES-------------------------------


//****************************Definicion de Funciones*************************

void MENU_CERO(void);
void MENU_UNO(void);
void MENU_DOS(void);
void MENU_TRES(void);


//##############################################################################

int menuLCD=0,i=0,t=0,r=0;
 int menu=0,LCDACTIV=0;
 long int tiempo = 250;

#int_TIMER0
TIMER0_isr()
{
i++;

if (i>244)
   {
   i=0;
   t++;

   if(t=244)
      {
      t=0;
      r++;
      if(r>1)
      {
         r=0;
         LCDACTIV=0;
         menu=0;

      }
   }
   }
}

//##############################################################################


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);

   set_tris_b(0xFF);

   lcd_init();
   lcd_gotoxy (1,1);
   Printf(lcd_putc,"PRESENTACION");//
   delay_ms(500);



   while (menu!=10)
      {

      while (LCDACTIV==0 && menu==0)
      MENU_CERO();

      while (LCDACTIV==1 && menu==1)
      MENU_UNO();

      while (LCDACTIV==1 && menu==2)
      MENU_DOS();

      while (LCDACTIV==1 && menu==3)
      MENU_TRES();
      }



}


//##############################################################################

   void MENU_CERO()
   {
     
   lcd_init();
   lcd_gotoxy (1,1);
   Printf(lcd_putc,"FUERA DE MENU");//
   delay_ms(500);

   if (aceptar==0)
      {
      menu=1;
      LCDACTIV=1;
      delay_ms(tiempo);
      }

   if (cancelar==0)
      {
      menu=3;
      LCDACTIV=1;
      delay_ms(tiempo);
      }
     
   }


   void MENU_UNO()
   {
   lcd_init();
   lcd_gotoxy (1,1);
   Printf(lcd_putc,"Es el menu 1");//
   lcd_gotoxy (1,2);
   Printf(lcd_putc,"detras    alante");
   delay_ms(500);
   while (menu==1)
      {
      if (cancelar==0)
        {
        LCDACTIV=0;
        menu=0;
        delay_ms(tiempo);
        }

      if (aceptar==0)
        {
        LCDACTIV=1;
        menu=2;
        delay_ms(tiempo);
        }
      }
   }

   void MENU_DOS(void)
   {
   lcd_init();
   lcd_gotoxy (1,1);
   Printf(lcd_putc,"Es el menu 2");//
   lcd_gotoxy (1,2);
   Printf(lcd_putc,"detras    alante");
   delay_ms(500);
   while (menu==2)
      {
      if (cancelar==0)
        {
        LCDACTIV=1;
        menu=1;
        delay_ms(tiempo);
        }

      if (aceptar==0)
        {
        LCDACTIV=1;
        menu=3;
        delay_ms(tiempo);
        }
      }
   }

   void MENU_TRES(void)
   {
   lcd_init();
   lcd_gotoxy (1,1);
   Printf(lcd_putc,"Es el menu 3");//
   lcd_gotoxy (1,2);
   Printf(lcd_putc,"detras    alante");
   delay_ms(500);
   while (menu==3)
      {
      if (cancelar==0)
        {
        LCDACTIV=1;
        menu=2;
        delay_ms(tiempo);

        }

      if (aceptar==0)
        {
        LCDACTIV=0;
        menu=0;
        delay_ms(tiempo);
        }
      }
   }


« Última modificación: 24 de Abril de 2006, 14:57:39 por qiqe »
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: LCD LOKA
« Respuesta #1 en: 24 de Abril de 2006, 15:21:40 »
Hola, pues asi a simple vista veo un pequeño fallo, es en la rutina de interrupción del timer 0, tienes una comparacion asi: if(t=244), en realidad eso no es una comparacion sino una asignacion, con lo cual le estas asignando a t 244, para hacer la comparacion es con ==, que de hecho mas abajo si lo haces bien. Otra cosa que veo es que configuras el puerto B como entradas, y si es donde esta conectado el LCD deberian de ser salidas, aunque supongo que en lcd_init(), se configuraran correctamente. Por lo demas no veo fallos, asi que en teoria deberia de funcionar.

Un saludo.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: LCD LOKA
« Respuesta #2 en: 24 de Abril de 2006, 15:34:14 »
muchas gracias lo de las comparaciones y asignacones me lleva de cabeza siempre dando cabezazos ... pero se me sigue colgando voy a seguir revisando muchas gracias ;)
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: LCD LOKA
« Respuesta #3 en: 24 de Abril de 2006, 15:43:54 »
Haber si va ser problema del montaje....has puesto el potenciometro en los pines del contraste para la lcd???


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: LCD LOKA
« Respuesta #4 en: 24 de Abril de 2006, 20:10:35 »
Hola quique!

Yo tengo especial paranoia con:

#FUSES LVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)

Yo siempre desactivo esta opción porque me ha dado ya muchos quebraderos de cabeza. Si no lo haces ten en cuante que RB3 tiene que ir a tierra.


Un saludo desde Alicante.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: LCD LOKA
« Respuesta #5 en: 25 de Abril de 2006, 15:58:25 »
azicuetano y demás muchas gracias ciertamente era el LVP me volvió loko este fuse :S:S
jeje
ahora parece que no hace tonterias a parte de las que le lio yo jeje muchas gracias compañeros
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!