Ir ao conteúdo

Adicionar despertador a relógio ccs


cesarlg

Posts recomendados

Postado

ola galera.. dessa vez estou aqui "copiando" kkkk codigos postado pelos amigos nesse link postagem #23

http://forum.clubedohardware.com.br/resolvido-relogio-ds1307/952470

duvidas:

1. rapidamente aparece o dia da semana e logo "some"

2. no lcd o ano nao aparece coretamente (-1) obs. enquanto o lcd mostra o dia de semana o ano funciona bem.

3.queria implementar despertadores, no minimo 5 diferentes em um dia. é possivel? gostaria que me orientassem detalhadamente como proceder..

obrigado

Postado

Você está testando no proteus ou na vida real? Proteus tem varios bugs com o DS1307.

Explique detalhadamente os erros 1 e 2.

Dá pra fazer alarme sim. Nunca fiz mas daria para implementar.

Falou

Postado

ainda é apenas virtualmente, vou adquirir os componentes para testar real, enquanto vou adiantando....

sobre as duvidas de aparencia do lcd ta ai os anexos.. no primeiro, o dia de semana some logo q inicia o proteus. no segundo problema no ano..

bom gostaria q isse me dando ideias de como implementar o despertador .

post-198617-13884964398593_thumb.png

post-198617-13884964398963_thumb.png

Postado

Bom, eu acho que seria bug do proteus.

Para que possamos tirar essa dúvida, favor hospedar no 4shared os arquivos do código com a simulaçao que irei testar aqui e verificar se o erro persiste no meu proteus.

No caso do dispertador, estou pensando numa forma de editar o código que você está usando.

Falou

Postado

Faz um menu separado para adicionar os horarios de despertar na memoria eeprom, assim sempre que iniciar o pic pegue os valores do despertador e coloque em variaveis, depois compare a hora atual com as horas de despertar usando o comando switch case.

Postado

queria um exemplo de ter um novo menu!!! nunca ví como se faz

ou talves um sub menu é possivel? se for simples....

outra coisa importante é o q nosso amigo ressaltou: gravar despertador na eeprom.. nada adianta ter hrs atualizada, se o despertador perde os dados. mas nao imagino como faz.. desculpe preciso mais detalhado ou exemplo p aprender kkk

nao abandonem esse meu topico , sem vocês nao consiguirei terminar

falou

Postado

Fiz um irrigador progamavel um tempo desses, acho que o codigo dele pode ser util pra você.

#include <16F877.h>
#use delay(clock=4000000)
#fuses XT,NOWDT,PUT,nobrownout,NOLVP,NOCPD,NOWRT
#use rs232(baud=9600, xmit=PIN_A2, rcv=PIN_A2, parity=N, bits=9)
#include <lcd.c>
#include <ds1307.c>

#define lcd_enable pin_d0 // pino enable do LCD
#define lcd_rs pin_d1 // pino rs do LCD
#define lcd_db4 pin_d4 // pino de dados d4 do LCD
#define lcd_db5 pin_d5 // pino de dados d5 do LCD
#define lcd_db6 pin_d6 // pino de dados d6 do LCD
#define lcd_db7 pin_d7 // pino de dados d7 do LCD
#define LED_1 PIN_A3
#define LED_2 PIN_A4
#define LED_3 PIN_A5





