посоветуйте библиотеку для DS1307

msng
Offline
Зарегистрирован: 07.06.2012

чтоб работала с wire.h

и была возможность записывать в память DS1307

начинал работать с одной библиотекой, устраивала полностью, решил значения сохранять в DS1307, в библиотеке нет функций...

нашел другую, работает без библиотеки wire.h, но может записывать и читать память DS1307, подключил на I2C барометр, часы... часы отказываются работать...

есть ли библиотека для DS1307 которая работает с wire.h и читает/сохраняет ячейки в DS1307?

saniks
Offline
Зарегистрирован: 09.04.2013

Можно без библиотеки обойтись. Вот код, уже выкладывали где-то здесь на форуме.

#include "Wire.h"
#define DS1307_I2C_ADDRESS 0x68


byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}


byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

void setDateDs1307(          // Ф-ция установки времени
                   byte second,        // 0-59 
                   byte minute,        // 0-59
                   byte hour)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.endTransmission();
}

void getDateDs1307(     // Ф-ция получения времени
          byte *second,
          byte *minute,
          byte *hour)
{

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

  Wire.requestFrom(DS1307_I2C_ADDRESS, 3);

  *second     = bcdToDec(Wire.read());
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read());  
}

void setup()
{
  byte second, minute, hour;
  Wire.begin();
  Serial.begin(9600);

  second = 45;
  minute = 3;
  hour = 7;

  setDateDs1307(second, minute, hour);
}

void loop()
{
  byte second, minute, hour, sec;

  getDateDs1307(&second, &minute, &hour);
  Serial.print(hour);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.println(second);
  delay(1000);
}