Как стать автором
Обновить

Комментарии 11

Сколько ж вы словили граблей только из за того, что взяли ардуино.
Взяли бы чистую тиньку45 — проблемы были бы только с прошивкой.
На основе этой схемы http://microsin.net/programming/AVR/avr-usb-tiny45.html можно с легкостью сделать все, что требовалось от вашего устройства.
Спасибо за ссылку, очень интересный вариант! А то, что тяжеловата железка для данной задачи, я осознавал в полной мере, просто так сложилось, что микроконтроллера в подходящем корпусе не было, а данную Arduino нужно было утилизировать, т.к. наигрался.
но команды для работы с текстом (cat, echo и т.п.), получают и отправляют только мусор.

И правильно, потому что настроены на фиксированную скорость, которую им надо указать.
Напишите тут, пожалуйста, подробнее… если речь о stty то с этим я долго экспериментировал и эффекта не было, понятно, что менял соответственно Serial.begin(...) в скетче;
Скетч отвечает только за настройку порта микроконтроллера. А в схеме есть еще мост USB-UART, они должны быть настроены на одинаковую скорость чтобы не было проблем. Кстати насколько ардуина скрывает реализацию — если бы вы анализировали содержимое регистра состояния UART контроллера, видели бы кучу возникающих ошибок framing error возникающих при попытке приёма данных, что однозначно свидетельствует о несоответствии скорости передатчика и приёмника.

Вам надо в скетче установить скорость, и со стороны системы тоже указать те же параметры соединения, по умолчанию стоит конфигурация 9600-8N-1(9600бод, 8 бит, без контроля чётности, 1 стоп-бит) для соответствующего COM-порта под которым видится ардуина в системе.
Если программа умеет сама ставить скорость порта, то для команд в консоли работающих с портом настройки находятся на уровне системы или даже консоли.
Спасибо, в целом согласен, имеет смысл копнуть глубже. У меня инициализация порта производится командой
stty -F "${DEVICE}" cs8 9600 raw ignbrk noflsh -onlcr -iexten -echo -echoe -echok -echoctl -echoke -crtscts -hupcl
эксперименты начались с 115200 в итоге пришлось скатиться до 9600, не приятно конечно, но оказалось вполне приемлемо. Ради интереса надо будет сравнить чем эта инициализация отличается от minicom.
Я в своем проекте стыковки ардуины и openwrt использую вот такую команду, и работает без сбоев с 2013 года
stty -F $ARDUINO_PORT ispeed $ARDUINO_PORT_SPEED ospeed $ARDUINO_PORT_SPEED cs8 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
Честно что означает каждый параметр я не знаю, где то когда то скопировал, но работает уже не в одном проекте и очень успешно.
Сравнил… эти команды эквивалентны за исключением icrnl (переводит \r -> \n), нужно будет тоже включить, спасибо за идею, и hupcl — я выключил пытаясь побороть проблему с reset по DTR, не помогло.
Проблема с резетом на более старших платах решалась аппаратным отключением линии DTR, перерезав дорожку на плате, а с электролитом интересное решение, но есть один нюанс.
Может мои предположения окажутся глупостью, а если обращения к плате станут слишком частыми, превысят какой то определенный порог, именно подключение, отключение терминала, когда проскакивает DTR, не успеет ли случаем зарядится электролит до состояния срабатывания резета?
не успеет ли случаем зарядится электролит до состояния срабатывания резета?

Там наоборот конденсатор всегда заряжен, для срабатывания reset нужен низкий уровень, его DTR выставляет на короткое время и конденсатор не успевает разрядиться, зато заряжается он потом очень быстро. Иначе говоря, частота для такого сценария должна быть не реальной.
все понял. Я капитально сглупил ссори, сказывается отсутствие практики с чистыми авр-ками, и переход на ардуину… где все продумано за нас.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории