Реклама ⓘ
Главная » Arduino
Призовой фонд
на май 2024 г.
1. 1000 руб
Сайт Паяльник
2. 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

Модуль измерения тока на ACS712 (30А)
Модуль измерения тока на ACS712 (30А)
Программатор Pickit3 USB-реле (2 канала)
вверх