RESOLVIDO - RTC DS1307 - Problema para setar a hora.

Boa noite pessoal.

Comprei um shild RTC DS1307 e baixei um skatch, porém não consigo setar a hora nesta coisa, alguém pode me ajudar?

Segue o skatch:

#include "Wire.h"

#define DS1307_ADDRESS 0x68

byte zero = 0x00;

void setup()
{
Wire.begin();
Serial.begin(9600);
//A linha abaixo pode ser retirada apos setar a data e hora
SelecionaDataeHora();
}

void loop()
{
Mostrarelogio();
delay(1000);
}

void SelecionaDataeHora() //Seta a data e a hora do DS1307
{
byte segundos = 45; //Valores de 0 a 59
byte minutos = 53; //Valores de 0 a 59
byte horas = 00; //Valores de 0 a 23
byte diadasemana = 7; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
byte diadomes = 18; //Valores de 1 a 31
byte mes = 7; //Valores de 1 a 12
byte ano = 15; //Valores de 0 a 99
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados

//As linhas abaixo escrevem no CI os valores de
//data e hora que foram colocados nas variaveis acima
Wire.write(ConverteParaBCD(segundos));
Wire.write(ConverteParaBCD(minutos));
Wire.write(ConverteParaBCD(horas));
Wire.write(ConverteParaBCD(diadasemana));
Wire.write(ConverteParaBCD(diadomes));
Wire.write(ConverteParaBCD(mes));
Wire.write(ConverteParaBCD(ano));
Wire.write(zero); //Start no CI
Wire.endTransmission();
}

byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
return ( (val/10*16) + (val%10) );
}

byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
return ( (val/16*10) + (val%16) );
}

void Mostrarelogio()
{
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(zero);
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
int segundos = ConverteparaDecimal(Wire.read());
int minutos = ConverteparaDecimal(Wire.read());
int horas = ConverteparaDecimal(Wire.read() & 0b111111);
int diadasemana = ConverteparaDecimal(Wire.read());
int diadomes = ConverteparaDecimal(Wire.read());
int mes = ConverteparaDecimal(Wire.read());
int ano = ConverteparaDecimal(Wire.read());
//Mostra a data no Serial Monitor
Serial.print("Data: ");
Serial.print(diadomes);
Serial.print("/");
Serial.print(mes);
Serial.print("/");
Serial.print(ano);
Serial.print(" ");
Serial.print("Hora : ");
Serial.print(horas);
Serial.print(":");
Serial.print(minutos);
Serial.print(":");
Serial.print(segundos);
switch(diadasemana)
{
case 0:Serial.println(", Domingo");
break;
case 1:Serial.println(", Segunda");
break;
case 2:Serial.println(", Terca");
break;
case 3:Serial.println(", Quarta");
break;
case 4:Serial.println(", Quinta");
break;
case 5:Serial.println(", Sexta");
break;
case 6:Serial.println(", Sabado");
}
}

Exibições: 942

As respostas para este tópico estão encerradas.

Respostas a este tópico

Olá FM,

Subi um vídeo no meu canal do youtube para você segue link

https://www.youtube.com/watch?v=GTCL0LUiXkw&feature=youtu.be

Também colei o código no pastebin para melhorar a quebra de linha e ver melhor data e hora, segue link.

http://pastebin.com/xbirLfRe

Abs.

Novamente Carlos, muito obrigado agora o relógio ta bala...

Só mais uma dúvida, qnd vc coloca a bateria no shield RTC DS1307 não era pra ele se perder nas horas?

E conectei tudo certo e testei seu programa e ele funcionou, porém qnd eu desconctei a placa e reconectei ele se perdeu... Será que foi pq eu inverti os cabos de dSCL E SDA?

Olá FM,

De nada, note, o motivo de colocar uma bateria no Shield, é para garantir que ante a falta de energia os dados não sejam perdidos, entre aspas, parte da descrição do produto a respeito, ( Com bateria de apoio, não volátil (NV) RAM para armazenamento de dados) veja o link

http://www.labdegaragem.org/loja/35-controle/relogio-de-tempo-real-...

Considero que não deveria perder estes dados ante a falta de energia, não creio que exista problema de inversão dos cabos, o ideal seria você tentar descrever como esta conectado todo seu projeto para avaliar melhor uma resposta.

Abs.

Descrição da foto...

Pinos da protoboard da esquerda p direita...GND, Vcc, SDA, SCL.

Pinos Arduino: A5 = SCL e A4 = SDA.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço