Главная » Arduino
Призовой фонд
на июнь 2023 г.
1. 1000 руб
Сайт Паяльник
2. 100 руб.
3. 50 руб.

Настройка модуля часов реального времени RTC для Arduino

Все, что вам нужно сделать, так это сконфигурировать RTC-чип в соответствии с текущей датой и временем … и сегодняшний проект поможет вам это сделать!

Проект

RTCSetup состоит из двух элементов:

  • графический интерфейс пользователя (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);

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 3.4 Проголосовало: 1 чел.

Комментарии (11) | Я собрал (0) | Подписаться

0
Lee #
Проект применим для DS3231.
Надо лишь указать свой чип в строке RTC_DS3231 RTC; (за место DS1307)
Спасибо!
Ответить
0
Сергей #
Попробовал применить, как указано к DS3231. Скетч загружается, приложение на компе загружается, соединение происходит, считывает дату и время из модуля. Но при попытке записать текущие значения из компа, приложение зависает. Не пойму в чем проблема. Очень необходимая штука, давно искал, но еще бы и работала...
Ответить
0
Сергей #
С модулем DS1307, кстати, такая-же ерунда творится. При попытке записать дату и время в верхней "стрелки", курсор мыши приобретает форму песочных часов и прога не реагирует ни на что. А в верху окна появляется надпись: RTSSetup Устройство %2 "%3" не отвечает
Ответить
0
Юрий #
У меня все работает с модулем DS3231, без каких либо правок. По управлению этот модуль полностью совместим с DS1307.
Автору огромный респект, очень нужный софт.
Ответить
0
Serega #
Доброго времени суток, не могу разобраться как установить время вручную кнопками, если кто знает подскажите плиз. Я разобрался как при прошивке выставить любое время, а чтоб изменять его потом кнопками что-то не могу разобраться. Хелп
Ответить
0
Валерий #
У меня программа не записывала текущее время под Win XP. Переставил на Win 7x64 - всё работает идеально. Модуль DS3231, скетч не изменял. Надеюсь, что кому-либо поможет. Спасибо за программу!
Ответить
0
roman #
сдк не ставит день. печаль...
Ответить
0
Alexandr #
Может подскажете как подключить программу к arduino leonardo? У него встроенный модуль RTC, но соответствует DS1307.
Ответить
0
Eugene #
GUI не работает на Win10. Жму CONNECT:
"No data from serial port: Время ожидание операции истекло"
В коде Сообщение подправил
MessageBox.Show("No data from serial port:" + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
В VisualStudio:
Вызвано исключение: "System.TimeoutException" в System.dll

response = serialPort.ReadLine(); не проходит

В ARDUINO IDE если в Мониторе порта ввожу ##, то получаю !!
Т.е. СКЕТЧ работает.

Прочитать с порта не получается. Где копать - не пойму.
Посдкажите пожалуйста.

Ардуинка работает, в порт !! посылает. Проверял.
Програмулинка не может считать с порта.

Для инфы: Arduino Micro + RTC_PCF8563
Ответить
0
Eugene #
не помогло
serialPort.ReadTimeout = 10000;
Ответить
0
h0per #
помогло:

serialPort = new SerialPort(serialPortName, 57600);
serialPort.NewLine = "\r\n";
serialPort.ReadTimeout = 500;

serialPort.BaudRate = 9600;
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.Handshake = Handshake.None;
serialPort.RtsEnable = true;

Все заработало !!
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Raspberry Pi 2
Raspberry Pi 2
Pickit 2 - USB-программатор PIC-микроконтроллеров Паяльник с регулировкой температуры
вверх