Очень полезным девайсом оказалась плата Tiny RTC I2C Modules. Как только представлю картину с подключением на макетной плате двух микросхем с обвязкой, то становится немного не по себе от количества ненадежных соединений. Плату Tiny RTC I2C Modules очень удобно использовать для работы с микросхемой ds1307Z часов реального времени с последовательным интерфейсом I2C, микросхемой памяти 24С32 с последовательным интерфейсом I2C, возможностью установить датчик температуры ds18b20. Так же можно получить точные прямоугольные импульсы c 7-го вывода микросхемы ds1307Z, на разъёме он отмечен буквами SQ. На схеме платы Tiny RTC I2C Modules трудно увидеть, что седьмой вывод микросхемы ds1307Z соединен с седьмым контактом разъёма Р1.
Схема платы Tiny RTC I2C Modules:
Перед покупкой я поискал информацию в сети интернет. Узнал, что плата изготовлялась для работы литиевым аккумулятором, который трудно купить. Покупатели платы Tiny RTC I2C Modules устанавливали в плату вместо аккумулятора литиевую батарею, и плата работала неправильно. Микросхема потребляет очень мало энергии, поэтому плату вполне можно использовать с литиевой батареей. Для этого надо выпаять с платы Tiny RTC I2C Modules следующие радиодетали: диод D1, резистор R4, а в место R6 запаять перемычку. Я удалил еще и резистор R7, ознакомившись с типовой схемой включения микросхемы ds1307.
Типовая схема включения микросхемы ds1307:
Подробнее о доработке платы Tiny RTC I2C Modules вы можете узнать из видео, записанного и опубликованного в сети товарищем Алексеем Букреевым.
Даташит на микросхему ds1307:
Посмотреть онлайн файл: ds1307_rus.pdf
Посмотреть онлайн файл: ds1307_rus.pdf
Я соединил плату Arduino Pro Mini с платой Tiny RTC I2C Modules и плату Arduino Pro Mini с платой USB serial adapter CH340G.
Запускаем код для определения адресов микросхем ds1307 и 24С32. Код опубликован на странице:
http://adatum.ru/skaner-shiny-i2c-dlya-arduino.html
Сам код:
#include
String stringOne;
void setup()
{
Wire.begin();
Serial.begin(9600);
while (!Serial);
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
String stringOne = String(address, HEX);
Serial.print("0x"); Serial.print(stringOne); Serial.print(" - ");
if(stringOne=="0A") Serial.println("'Motor Driver'");
if(stringOne=="0F") Serial.println("'Motor Driver'");
if(stringOne=="1D") Serial.println("'ADXL345 Input 3-Axis Digital Accelerometer'");
if(stringOne=="1E") Serial.println("'HMC5883 3-Axis Digital Compass'");
if(stringOne=="5A") Serial.println("'Touch Sensor'");
if(stringOne=="5B") Serial.println("'Touch Sensor'");
if(stringOne=="5C") Serial.println("'BH1750FVI digital Light Sensor' OR 'Touch Sensor" );
if(stringOne=="5D") Serial.println("'Touch Sensor'");
if(stringOne=="20") Serial.println("'PCF8574 8-Bit I/O Expander' OR 'LCM1602 LCD Adapter' ");
if(stringOne=="21") Serial.println("'PCF8574 8-Bit I/O Expander'");
if(stringOne=="22") Serial.println("'PCF8574 8-Bit I/O Expander'");
if(stringOne=="23") Serial.println("'PCF8574 8-Bit I/O Expander' OR 'BH1750FVI digital Light Sensor'");
if(stringOne=="24") Serial.println("'PCF8574 8-Bit I/O Expander'");
if(stringOne=="25") Serial.println("'PCF8574 8-Bit I/O Expander'");
if(stringOne=="26") Serial.println("'PCF8574 8-Bit I/O Expander'");
if(stringOne=="27") Serial.println("'PCF8574 8-Bit I/O Expander' OR 'LCM1602 LCD Adapter '");
if(stringOne=="39") Serial.println("'TSL2561 Ambient Light Sensor'");
if(stringOne=="40") Serial.println("'BMP180 barometric pressure sensor'" );
if(stringOne=="48") Serial.println("'ADS1115 Module 16-Bit'");
if(stringOne=="49") Serial.println("'ADS1115 Module 16-Bit' OR 'SPI-to-UART'");
if(stringOne=="4A") Serial.println("'ADS1115 Module 16-Bit'");
if(stringOne=="4B") Serial.println("'ADS1115 Module 16-Bit'");
if(stringOne=="50") Serial.println("'AT24C32 EEPROM'");
if(stringOne=="53") Serial.println("'ADXL345 Input 3-Axis Digital Accelerometer'");
if(stringOne=="68") Serial.println("'DS3231 real-time clock'");
if(stringOne=="7A") Serial.println("'LCD OLED 128x64'");
if(stringOne=="76") Serial.println("'BMP280 barometric pressure sensor'");
if(stringOne=="77") Serial.println("'BMP180 barometric pressure sensor' OR 'BMP280 barometric pressure sensor'");
if(stringOne=="78") Serial.println("'LCD OLED 128x64'" );
nDevices++;
}
else if (error==4)
{
Serial.print("Unknow error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
После запуска Arduino IDE, выбора модели платы arduino, установки последовательного порта (com31 у меня), а скопировал выше - расположенный код в окно с заменой текста. Запустил компиляцию, при этом Arduino IDE попросит сохранить папку скетча. Нажимаем на сохранение, и Arduino IDE выполнит компиляцию. Запишем программу в плату arduino и в мониторе последовательного порта увидим следующее:
Итак, мы убедились в правильности подключения плат.
Теперь для работы с микросхемой реального времени (ds1307) надо установить библиотеку «Универсальная библиотека iarduino_RTC.zip»
Файл: Универсальная библиотека iarduino_RTC.zip:
После установки библиотеки и перезагрузки Arduino IDE запускаем пример gettime:
Выполнив компиляцию, записав программу в плату arduino, в мониторе последовательного порта увидим результат работы микросхемы реального времени.
На фото внизу моя плата Arduino Pro Mini:

Удачных покупок!
Стоимость: ~29