Несколько вопросов по DS3231
- Войдите на сайт для отправки комментариев
Втр, 09/08/2016 - 20:11
Всем Привет!
Собираю систему хронометража, планировал делать секундомер с помощью внешного прерывания (attachInterrupt), но к сожалению синхронизовать несколько Ардуино-плат оказалось невозможным - за 2,5 часа разбег у трех модулей был около 4 секунд.
В качестве альтернативы был приобретен модуль RTC DS3231. Секунды хочу считать им, а миллисекунды - делать засчёт прерывания.
В связи с этим вопрос - функция Clock.getSecond() даст мне значение секунд от 0 до 59, или общее количество секунд с начала синхронизации?
Заранее спасибо за ответы!
0-59, но откуда такой вопрос? Что Вам мешало просто попробовать? Намного быстрее получилось бы.
0-59, но откуда такой вопрос? Что Вам мешало просто попробовать? Намного быстрее получилось бы.
Приобретен в интернет-магазине, пока идёт - пишу скетч, времени очень мало до гонок.
Спасибо за инфу!
планировал делать секундомер с помощью внешного прерывания (attachInterrupt), но к сожалению синхронизовать несколько Ардуино-плат оказалось невозможным - за 2,5 часа разбег у трех модулей был около 4 секунд.
А вам не приходило в голову, что вы неправильно сделали счёт времени в этом варианте?
Могу предоставить код. Но вроде сделал всё верно...
Могу предоставить код. Но вроде сделал всё верно...
Можете представить, а можете не представлять - дело Ваше, проблема-то у Вас. Только, если сделано верно, то всё должно работать точно - чему там расходиться, если одна ардуина тактирует все остальные своим сигналом вызывая у них прерывания?
Могу предоставить код. Но вроде сделал всё верно...
Можете представить, а можете не представлять - дело Ваше, проблема-то у Вас. Только, если сделано верно, то всё должно работать точно - чему там расходиться, если одна ардуина тактирует все остальные своим сигналом вызывая у них прерывания?
Возможно Вы меня не поняли. Имеется 3 модуля Arduino Nano, на каждом из которых прописаны прерывания по ИК-датчику.
При совершенно одинаковом программном коде идёт расхождение по времени. Я понимаю, это из-за неодинаковости частоты у установленных на модулях кварцев.
И как часто происходила синхронизация по ИК каналу?
Зы.AntonM пишет: Возможно Вы меня не поняли. https://www.youtube.com/watch?v=wxlEQsIYL8Q
Возможно Вы меня не поняли. Имеется 3 модуля Arduino Nano, на каждом из которых прописаны прерывания по ИК-датчику. При совершенно одинаковом программном коде идёт расхождение по времени. Я понимаю, это из-за неодинаковости частоты у установленных на модулях кварцев.
Я действительно Вас не понял. Т.е. никакой синхронизации Вы не производите, просто надеетесь, что они сами автономно будут работать с одинаковой скоростью? Таки нет. И RTC тоже не поможет.
А если Вы реально будете проводиь синхронизацию через какое-то время, то ошибка нарастать не может, т.к. каждый раз всё будет синхронизироваться.
Там видно ошибка набегала за счет относительно частой синхронизации и болтания при этом фронтов у ИК импульсов.
Объясняю подробно =)
ИК-датчик у меня фиксирует пересечение луча датчика. К синхронизации он не относится.
Синхронизация у меня проводится через широковещательный запрос по UDP по Wi-Fi, через шильды ESP-201, тоесть практически одновременно синхронизируются.
Прерывание у меня настроено на каждые 1000 микросекунд:
В итоге что у нас происходит - синхронизация проходит успешно
При этом, запускается программа-отладчик на компьютере, которая по UPD запрашивает таймеры с датчиков.
Итоги вот:
~ 1 минута:
R[192.168.0.101:10010]: SN0000f2d2-0 —> 62162 —> 00:01:02,162
R[192.168.0.102:10010]: SN0000f2c3-0 —> 62147 —> 00:01:02,147
R[192.168.0.110:10010]: SN0000f2a9-0 —> 62121 —> 00:01:02,121
~ 2 минута:
R[192.168.0.101:10010]: SN0001d4e3-0 —> 120035 —> 00:02:00,035
R[192.168.0.102:10010]: SN0001d4c1-0 —> 120001 —> 00:02:00,001
R[192.168.0.110:10010]: SN0001d491-0 —> 119953 —> 00:01:59,953
~ 5 минута:
R[192.168.0.101:10010]: SN0004aa4e-0 —> 305742 —> 00:05:05,742
R[192.168.0.102:10010]: SN0004aa03-0 —> 305667 —> 00:05:05,667
R[192.168.0.110:10010]: SN0004a980-0 —> 305536 —> 00:05:05,536
~ 10 минута:
R[192.168.0.101:10010]: SN0009270b-0 —> 599819 —> 00:09:59,819
R[192.168.0.102:10010]: SN00092683-0 —> 599683 —> 00:09:59,683
R[192.168.0.110:10010]: SN0009257c-0 —> 599420 —> 00:09:59,420
~ 15 минута:
R[192.168.0.101:10010]: SN000dc1cb-0 —> 901579 —> 00:15:01,579
R[192.168.0.102:10010]: SN000dc100-0 —> 901376 —> 00:15:01,376
R[192.168.0.110:10010]: SN000dbf6b-0 —> 900971 —> 00:15:00,971
~ 25 минута:
R[192.168.0.101:10010]: SN0016e5af-0 —> 1500951 —> 00:25:00,951
R[192.168.0.102:10010]: SN0016e453-0 —> 1500243 —> 00:25:00,243
R[192.168.0.110:10010]: SN0016e1b6-0 —> 1499574 —> 00:24:59,574
~ 40 минута:
R[192.168.0.101:10010]: SN0024a385-0 —> 2401157 —> 00:40:01,157
R[192.168.0.102:10010]: SN0024a155-0 —> 2400597 —> 00:40:00,597
R[192.168.0.110:10010]: SN00249d1e-0 —> 2399518 —> 00:39:59,518
~ 1 час 45 минута:
R[192.168.0.101:10010]: SN00602cd5-0 —> 6302933 —> 01:45:02,933
R[192.168.0.102:10010]: SN006026c9-0 —> 6301385 —> 01:45:01,385
R[192.168.0.110:10010]: SN00601bdc-0 —> 6298588 —> 01:44:58,588
~ 2 час:
R[192.168.0.101:10010]: SN006e084a-0 —> 7211082 —> 02:00:11,082
R[192.168.0.102:10010]: SN006e0154-0 —> 7209300 —> 02:00:09,300
R[192.168.0.110:10010]: SN006df4e4-0 —> 7206116 —> 02:00:06,116
~ 2 час 15 минута:
R[192.168.0.101:10010]: SN007ba6eb-0 —> 8103659 —> 02:15:03,659
R[192.168.0.102:10010]: SN007b9f1d-0 —> 8101661 —> 02:15:01,661
R[192.168.0.110:10010]: SN007b9112-0 —> 8098066 —> 02:14:58,066
Теперь надеюсь понятно для вас объяснил?
Синхронизация у меня проводится через широковещательный запрос по UDP по Wi-Fi, через шильды ESP-201,
А-а-а, ну тогда, оно. конечно ... :)
В итоге что у нас происходит - синхронизация проходит успешно
Я так и понял :)
Теперь надеюсь понятно для вас объяснил?
Да, вполне.
Поэтому увы идею с attachinterrupt пришлось откинуть в мусор и перейти на RTC...
У DS3231 есть выход с импульсами от 1гц до 32768.....тоже можно как-то использовать.