#1 Re: Програмування Arduino » Датчик температуры и Reset » 2019-09-01 17:44:08

Проблема решена.
Дело было не в конфликте прерываний. Ни какого конфликта не происходит (по крайней мере, разработчики библиотек позаботились об этом). Точнее, если правильно использовать данные протоколы. Причина оказалась в том, что я обрабатывал данные с COM-порта, проверяя наличие принятых данных через Serial.available(). А делать это нужно было обязательно в serialEvent(). Изначально я отказался от этого потому, что данная функция может вызываться в любой момент времени. А поскольку у меня выполняются несколько параллельных задач, то мне нужно было обрабатывать данные только в нужный мне момент времени, когда все будет к этому готово. И до того момента, пока я не стал использовать датчик температуры с протоколом 1Ware, проблем не возникало. Похоже, что при вызове serialEvent(), разработчики предусмотрели возможность конфликта и обошли это. Соответственно, с ресетом проблема тоже решилась.

#2 Re: Програмування Arduino » Датчик температуры и Reset » 2019-08-30 18:22:42

Спасибо. В принципе, я уже тоже логически дошел до этого вывода. Попробую что-нить помудрить. Пока мысль такая - добавить примерно такой алгоритм в протокол обмена данными:
1. Ардуина сообщает компу, что хочет измерить температуру;
2. Комп перестает посылать запросы, сообщая об этом Ардуине;
3. Ардуина делает измерение, при этом не приостанавливает все остальные задачи;
4. Сообщает компу, что померила и передает значение;
5. Комп подтверждает и они дружно продолжают обмениваться данными.
Сейчас пока некогда. Как сделаю, напишу.

#3 Re: Програмування Arduino » Датчик температуры и Reset » 2019-08-29 09:55:13

Данную проблемку обошел. Сделал так. После команды ресет с компа, перестаем пытаться обмениваться данными с ардуино, пока ардуина не пошлет специальную команду, что она перезапустилась и готова работать. Сначала показалось, что проблема решена, но тут вскрылся сам "корень зла". Показания с датчика периодически "замерают". Т.е. такое ощущение, что датчик не делает новое измерение (или не получает команду на измерение) и возвращает всегда одно и тоже значение. Эти "замирания" могут продолжаться до нескольких минут. Уже начал грешить на датчик, но выяснилась такая штука. Если выключить обмен данными по com-порту (а у меня он идет постоянно), то датчик замечательно работает без каких-либо проблем.

#4 Re: Програмування Arduino » Датчик температуры и Reset » 2019-08-17 18:58:48

Такое ощущение, что датчик "зависает" в каком-то неопределенном положении и перестает реагировать на команды. Можно ли его как-то физически ребутнуть, управляя непосредственно уровнем на пине ардуино, а не методом reset в OneWare?

#5 Програмування Arduino » Датчик температуры и Reset » 2019-08-17 17:48:57

VadimE
відповідей: 10

Всем привет.
Есть некоторое устройство на базе Ардуины, которое передает информацию с датчиков на комп через USB-COM адаптер.
В том числе и датчик температуры DS1820.
Есть необходимость переодически с компа перезапускать ардуину. Сначала использовал софтовый ресет. Но тут много заморочек с восстановлением состояния портов. Поэтому, решил ребутать его "моргание" DTR на COM-порту. Все замечательно работает. Но после такого ресета перестает читаться данные с 1820. Всегда получаем ноль. Но через небольшой промежуток времени (примерно 50 сек) все восстанавливается и работает. При простом нажатии ресета на плате, проблем не возникает.
Данные с датчика читаю обычным OneWare (0xCC - 0x44 - 0xCC - 0xBE).
Помогите разобраться.

Підвал форуму