int ler_teclado()//Função para Leitura do teclado
{

int x;
x=0;
while(true)
{
delay_ms(20);
//linha 1
output_high(pin_b4);//Coloca a primeira linha do teclado em nivel alto e as demais em nivel baixo
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
delay_ms(60);//Um pequeno atraso para evitar erro de leitura no teclado

if(input(pin_b1)) //Testa primeira coluna
{
printf("\n \r Tecla 1");//Envia tecla pressionada pela serial
x=1;//Carrega a variavel x com o valor correspondente a tecla
return(x);//Retorna o valor de x para a Função main
}

if(input(pin_b2)) //Testa segunda coluna
{
printf("\n \r Tecla 2");
x=2;
return(x);
}

if(input(pin_b3)) //Testa terceira coluna
{
printf("\n \r Tecla 3");
x=3;
return(x);
}

//linha 2
output_low(pin_b4);
output_high(pin_b5);
output_low(pin_b6);
output_low(pin_b7);
delay_ms(60);

if(input(pin_b1)) //Testa primeira coluna
{
printf("\n \r Tecla 4");
x=4;
return(x);
}

if(input(pin_b2)) //Testa segunda coluna
{
printf("\n \r Tecla 5");
x=5;
return(x);
}

if(input(pin_b3)) //Testa terceira coluna
{
printf("\n \r Tecla 6");
x=6;
return(x);
}

//linha 3
output_low(pin_b4);
output_low(pin_b5);
output_high(pin_b6);
output_low(pin_b7);
delay_ms(60);

if(input(pin_b1)) //Testa primeira coluna
{
printf("\n \r Tecla 7");
x=7;
return(x);
}

if(input(pin_b2)) //Testa segunda coluna
{
printf("\n \r Tecla 8");
x=8;
return(x);
}

if(input(pin_b3)) //Testa terceira coluna
{
printf("\n \r Tecla 9");
x=9;
return(x);
}
//linha 4
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_high(pin_b7);
delay_ms(60);

if(input(pin_b1)) //Testa primeira coluna
{
printf("\n \r Tecla *");
x=15;
return(x);
}

if(input(pin_b2)) //Testa segunda coluna
{
printf("\n \r Tecla 0");
x=0;
return(x);
}

if(input(pin_b3)) //Testa terceira coluna
{
printf("\n \r Tecla #");
x=16;
return(x);
}
output_low(pin_b4);
output_low(pin_b5);
output_low(pin_b6);
output_low(pin_b7);

}
}


void programar1()
{
int a1=0,b1=0,c1=0,d1=0;
int h=0,m=0;

printf(lcd_putc,"\f Modo Config\n");
printf(lcd_putc,"Digite a H 1\n");

a1=ler_teclado();
printf(lcd_putc,"\fHora %d%d:%d%d"a1,b1,c1,d1);
a1=a1*10;
b1=ler_teclado();
h=a1+b1;
printf(lcd_putc,"\fHora %d:%d%d"h,c1,d1);
c1=ler_teclado();
printf(lcd_putc,"\fHora %d:%d%d"h,c1,d1);
c1=c1*10;
d1=ler_teclado();
m=c1+d1;
printf(lcd_putc,"\fHora %d:%d"h,m);
write_eeprom(2,h);
write_eeprom(3,m);
printf(lcd_putc,"\fH1 Salva\n");
printf(lcd_putc,"Hora %d:%d"h,m);
delay_ms(1200);
}


void mostragravado()
{
int h1,m1;
h1=read_eeprom(2);
m1=read_eeprom(3);
printf(lcd_putc,"\fH1 = %d:%d\n"h1,m1);
delay_ms(600);

}

void mudarh()
{
int a1=0,b1=0,c1=0,d1=0;
int h=0,m=0;

printf(lcd_putc,"\fMudar Hora\n");
printf(lcd_putc,"DIGITE!\n");

a1=ler_teclado();
printf(lcd_putc,"\fHora %d%d:%d%d"a1,b1,c1,d1);
a1=a1*10;
b1=ler_teclado();
h=a1+b1;
printf(lcd_putc,"\fHora %d:%d%d"h,c1,d1);
c1=ler_teclado();
printf(lcd_putc,"\fHora %d%d:%d%d"a1,b1,c1,d1);
c1=c1*10;
d1=ler_teclado();
m=c1+d1;
printf(lcd_putc,"\fHora %d:%d"h,m);
ds1307_set_date_time(15,6,5,7,h,m,00); //15/06/05 23:00:00 dia da semana 7
printf(lcd_putc,"\fHora Salva\n");
printf(lcd_putc,"Hora %d:%d"h,m);
delay_ms(1200);
}

