Ну, что ж, немного практики - разберемся, как подсоединить к Arduino популярные у самодельщиков часы реального времени DS1302, DS1307, DS3231 и программировать их работу.
Теоретические разговоры о том, что есть RTC и как они работают - туть:
Подключение
Покажу пару вариантов подключения к аппаратному I2C (выводы SDA, SCL МК выведены на пины A4, A5 / 27, 28 Arduino UNO).
Теперь рассмотрим одну библиотеку для работы с часами в ArduinoIDE, установим текущие дату и время, попробуем по-выводить куда-нибудь, заведем будильник и поделаем чего-нибудь еще :)
RTClib by Adafruit
Библиотек для работы с часами на Arduino много, я решила обозреть вот эту библиотеку от Adafruit. Старые версии (1.X.X) работали самостоятельно, для работы с версиями новее 2 нужно доставить либу Adafruit BusIO.
Либа поддерживает часы DS1307, DS1302, DS3231, PCF8563S, PCF8523 и микроконтроллеры ATmega32, ATmega328, ATmega2560, ATiny85, а также ESP8266 и отладочные платы на ARM (Zero и Due).
В ней есть функции для настройки часов, чтения данных о времени и температуре, установки будильников, в общем, полный фарш.
Высокоуровневые обертки делают код симпатичнее, хоть и утяжеляют программу. Такая библиотека будет хорошим выбором для программистов, плохо знающих железо :)
Что ж, рассмотрим основные функции либы на примере DS1307 и DS3231 (у меня в наличии только DS1307, так что функции для 3231 закомменчены):
Что мы видим в терминале:
Вот такие пироги с ардуинятами, посмотрите под капот почитайте исходники библиотеки, поделитесь в комментариях своими любимыми библиотеками.
Следующая статья будет посвящена работе с RTC в Atmel Studio и CodeVisioAVR.
Предложу почитать :)
Статья про пару альтернатив Serial Monitor Arduino:
И одна про C/C++ для МК