Ir ao conteúdo
  • Cadastre-se

Henrique Marega

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por Henrique Marega

  1. Olá a todos!

     

    Estou montando um circuitinho bem simples para efeito didático mesmo. É um relogio com acionamento e desacionamento de um relé na hora programada. Já montei na proto-board, e funciona quase tudo... O problema é que quando desligo a energia, o dia da data vem com o valor 00; eu acerto a data novamente, mas quando ele é desligado volta com dia 00... Os outros valores se mantém normalmente, horas, min, seg, mes, ano... Se alguem puder me ajudar, fico muito agradecido!!

     

    Seguem os arquivos:

    #include <16F628A.h>#FUSES NOWDT                    //No Watch Dog Timer#FUSES HS                      //habilita pinos para xtal externo#FUSES PUT                      #FUSES NOBROWNOUT               //No brownout reset#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O#define BotaoTela pin_a2 //menu#define botaohora pin_a4 //acerta hora#define botaomin pin_a3 //acerta minuto#define led1 pin_b6 //Led1 backlight lcd#define led2 pin_b7 //led2, relé#use delay(clock=4000000)#include <lcd4B.c>               //declaração da biblioteca do LCD#use I2C(master, sda=PIN_A0, scl=PIN_A1) //habilita i2c#include <ds1307.c> //biblioteca i2c para o rtcint hr_lg=0, hr_ds=0, min_lg=0, min_ds=0;int tela=0, backlight=0, rele=0;void salva(long int end, int dado){        printf(lcd_escreve,"\fSalvando...");        write_eeprom(end,dado);        delay_ms(100);        }void main(){BYTE sec;BYTE min;BYTE hr;BYTE day;BYTE mth; //mesBYTE year; //anoBYTE dow; //dia da semana      //inicializa  lcd_ini(); //inicilaiza lcd  ds1307_init(); //inicializa rtc  output_high(led1);  hr_lg = read_eeprom(0);  min_lg = read_eeprom(1);  hr_ds = read_eeprom(2);  min_ds = read_eeprom(3);  rele = read_eeprom(4);  output_bit(led2,rele);  tela=0;  //ds1307_set_date_time(6,12,14,6,14,20,0); while(true){  ds1307_get_date(day,mth,year,dow);  ds1307_get_time(hr,min,sec); output_bit(led2,rele);if((sec%2)==1){   backlight++;}if(backlight ==31){output_low(led1); //apaga backlight                   backlight = 0;} if(input(botaotela) || input(botaohora) || input(botaomin)){ //ascende backlight     output_high(led1);      backlight =0;} if (input(BotaoTela)==1){       delay_ms(100); //delay para esperar botão soltar           tela++;                if (tela>5){         tela=0;//volta para tela 0 após a 6      }       }    if (tela==0){     printf(lcd_escreve,"\fHR %02u:%02u:%02u" hr,min,sec,);     printf(lcd_escreve,"\nDT %02u/%02u/20%02u %02u",day,mth,year,dow);     delay_ms(100); //delay para evitar piscagem do display     if(input(botaomin)&&(input(botaohora))){rele = ~rele;                                             salva(4,rele);}   }        if(tela==1){     printf(lcd_escreve,"\f**Acerta  Hora**");     printf(lcd_escreve,"\n    %02u:%02u:%02u", hr,min,sec);     delay_ms(100); //delay para evitar piscagem do display     if (input(botaohora)==1) {hr++; }//acerta hr e ascende backlight     if (input(botaomin)==1) {min++;  } //acerta min     if(min > 59)min =0;     if(hr > 23)hr =0;     ds1307_set_date_time(day,mth,year, dow,hr,min,sec);      } if(tela==2){     printf(lcd_escreve,"\f**Acerta  Data**");     printf(lcd_escreve,"\n    %02u:%02u:20%02u", day,mth,year);     delay_ms(100); //delay para evitar piscagem do display     if (input(botaohora) && input(botaomin)==0) {day++; }//acerta hr e ascende backlight     if (input(botaomin)&& input(botaohora)==0) {mth++;  } //acerta min     if(day > 31)day =1;     if(mth > 12)mth =1;     if(input(botaomin)&&(input(botaohora))){year++;}     ds1307_set_date_time(day,mth,year,dow,hr,min,sec);      }                         if (tela==3){     printf(lcd_escreve,"\f*Acerta Hora LG*");     printf(lcd_escreve,"\nLIGA:%02d:%02d:00"hr_lg,min_lg);    delay_ms(100); //delay para evitar piscagem do display    if (input(botaohora)==1) {  //acerta hr para ligar relé e ascende backlight    printf(lcd_escreve,"\nLIGA:%02d:%02d:00"hr_lg,min_lg);    delay_ms(100);     hr_lg++;     if(hr_lg > 23)hr_lg =0;         }     if (input(botaomin)==1) {     printf(lcd_escreve,"\f*Acerta Hora LG*");     printf(lcd_escreve,"\nLIGA:%02d:%02d:00"hr_lg,min_lg);     delay_ms(100);     min_lg++;     if(min_lg > 59)min_lg =0;     }    }     if (tela==4){      printf(lcd_escreve,"\f*Acerta Desliga*");      printf(lcd_escreve,"\nDSL:%02d:%02d:00"hr_ds,min_ds);      delay_ms(100); //delay para evitar piscagem do display     if (input(botaohora)==1) {  //acerta hr para ligar relé e ascende backlight     delay_ms(100);     hr_ds++;     printf(lcd_escreve,"\nDSL:%02d:%02d:00"hr_ds,min_ds);     if(hr_ds > 23)hr_ds =0;        }      if (input(botaomin)==1) {      min_ds++;      delay_ms(100);      printf(lcd_escreve,"\nDSL:%02d:%02d:00"hr_ds,min_ds);      if(min_ds> 59)min_ds =0;    }      }  if(tela==5){            salva(0,hr_lg);            salva(1,min_lg);            salva(2,hr_ds);            salva(3,min_ds);            tela=0;            }if(hr == hr_lg && min == min_lg && sec ==0){  rele=1;  output_bit(led2,rele);  salva(4, rele);  }if(hr ==hr_ds && min==min_ds && sec ==0 ) {  rele=0;  output_bit(led2,rele);  salva(4, rele);  }  }//while true  } //void main    

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!