Корзина
пусто

Модуль часов реального времени - RTC

Модуль часов реального времени - RTC

Нажмите, чтобы увеличить
Модуль часов реального времени - RTC
Цена: 330 pуб.
Наличие: Нет в наличии 
Модель: rtc
Количество: Добавить в корзину
Кабель для модулей Базовая плата 2

Модуль часов реального времени (RTC), построен на DS1307 чипе, поддерживающий I2C протокол. Подсчитывает секунды, минуты, часы, дни недели, дату, месяц, год. Даты автоматически корректируются, если месяц менее чем 31 день, в том числе для високосного года (до 2100). Часы работают в любом 24-часовом или 12-часовом формате с AM / PM индикатором. Использует литиевую батарейку (CR1225).

Особенности:

  • размер: 2.0*4.0 см.
  • 56-байтовое, с питанием от батареи, энергонезависимое (NV) ОЗУ для хранения данных
  • последовательный интерфейс I2C
  • 5 В. питание (VCC)
  • программируемый с прямоугольными импульсами выходной сигнал
  • автоматическое обнаружение падения напряжение и переключение на батарейку
  • потребление менее 500 нА в режиме батарейки с работающем тактовым генератором


Часы реального времени для Arduino

Демо код для Ардуино:

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68  // I2C адрес DS1307 
// Глобальные переменные
int command = 0;       // Команда в ASII формате посылаемая через последовательный порт     

int i;
long previousMillis = 0;        // сохраняет и обновляет последнее время
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;

byte test; 
 
// Преобразование нормальных десятичных чисел в двоично-десятичный код
byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );

}
 
// Преобразование двоично-десятичного кода в десятичные числа
byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );

}
 
// 1) Устанавливает дату и время для DS1307
// 2) Старт отсчёта
// 3) Устанавливает 24-часовой формат
 
void setDateDs1307()                

{
 
   second = (byte) ((Serial.read() - 48) * 10 + (Serial.read() - 48));  

   minute = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));

   hour  = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));

   dayOfWeek = (byte) (Serial.read() - 48);

   dayOfMonth = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));

   month = (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));

   year= (byte) ((Serial.read() - 48) *10 +  (Serial.read() - 48));

   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0x00);

   Wire.write(decToBcd(second));   
   Wire.write(decToBcd(minute));

   Wire.write(decToBcd(hour));      

   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));

   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));

   Wire.endTransmission();
}
 
// Получает дату и время из DS1307 и выводит результат
void getDateDs1307()

{
  // Сброс регистр-указателя
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0x00);

  Wire.endTransmission();
 
  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);


  second     = bcdToDec(Wire.read() & 0x7f);

  minute     = bcdToDec(Wire.read());
  hour       = bcdToDec(Wire.read() & 0x3f);  

  dayOfWeek  = bcdToDec(Wire.read());
  dayOfMonth = bcdToDec(Wire.read());

  month      = bcdToDec(Wire.read());
  year       = bcdToDec(Wire.read());

 
  Serial.print(hour, DEC);
  Serial.print(":");

  Serial.print(minute, DEC);
  Serial.print(":");

  Serial.print(second, DEC);
  Serial.print("  ");

  Serial.print(month, DEC);
  Serial.print("/");

  Serial.print(dayOfMonth, DEC);
  Serial.print("/");

  Serial.print(year, DEC);
  Serial.println("  ");

}
void setup() {
  Wire.begin();

  Serial.begin(57600); 
}
void loop() {

  delay(2000);
  /*T(00-59)(00-59)(00-23)(1-7)(01-31)(01-12)(00-99)
    T(секунды)(минуты)(часы)(день недели)(число)(месяц)(год) - Формат установки времени. 
    Пример: для установки настоящей даты и время 9 сентября 2014 @ Вторник @ 19:57:11 
    посылаем команду - T1157192090914 
  */
     if (Serial.available()) 
     {     

      command = Serial.read();
      if (command == 84) {      //Команда = "T", установка времени

       setDateDs1307();
       getDateDs1307();
       Serial.println(" ");

      }
      while(1)
      {
        getDateDs1307();

        delay(500);
      }
   }
  }