Ir ao conteúdo
  • Cadastre-se

Henrique Marega

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

0
  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...