Ir ao conteúdo
  • Cadastre-se

12F629 + DS 1307


Posts recomendados

  • 3 semanas depois...
Neste código o PIC pega a data e o horário do DS1307 e faz nada com os valores ^_^ (se comparado com o seu esquemático eu inverti o SCL e o SDA)



#include <12F629.h>

#FUSES PUT //Power Up Timer
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOWDT
#FUSES INTRC_IO

#use delay(clock=4MHz)

#use I2C(master, scl=PIN_A0, sda=PIN_A1, slow)
// I2C Mestre, 100KHz (slow)

#define LED PIN_A5
#define DELAY 500

#include<DS1307.c>

void main()
{
unsigned int segundo, minuto, hora, dia, mes, ano, dia_da_semana;

while(true)
{
ds1307_set_date_time(10,9,15,7,5,46,13);
// Atualiza o DS1307 para data 10/09/2011 (domingo - 7)
// e a hora para 05:46:13
// Atualizar apenas uma vez, a bateria manterá o DS1307 contando o tempo.

ds1307_get_date(dia, mes, ano, dia_da_semana);
// Lêa o dia mês e ano do DS1307

ds1307_get_time(hora, minuto, segundo);
// Lê a hora minuto e sefgundo do DS1307

output_low(LED);
delay_ms(DELAY);
output_high(LED);
delay_ms(DELAY);
}
}


Tenho uma biblioteca pra o DS1307 mas foi feita para barramentos I2C com mais de um mestre (gasta mais memória) então resolvi usar esta aqui: https://www.ccsinfo.com/forum/viewtopic.php?t=23255

 

Download do código (CCS 5.046) e do arquivo para simulação no proteus (7.10):


 

Edit: O DS3231 possui um oscilador interno e é mais preciso, além disso ele possui 2 alarmes (se não me engano) assim o PIC poderia ficar de boa e só executaria algo quando o DS3231 gerasse o pulso de alarme... Ele também possui um sensor de temperatura  :lol:

 

Tenho um DS1307 (do ebay) que adiantou 7~8 minutos em uma semana (mesmo eu tendo retirado o circuito de recarga da bateria), sei que o problema é com o oscilador, mas...

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@test man*~ a culpa não é do ds e sim do cristal. Óbvio d+? @ianfreitas vá por partes. 1º aprenda a ler e escrever no ds. Sugiro simular no proteus 1º. Com este circuito você vai ter um pouco de dificuldade em programar os horários e hora. Sugiro um mc com mais portas e um display qualquer

Link para o comentário
Compartilhar em outros sites

@Isadora Ferraz Sim, por isso sugeri o DS3231 pois ele possui Crystal interno com compensação de temperatura assim as chances do Crystal ser de má qualidade (igual ao que veio junto com o meu DS1307) é menor :) ...

 

Eu acho que o @ianfreitas já está bem familiarizado com o DS1307, repare este tópico:


Ele disse que não possuía a biblioteca mas talvez ele achou que ela só poderia ser usada com o PIC18F2550... A biblioteca usada naquele tópico foi retirada do mesmo lugar da que foi postada aqui. :lol:  

Link para o comentário
Compartilhar em outros sites

Muito obrigado pelas respostas" test man " e " isadora ferraz " .

 

 test man = primeiramente mil  desculpas a biblioteca eu realmente tenho, mais tudo que faço e Ctrl+c e Ctrl+v e mudo umas linhas código de lugares uso como base o circuito de Matheus LPS. SEI MUITO POUCO QUASE NADA DA PROGRAMAÇÃO,realmente pensei que só fosse funcionar para 18F2550. Pois tentei fazer com outros Pics e não deu certo.

Só aprendi mais programação em C porque sou teimoso e curioso e tenho muita força de vontade. Se observar esse tópico foi aberto a alguns anos atras mais só agora consegui termina-lo.

Essa e uma maneira que tenho de aprender um pouco com vocês.(preguntando pois não tinha dado certo com ele 12F629)

 

isadora ferraz = a dica foi muito boa, mais a importância desse projeto é acender determinada hora e apagar em determinada hora " SIMPLICIDADE " as vezes suas respostas são tão boas alias são boas demais agora sei porque meu DS tava atrasando vou tentar mudar o cristal só não desconfiava dele, pensava que fosse programação. 

 

AGRADEÇO A VOCÊS DESDE JÁ.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

 

primeiramente mil  desculpas a biblioteca eu realmente tenho

 

Que isso cara, sem problemas =)

 

sou teimoso e curioso e tenho muita força de vontade.

 

Eu também UHauHauHauhUAHuHAuhA...  :D
 
Quebre a cabeça ai, qualquer coisa poste aqui que tentarei ajudá-lo... Se você tiver problemas com a comparação do horário para acionamento da carga tente convertê-lo para segundos, tipo:
Carga será acionada de 07:04:58 à 07:05:02 (horário fixo como você quer)07:04:58 = 25498 segundos 07:05:02 = 25502 segundos Assim: if((horario_atual_segundos >= 25498) && (horario_atual_segundos <= 25502)) {   liga_carga}    else {      desliga_carga      }
  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!