void mudard()
{
int hora=0,minuto=0,segundo=0;
int a1=0,b1=0,c1=0,d1=0,e=0,f=0;
int dia=0,mes=0,ano=0;

printf(lcd_putc,"\fMudar Data\n");
printf(lcd_putc,"DIGITE!\n");

a1=ler_teclado();
printf(lcd_putc,"\fData %d%d/%d%d/%d%d"a1,b1,c1,d1,e,f);
a1=a1*10;
b1=ler_teclado();
dia=a1+b1;
printf(lcd_putc,"\fData %d/%d%d/%d%d"dia,c1,d1,e,f);
c1=ler_teclado();
printf(lcd_putc,"\fData %d/%d%d/%d%d"dia,c1,d1,e,f);
c1=c1*10;
d1=ler_teclado();
mes=c1+d1;
printf(lcd_putc,"\fData %d/%d/%d%d"dia,mes,e,f);
e=ler_teclado();
printf(lcd_putc,"\fData %d/%d/%d%d"dia,mes,e,f);
e=e*10;
f=ler_teclado();
ano=e+f;
printf(lcd_putc,"\fData %d/%d/%d"dia,mes,ano);
ds1307_get_time(hora,minuto,segundo); //pega time
ds1307_set_date_time(dia,mes,ano,7,hora,minuto,segundo); //15/06/05 23:00:00 dia da semana 7
printf(lcd_putc,"\fData Salva\n");
printf(lcd_putc,"Data %d/%d/%d"dia,mes,ano);
delay_ms(1200);
}

void ativa()
{
int h1,m1;
int hrs,mim,sec;
h1=read_eeprom(2);
m1=read_eeprom(3);
printf(lcd_putc,"\fATIVADO!\n");
while(true)
{
hrs=0,mim=0,sec=0;
ds1307_get_time(hrs,mim,sec); //pega time
delay_ms(1000);
printf(lcd_putc,"\fHora=%02d:%02d:%02d\nAlar=%02d:%02d:00\n"hrs,mim,sec,h1,m1);
if (hrs==h1&&mim==m1&&sec==0)
{
printf(lcd_putc,"\fExecutando R1\n");
output_high(LED_1);
delay_ms(3000);
output_low(LED_1);
}
if(input(pin_b2))
{
break;
}


}
printf(lcd_putc,"\fDESATIVADO!\n");
}

void main ()

{
BYTE sec;
BYTE mim;
BYTE hrs;
BYTE day;
BYTE month;
BYTE yr;
BYTE dow;
lcd_init();
ds1307_init();
ds1307_set_date_time(15,6,5,7,12,00,00); //15/06/05 23:00:00 dia da semana 7
while(true)
{
int a;
a=0;
ds1307_get_date(day,month,yr,dow); //pega date
ds1307_get_time(hrs,mim,sec); //pega time
delay_ms(1000);
printf(lcd_putc,"\f BRUNO\n");
printf(lcd_putc," MARTINS\n");
delay_ms(700);
printf(lcd_putc,"\f IRRIGADOR\n");
printf(lcd_putc," PROGAMAVEL\n");

a=ler_teclado();
if(a==15)
{
programar1();
}
if(a==1)
{
mostragravado();
}
if (a==16)
{
printf(lcd_putc,"\f Time %02d:%02d:%02d\n",hrs,mim,sec);
printf(lcd_putc," Date %02d-%02d-%02d",day,month,yr);
delay_ms(1000);
}

if(a==2)
{
mudarh();
}

if(a==3)
{
mudard();
}
if(a==5)
{
ativa();
}
}
}


irrigador.png

Uploaded with ImageShack.us

Postado

estou acrescentando algumas coisas, gostaria de saber se esta coreto como gravar e buscar os dados na eeprom. ... vamos ao poucos kkk.. a proposito como faço p acrescentar um menu a parte só p alarme? tentei como swith (menu) no chute, mas nao foi ...

EDIT.: no proteus nao parece o relogio gravar a hora e data(ds 1307 e eeprom), seria um bug ou problema de programaçao

obrigado

#include <16F877A.h>

#device adc=10

#FUSES NOWDT

#FUSES XT //Clock <=4Mhz

#FUSES PUT //Power Up Timer

#FUSES NOPROTECT //Code not protected from reading

#FUSES NOBROWNOUT //No brownout reset

#FUSES NOLVP

#FUSES NOCPD

#use delay(clock=4000000)

#include <ds1307.c>

