Autor Tema: Problemas Lcd y memoria eeprom externa  (Leído 1410 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado MexaTronko

  • PIC10
  • *
  • Mensajes: 38
Problemas Lcd y memoria eeprom externa
« en: 13 de Mayo de 2012, 18:34:20 »
Hola a todos, espero que me puedan ayudar a correjir mi error. Estoy haciendo un programa en ccs c, este programa trata de sensar voltaje de tal manera que se toman dos valores ( valor1 y valor2 ) separados cada 1mseg los cuales se comparan y si es mayor el valor1 que el valor2, mediante 12c pide la hora al ds1307 y guarda la hora en una memoria eeprom externa, si el valor1 es menor al valor2 hace lo mismo, pide y guarda la hora, si es igual el valor1 a 1023 del adc el lcd imprime un mensaje de encendido, si el valor1 es igual 0 el lcd imprime el mensaje de apagado y es aqui el problema porque no lo hace y aparte se salta las dos comparaciones anteriores, pero cuando quito la parte en que el lcd mande algun mensaje funciona bien, no se si la parte del lcd afecte la comunicacion 12c, otro problema que tengo es que hise un 'menu' con un switch pero no funciona, lo hise aumentando una variable, no se si este haciendo bien la parte de los case dejo mi codigo para que me puedan ayudar a encontrar mi error.

#include <18F4550.H>
#device ADC = 10
#fuses XT, MCLR, NOWDT, NOPROTECT, NOPUT, NOLVP
#use delay( clock = 4M )
#use I2C( Master, SCL = PIN_C0, SDA = PIN_C1, SLOW )
#include <LCD.C>

int Horas, Minutos, Segundos;
int16 Vadc, Vax, Dir;

void WEEPROM( long int Dir, BYTE Dato )
   {
      short int h;
     
      i2c_start();      //Inicia la comunicacion.
      i2c_write( 0xA0 );   //Direccion de memoria para escribir.
      i2c_write( Dir >> 8 );  //Inicia en la parte de arriba de la memoria.
      i2c_write( Dir );    //Y Despues en la parte de abajo de la memoria.
      i2c_write( Dato );   //Dato que se quiere escribir.
      i2c_stop();          //Finaliza la comunicacion. 
      i2c_start();      //Inicia la escritura.
     
      h = i2c_write( 0xA0 );
     
      while( h == 1 )
         {
            i2c_start();   //Inicia la escritura.
            h = i2c_write( 0xA0 );
         }
   }
   
BYTE REEPROM( long int Dir )
   {
      BYTE Date;
     
      i2c_start();      //Inicia la comunicacion.
      i2c_write( 0xA0 );   //Direccion de memoria para escribir.
      i2c_write( Dir >> 8 );  //Inicia en la parte de arriba de la memoria.
      i2c_write( Dir );    //Y Despues en la parte de abajo de la memoria.
      i2c_start();         //Inicia la lectura.
      i2c_write( 0xA1 );   //Direccion de memoria para leer.
      Date = i2c_read( 0 );
      i2c_stop();          //Finaliza la comunicacion.
     
      return ( Date );
   }
   
int BCD2BIN( int BCD )
   {
      int Temp;
      Temp = BCD;
      Temp >>= 1;
      Temp &= 0x78;
      return( Temp + ( Temp >> 2 ) + ( BCD & 0x0F ) );
   }
   
void Obtim( byte &Hrs, byte &Min, byte &Seg )
   {
      i2c_start();      //Inicia la comunicacion.
      i2c_write( 0xD0 );   //Direccion de DS1307 para escribir.
      i2c_write( 0x00 );   //Inicia en la direccion 0.
      i2c_start();      //Inicia la lectura.
      i2c_write( 0xD1 );//Direccion de DS1307 para leer.
      Seg = BCD2BIN( i2c_read() & 0x7F );    //Lee los segundos.
      Min = BCD2BIN( i2c_read() & 0x7F );    //Lee los minutos.
      Hrs = BCD2BIN( i2c_read( 0 ) & 0x3F ); //Lee las horas.
      i2c_stop();       //Finaliza la comunicacion.
   }
   
void Guardar( void )
   {
      Obtim( Horas, Minutos, Segundos );
      delay_us( 5 );
                 
      WEEPROM( Dir++, Horas );
      WEEPROM( Dir++, Minutos );
      WEEPROM( Dir++, Segundos );
 
      if( Dir == 0xFFFF )
         {
            Dir = 0;
         }         
   }
   
void Leer( void )
   {
      Horas  = REEPROM( Dir++ );
      Minutos = REEPROM( Dir++ );
      Segundos = REEPROM( Dir++ );
   }
   
void main( void )
   {
      int Band = 0;
     
      lcd_init();
     
      Dir = 0;
     
      setup_adc_ports( AN0 );
      setup_adc( ADC_CLOCK_INTERNAL );
      set_adc_channel( 0 );
     
      while( 1 )
         {
            if( INPUT( PIN_C2 ) == 0 )
               {
                  Band  = Band + 1;
               }
            switch( Band )
               {
                  case 1:
                  Vax = read_adc();
                  delay_ms( 1 );
                  Vadc = read_adc();
                 
                  output_high( PIN_D0 );
                  output_low( PIN_D1 );
                 
                  if( Vax < Vadc  )
                     {
                        delay_us( 5 );
                        Guardar();
                        output_high( PIN_C5 );
                        output_low( PIN_C6 );
                     }
                  if( Vax > Vadc )        //esta el la parte que no hace
                     {
                        delay_us( 5 );
                        Guardar();
                        output_low( PIN_C5 );
                        output_high( PIN_C6 );
                     }
                  if( Vax == Vadc )    //esta el la parte que no hace
                     {
                        output_low( PIN_C5 );
                        output_low( PIN_C6 );
                       
                        if( Vax == 0 )
                           {
                              lcd_gotoxy( 1, 1 );
                              printf( lcd_putc, "\fApagado" );
                              output_low( PIN_C7 );
                           }
                        else
                           {
                              lcd_gotoxy( 1, 1 );
                              printf( lcd_putc, "\fEncendido" );
                              output_high( PIN_C7 );
                           }
                     }
                  break;
                 
                  case 2:
                  output_low( PIN_D0 );
                  output_high( PIN_D1 );
                  output_low( PIN_C5 );
                  output_low( PIN_C6 );
                  output_low( PIN_C7 );
                  Band = 0;
                  break;
               }   
         }   
   }


 

anything