Хроники Города Глупова - Помощь клуба: Arduino + LabView
November 3rd, 2015
08:09 pm

[Link]

Previous Entry Add to Memories Tell A Friend Next Entry
Помощь клуба: Arduino + LabView

Соратники,

Такое дело.
Я собрал некий приспособ на Arduino UNO, который постоянно опрашивает
некоторое количество датчиков, и логгит раз в 5 секунд данные на локальный
диск (SD карта), а также, в зависимости от того что он намерял, производит
управление некоторыми внешними устройствами через обычный TTL, в режиме
"включить-выключить". Работает эта штука автономно, поскольку запитывается
от блока питания, который, в числе прочего, и питает как внешние устройства,
так и датчики. В данный моемент все цифровые I/O выводы и часть аналоговых
задействованы.

Для правильной работы приспособа критично то, что он отслеживает временную
последовательность действий, т.е. программа (скетч) не должна прерываться.

Приспособ предполагает возможность изменения настроек "на лету", для чего
я нарисовал некий интерфейсец на LabView, который разговаривает с Ардуино
через тот же USB. Проблема заключается в том, что при попытке сконфигурировать
порт (а обращаюсь я к порту из под LabView через VISA, и другого способа в Вин-7,
кажется, нет), функция конфигуратора устанавливает CTS, что вызывает ресет
контроллера, и скетч на нем запускается сначала, теряя всю историю.

По всей видимости, это проблема ардуиновского процессора.

Для восстановления истории можно читать только что записанный лог, это одно
из возможных решений, но кривое и геморройное, к ткому же мне не хочется
перегружать кодом скетч, который и так уже еле влезает в память.

Другое возможное решение основано на изменении дефолтной конфигурации USB
серийного порта (как минимум установки baud rate повыше чем 9600). Но я не
нашел как -- винда не видит ком-порта пока я не подсоединю к нему контроллер,
а когда подсоединяю, то уже какбы поздно. К тому же переустановка baud rate
через device manager сбрасывается при перезагрузке компа. А контроллер должен
при этом работать нон-стопом месяцами.

Что посоветует клуб?

UPD: solved.

Current Music: Covenant - Nexus Polaris
Tags: ,

(5 comments | Leave a comment)

Comments
 
[User Picture]
From:[info]poturnak
Date:November 4th, 2015 - 09:42 am
(Link)
На плате Uno существует дорожка (отмеченная как "RESET-EN"), разомкнув которую, можно отключить автоматический сброс микроконтроллера. Для повторного восстановления функции автоматического сброса необходимо спаять между собой выводы, расположенные по краям этой дорожки. Автоматический сброс также можно выключить, подключив резистор номиналом 110 Ом между выводом RESET и 5В; для получения более подробной информации см. соответствующую ветку форума.

http://arduino.ua/ru/hardware/Uno
[User Picture]
From:[info]ded_mitya
Date:November 4th, 2015 - 06:39 pm
(Link)
О, спасибо!
Слона-то я и не заметил. Пойду просвещаться.
[User Picture]
From:[info]ded_mitya
Date:November 5th, 2015 - 08:27 am
(Link)
And the winner is:

The easiest way is to stick a larger value capacitor between gnd and the
reset pin. I use a 10uF - works a treat. It has the effect of 'swallowing'
the small ground pulse transferred by the 0.1uF auto reset capacitor and
preventing the board from resetting. It avoids the current drain of holding
it high with a resistor. too.


Так собственно, и сделал. В принципе, повесить пул-ап на ресет даже чем-то
удобнее (конденсатор в момент подключения сам по себе ресетит контроллер,
поскольку эффект от него ровно тот же, что и от 0.1 мкф, через который
контроллер штатно софтверно сбрасувается), но идея что по резистору будет
течь ток, не очень конфортная, посколько вперспективе я собираюсь это все
повесить off-grid, а там за каждый микроампер придется побороться.
[User Picture]
From:[info]poturnak
Date:November 5th, 2015 - 02:09 pm
(Link)
Состояние Резет - логический индикатор состояния
ну микроамперы там в цепи резистора - микроскописчески малы относительно общего .
Но кондесатор хуже резистора .
Потому что в момент его розряженого состояния , его внутренне сопротивление очень мало
и в момент зарядки - есть какой-то относительно большой скачок потребления тока для его зарядки .
Поэтому большой номинал емкости - это большой импульс потребления для зарядки .
Резистор же статичен в номинале .
Может стоит подобрать резистор максимально побольше в сопротивлении - чтоб соответвовало логическому состоянию функции Резет .

[User Picture]
From:[info]ded_mitya
Date:November 5th, 2015 - 07:34 pm
(Link)
Может быть. Я сделал два патч-кабеля, с конденсатором и с резистором,
так что заменить одно на другое дело минутное.
Комиссариат Культуры Powered by LJ.Rossia.org