#include <lcd.c>

#define botao_incremento PIN_B0

#define botao_decremento PIN_B1

#define rele1 PIN_B7

BYTE sec;

BYTE mim;

BYTE hrs;

BYTE day;

BYTE month;

BYTE yr;

BYTE dow;

BYTE dh1;

BYTE dm1;

int8 modo;

int16 adc;

float temperatura;

char dia_da_semana[7][8]=

{

"DOM",

"SEG",

"TER",

"QUA",

"QUI",

"SEX",

"SAB",

};

#int_ccp2

void trata_ccp_2()

{

modo++;

if (modo > 12 )

{

modo = 0;

}

}

void main()

{

output_low(pin_b6);

setup_ccp2(CCP_CAPTURE_RE);

enable_interrupts (int_ccp2);

enable_interrupts (global);

setup_adc_ports(AN0);

setup_adc(ADC_CLOCK_INTERNAL);

set_adc_channel(0);

delay_us(20);

ds1307_init();

lcd_init();

modo = 0;

while(1)

{

switch (modo)

{

case 1:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

hrs++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

hrs--;

}

if (hrs > 23 )

{

hrs = 0;

}

printf(lcd_putc,"\f AJUSTE HORA:\n %u",hrs);

delay_ms (100);

break;

}

case 2:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

mim++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

mim--;

}

if (mim > 59 )

{

mim = 0;

}

printf(lcd_putc,"\f AJUSTE MINUTOS:\n %u",mim);

delay_ms (100);

break;

}

case 3:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

sec++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

sec--;

}

if (sec > 59 )

{

sec = 0;

}

printf(lcd_putc,"\f AJUSTE SEGUNDOS:\n %u",sec);

delay_ms (100);

break;

}

case 4:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

day++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

day--;

}

if (day > 31 )

{

day = 1;

}

if (day == 0 )

{

day = 31;

}

printf(lcd_putc,"\fDATA > DIA:\n %u",day);

delay_ms (100);

break;

}

case 5:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

month++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

month--;

}

if (month > 12 )

{

month = 1;

}

if (month == 0 )

{

month = 12;

}

printf(lcd_putc,"\f DATA > MES:\n %u",month);

delay_ms (100);

break;

}

case 6:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

yr++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

yr--;

}

if (yr > 99 )

{

yr = 1;

}

if (yr == 0 )

{

yr = 99;

}

printf(lcd_putc,"\f DATA > ANO:\n %u",yr);

delay_ms (100);

break;

}

case 7:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

dow++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

dow--;

}

if (dow > 7 )

{

dow = 1;

}

if (dow == 0)

{

dow = 7;

}

printf(lcd_putc,"\fDIA DA SEMANA:\n %s",dia_da_semana[dow-1]);

delay_ms (100);

break;

}

case 8:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

dh1++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

dh1--;

}

if (dh1 > 23 )

{

dh1 = 0;

}

printf(lcd_putc,"\fHORA ALARME1:\n %u",dh1);

delay_ms (100);

break;

}

case 9:

{

if (input(BOTAO_INCREMENTO))

{

delay_ms (75);

dm1++;

}

if (input(BOTAO_DECREMENTO))

{

delay_ms (75);

dm1--;

}

if (dm1 > 59 )

{

dm1 = 0;

}

printf(lcd_putc,"\fMINUTO ALARME1:\n %u",DM1);

delay_ms (100);

delay_ms (100);

write_eeprom (1, dh1);

write_eeprom (2, dm1);

ds1307_set_date_time(day,month,yr,dow,hrs,mim,sec);

break;

}

default:

{

dh1 = read_eeprom(1);

dm1 = read_eeprom(2);

adc = read_adc();

temperatura = adc;

ds1307_get_date(day,month,yr,dow);

ds1307_get_time(hrs,mim,sec);

printf(lcd_putc,"\fHorario:%02d:\%02d:\%02d\nAlarme 1: %u:%u",hrs,mim,sec,dh1,dm1);

}

If ((hrs == dh1 ) && (mim == dm1))

{

output_high(rele1);

}

else

{

output_low(rele1);

}

delay_ms(500);

}

}

}

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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!