?

Log in

No account? Create an account
Arduino Uno + Debian Linux + Serial I/O = brick? - Cообщество любителей Arduino [entries|archive|friends|userinfo]
Cообщество любителей Arduino

[ website | Официальный сайт Arduino ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Arduino Uno + Debian Linux + Serial I/O = brick? [Dec. 14th, 2010|11:36 pm]
Cообщество любителей Arduino

ru_arduino

[tygernach]

Заметки из журнала наблюдений за живой природой


или "Если вы купили Arduino Uno и обнаружили, что на вашем Debian-based линуксе он ведет себя несколько странно"
---------------------------
Не надо пугаться, по советам из интернета ища у себя в списке девайсов что-то похожее на /dev/tty.usb*. У вас его нет, зато есть /dev/ttyACM - это именно то, что вам нужно.
----------------------------
Вы поставили себе Arduino IDE из репозитария и теперь в списке типов плат в меню не можете найти Uno? И не найдете, т.к. скорее всего, у вас старая версия. Качайте с сайта свежую (на текущий момент - 0021).
----------------------------
Не стоит без оглядки заливать на ваш прекрасный новый Uno примеры из папки Examples или откуда-то еще, если в коде содержится обращение к ком-порту (типа Serial.blahblahblah). Если, конечно, вашей целью не является превращение Uno в кирпич. Многочисленные стенания на форуме Ардуино и собственный опыт убедительно доказывают, что это один из самых простых способов сделать это. Вы тупо не сможете залить ничего нового на ваш Uno, пока происходит чтение или запись в Serial. IDE будет материться и посылать нах, а пункт меню Tools/Serial Port коварно посереет и станет утверждать, что ваш виртуальный ком-порт пропал бесследно. Да и само меню Tools будет открываться аццки долго.
Дабы не быть голословным, вот тупой наглядный пример алгоритма окирпичивания Uno:

/*  DigitalReadSerial

void setup() {
  Serial.begin(9600);
  pinMode(2, INPUT);
}

void loop() {
  int sensorValue = digitalRead(2);
  Serial.println(sensorValue, DEC);
}

Видите, в чем засада, да? ;)

Но не следует впадать в уныние! Коллективный разум нашел решения этой, не побоюсь этого слова, неприятной баги. И даже несколько:

I - Терапевтические способы

1) Не использовать обращения к серийному порту ваще.
2) Аккуратно использовать обращения к серийному порту - delay() рулит! Например, в вышеприведенном коде вставка delay(5000) перед Serial.begin() и желательно еще какого-нибудь мелкого delay() перед/после Serial/println() творит чудеса.
3) Не открывайте лишний раз меню Tools, чтобы не раздражаться на тормоза.
4) Не выбирайте большие скорости (14400, 28800) в Serial Monitor.
5) Если IDE матерится в ответ на попытки сделать Upload - не отчаивайтесь. Если в текущем коде есть задержки в обращении к Serial, у вас есть шанс успеть. Жмите Upload снова и снова. Раз так на пятый должно повезти. Также неплохо, вспомнив про большой delay перед Serial.begin() (вы же его вставили, не так ли?), нажать на reset на плате, и сразу после снова попытаться сделать Upload.
6) Если описанное в п.3 не помогает, попробуйте выдернуть шнур из компа. Подождите несколько секунд, и вставьте шнур снова, одновременно удерживая кнопку Reset на плате. IDE в это время должна быть открыта, чтобы попробовать сделать Upload сразу же после подключения.

II - Хирургические способы
1) Поставьте винду :)
2) Перепрошейте Uno - в свежей версии эта бага, говорят, исправлена. Инструкция по перепрошивке - здесь, в комменте #34. Переводить было влом, сорри. Сам перепрошивать пока не пробовал, ибо стремно и жаль испортить новую игрушку ) Автор прошивки клянется, что это невозможно - испортить ей ардуино. Правда, там же в треде есть чуваки, пишушие, что после перепрошивки вроде все зашибись, но появились какие-то глюки. Так что решайте сами.
На всякий случай скопирую оригинальный текст инструкции под катом.

I got the firmware from here:
https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/arduin...(click on the right firmware, then click raw, then save it)

Reflashing the firmware on the 8u2 is a little tricky. Don't try this unless you are prepared to risk bricking your board completely!

You need the dfu-programmer utility:
sudo apt-get install dfu-programmer

Then follow the instructions here to get the Uno into DFU mode:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1285962838/10#10

Then to flash the firmware, do this:
sudo dfu-programmer at90usb82 erase
sudo dfu-programmer at90usb82 flash --debug 1 Arduino-usbserial-uno.hex
sudo dfu-programmer at90usb82 reset

Finally uplug the USB plug, wait a few seconds, plug back in.



P.S.: Ubuntu - это тоже Debian, есличо.
P.P.S.: сорри, если баян.
LinkReply