Все, что вам нужно сделать, так это сконфигурировать RTC-чип в соответствии с текущей датой и временем … и сегодняшний проект поможет вам это сделать!
Проект
RTCSetup состоит из 2-х элементов:
- графический интерфейс пользователя (GUI), написанный на языке C# и запущенный на ПК
- скетч, запущенный на Arduino, к которому подключен модуль RTC
Графический интерфейс пользователя и скетч соединены по последовательному интерфейсу с помощью несложного протокола. Исходный код для них доступен в моем хранилище данных Github.
Arduino и часы реального времени
Для связи с чипом DS1307 я выбрал библиотеку RTClib хранилища Adafruit. Данный чип наиболее часто используется в модулях RTC энтузиастами со всего мира. Соединение между ИС и Arduino устанавливается с помощью шины I2C:
На рисунке показано соединение, организованное с помощью “новых” выводов I2C платы Arduino Uno; естественно вы можете использовать выводы A4 и A5.
Скетч Arduino получает команды от ПК, выполняет их и посылает назад ответный сигнал.
Протокол
Как я указал ранее, для связи между графическим интерфейсом пользователя и Arduino используется несложный протокол, созданный с помощью лишь 4-х команд:
Команда: ##
Первая команда, отправленная после установления соединения, используется ПК для подтверждения “совместимости” модуля, подключенного к последовательному порту. Arduino должен ответить командой «!!«
Команда: ?V
Данная команда используется для получения версии скетча. Arduino отвечает строковым параметром, определенным как константа в начале скетча:
#define VERSION «1.0»
Команда: ?T
Данная команда, используемая для получения фактической даты и времени, считывается из модуля RTC. Плата Arduino отвечает строковым параметром в формате: dd/MM/yyyy hh:mm:ss.
Команда: !TddMMyyyyhhmmss
Данная команда используется для установки времени RTC. Arduino отвечает командой «OK».
Графический интерфейс пользователя (GUI)
Графический интерфейс пользователя, разработанный на C#, общается с Arduino по вышеуказанному протоколу и выполняет три функции:
- устанавливает текущую дату и время
- устанавливает требуемую дату и время, которые определяет пользователь
- получает и отображает фактическую дату и время модуля RTC.
Сначала вам необходимо выбрать последовательный порт Arduino для установки соединения и нажать кнопку CONNECT. Если соединение установлено (команды ## и ?V), тогда в строке состояния будет отображаться версия скетча.
В первом окне будет показано фактическое время ПК. После нажатия правой кнопки мыши (на красной стрелке) вы сможете сконфигурировать модуль RTC с данным временем :
С помощью кнопки с зеленой стрелкой вы сможете получить фактическое время, хранимое в модуле RTC:
И, наконец, с помощью выпадающего списка даты в центре, вы сможете выбрать требуемое значение даты и времени, и далее отправить эти значения в модуль RTC:
Технические данные
Я использовал метод, описанный в данном учебном руководстве, для внедрения пользовательского шрифта в приложение.
Я измерил время (около 150 мс), которое необходимо скетчу для установки времени, после того как команда отправлена графическим интерфейсом пользователя: это причина почему в коде, который вы видите, команда !T отправляется, когда действительное число миллисекунд составляет 850 и пройденное время – это фактическое время + 1 секунда.
while (DateTime.Now.Millisecond != 850)
Thread.Sleep(1);
string command = «!T» + time.AddSeconds(1).ToString(«ddMMyyyyHHmmss»);
serialPort.WriteLine(command);
Прикрепленные файлы:
- RTCSetup-master.zip (164 Кб)