//Nome:Estrela José Marcolino
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/i2c.h"
#define SDA_PIN 4
#define SCL_PIN 5
// Endereço I2C do DS1307
#define RTC_ADDR 0x68
// Função para ler o RTC e obter os dados de hora e data
void rtc_read_time(i2c_inst_t *i2c, uint8_t *data) {
uint8_t reg = 0x00; // Registro de tempo (primeiro registro)
i2c_write_blocking(i2c, RTC_ADDR, ®, 1, true); // Envia o comando para ler
i2c_read_blocking(i2c, RTC_ADDR, data, 7, false); // Lê 7 bytes (hora, minuto, segundo, dia, mês, ano)
}
// Função para ajustar o RTC com data e hora manualmente
void rtc_set_time(i2c_inst_t *i2c) {
uint8_t set_time[] = {
0x00, // Registro de controle
0x00, // Segundo (0)
0x27, // Minuto (27)
0x13, // Hora (13)
0x24, // Dia (24)
0x09, // Mês (Setembro)
0x24, // Ano (2024)
};
i2c_write_blocking(i2c, RTC_ADDR, set_time, sizeof(set_time), false);
}
int main() {
// Inicializa a comunicação serial
stdio_init_all();
// Inicializa o I2C
i2c_init(i2c0, 400000); // Inicializa o I2C a 400kHz
gpio_set_function(SDA_PIN, GPIO_FUNC_I2C); // Configura GPIO 4 como SDA
gpio_set_function(SCL_PIN, GPIO_FUNC_I2C); // Configura GPIO 5 como SCL
gpio_pull_up(SDA_PIN); // Ativa o pull-up no SDA
gpio_pull_up(SCL_PIN); // Ativa o pull-up no SCL
uint8_t data[7];
// Configura o RTC para 24/09/2024 - 13:27:00
rtc_set_time(i2c0);
printf("RTC configurado para 24/09/2024 - 13:27:00\n");
while (1) {
// Lê os dados do RTC
rtc_read_time(i2c0, data);
// Extraindo e imprimindo os dados (segundos, minutos, horas)
int sec = (data[0] & 0x7F); // Máscara para obter valor do segundo
int min = (data[1] & 0x7F); // Máscara para obter valor do minuto
int hour = (data[2] & 0x3F); // Máscara para obter valor da hora
printf("Hora: %02d:%02d:%02d\n", hour, min, sec);
sleep_ms(5000); // Aguarda 5 segundos antes da próxima leitura
}
return 0;
}