За последние дни окончательно убедился, что Arduino не просто игрушка, а настроящие ворота для начинающих постигать мир программирования микроконтроллеров Atmel.
К чему это я, а к тому, что плата Arduino может выступить в роли программатора для самостоятельных конструкций на контроллерах. Как минимум существует два варианта, про которые можно прочитать на сайте
http://freeduino.ru:
http://freeduino.ru/arduino/isp.html.
Меня больше заинтересовал вариант BitBang программатора, т.к. не нужно каждый раз заливать прошивку в Arduino, когда нужно прошить внешний контроллер. Кроме того, можно прошить сам контроллер в кроватке (допустим если вышел из строя, количество же циклов перезаписи ограничено или залить обновленный boot loader).
В статье выше сказано, что подходят не все платы, это верно, но главное, что бы это была USB плата и на ней был чип FT232R/FT232RL, а вот разьём X3 можно распаять и самому (как это сделал Я - при помощи олово-отсоса очистил отверстия, поставил планочку и пропаял).
Но на этом наши приключения не заканчиваются. Возникает вопрос - чем шить? Ведь BitBang (“ножкодрыгание”) это достаточно не стандартная для общепринятых API процедура. Соответственно этим нужно заниматься через специализированные библиотеки, коих под Linux я раскопал две для чипов от FTDI:
Для первой библиотеки (libftd2xx), есть
набор патчей для
avrdude. На сайте FreeDuino есть ссылка на сборку для Windows. Я выложил в AUR правила для сборки последней версии avrdude с этими патчами:
avrdude-serjtag (потому как патчи изначально родились в недрах проекта serjtag).
На сайте libftdi лежит патч для древней версии uisp, поэтому подумав, и потратив 1.5 дня сделал на основе патчей serjtag свой патч
ftdi-bitbang-5.10-1.patch, который использует эту библиотеку. Проверил прошивая и устанавливая fuse-биты на ATTiny2313. Естественно сделал правила для сборки и поместил в AUR:
avrdude-ftdi. Вариант, если нужно отстроить на архитектуру отличную от x86/x86_64 или если бинарная версия проприетарной библиотеки рушится на вашей системе (тем более, что обновлялась она с 2008 года).
Вот
тут товарищ Di Halt более подробно рассказывает про программатор на такой же микросхеме, которая стоит на Arduino. Там он говорит об одной неприятной особенности: после прошивки не отпускается линия RESET и решает проблему аппаратно. Можете поступить так же, но оказалось что, что в исходных кодах avrdude достаточно добавить одну строчку - выставление высокого уровня на линии RESET перед закрытием порта и выходом. Патч делающий это для использования с libftd2xx и набором патчей serjtag можно поглядеть тут:
http://aur.archlinux.org/packages/avrdude-serjtag/avrdude-serjtag/clean-reset-pin.diff. При сборке пакетов avrdude-serjtag и avrdude-ftdi изменения отраженные в этом патче уже применены, так что, счастливым обладателям ArchLinux достаточно просто собрать и поставить пакет :)
Немножно хотел бы остановиться на описании программатора в конфигурационном файле avrdude.conf, особенно назначение цифр для задания линий. Выглядит это примерно так:
#arduino duemilanove
programmer
id = "duemilanove";
desc = "FT232R Synchronous BitBang";
type = ft245r;
miso = 3; # CTS X3(1)
sck = 5; # DSR X3(2)
mosi = 6; # DCD X3(3)
reset = 7; # RI X3(4)
;
programmer
id = "ft245r";
desc = "FT245R Synchronous BitBang";
type = ft245r;
miso = 1; # D1
sck = 0; # D0
mosi = 2; # D2
reset = 4; # D4
;
Не мог понять, пока не почитал внимательно приложение к даташиту FT232R подробно рассказывающее про Bit Bang режимы этой микросхемы. Если коротко: для программатора нужно 4 линии, микросхема предоставляет 8 линий, на которых можно играться уровнями. Естественно в каждом конкретном программаторе могут использоваться любые 4 из этих 8ми линий.
Каждая линия отражает бит с номером от 0 до 7. На Arduino на разъем X3 выведены контакты микросхемы с номерами 11, 9, 10, 6, подключаемых по следущей схеме:
11 - MISO
9 - SCK
10 - MOSI
6 - RESET
В документации находим табличку, в которой представлены номера выводов и какой бит они предоставляют, и получаем такую таблицу соответствий:
^ Имя линии ^ Номер вывода микросхемы ^ Имя вывода ^ Номер вывода разъема X3 ^ Номер/Имя бита (согласно таблицы) ^
| MISO | 11 | CTS | 1 | D3 |
| SCK | 9 | DSR | 2 | D5 |
| MOSI | 10 | DCD | 3 | D6 |
| RESET | 6 | RI | 4 | D7 |
Смотрим на последнюю колонку: вот они откуда и берутся эти самые 3, 5, 6, 7 в описании программатора в avrdude.conf. Т.е. эти номера - это номера битов. С остальными программаторами дело обстоит схожим образом. Одного я не понял, почему этого нет в документации? Или плохо искал?
На этом пока все, сейчас обощаю идеи о среде разработки (на данный момент на базе Makefile) и опубликую заметку.
Столкнулся давно с проблемой: приложения написанные с использованием только Xlib и Xt, например,xclock, xfontsel, или удобная тюнинговалка xvidtune, или мелкая оповещалка xmessage, очень долго запускаются, до 15-20 секунд, при этом давая значительную нагрузку на процессор. Если запускать в терминале, то обычно получаем, среди прочего, такую строку:
Warning: Missing charsets in String to FontSet conversion
Так как эти приложения использовал достаточно редко, то не обращал внимание, но сегодня что-то достало, решил разобраться. Беглый поиск привел на эту страницу:
http://www.holoweb.net/~liam/fonts/common-linux-font-problems.html (искать по фразе “Everything starts up really slowly”). Информация старая, ещё для XFree86, ориентировочно 2002 года, но, с небольшими поправками, не потерявшая актуальность и сегодня.
В общих чертах: проблема в fontconfig и локалях Xorg, где указаны кодировки для шрифтов, которых нет в системе. Путей решения получается три:
- Запускать через приведенный там скрипт nolocale, добавив туда ещё сточку:
bashexport LANG=
- Поставить шрифты со всеми нужными кодировками
- Отредактировать файл локали, убрав (закоментировав) использование несуществующих кодировок
Так как первый способ неудобен, а второй накладен, решил сделать по последнему варианту. Итак, рецепт для ArchLinux (с небольшой адаптацией последнего пункта подходит и для любого другого дистрибутива)
Для начала нужно понять шрифтов в каких кодировках у нас нет.
Для этого бредём в директорию /usr/share/X11/locale/<ВАША_ЛОКАЛЬ>. У меня локаль ru_RU.UTF-8
, поэтому директория: /usr/share/X11/locale/ru_RU.UTF-8 и выполним там команду:
cat XLC_LOCALE | grep name | grep -v 'object_name<br/>|encoding_name'
В результате получим примерно такой вывод:
name ISO8859-1:GL
name ISO8859-1:GR
name KOI8-R:GR
name MICROSOFT-CP1251:GR
name ISO8859-5:GR
name JISX0208.1983-0:GL
name KSC5601.1987-0:GL
name GB2312.1980-0:GL
name JISX0201.1976-0:GR
name ISO10646-1
На то, что после двоеточия не обращаем внимания, итого, кодировка состоит из двух частей, разделенных “-”: CHARSET_REGISTRY и CHARSET_ENCODING (за подробностями сюда:
http://lesstif.sourceforge.net/doc/super-ux/g1ae04e/chap5.html)
Теперь запускаем программку xfontsel, придется подождать малость (с чем собственно мы сейчас и боремся).
Итак, шрифты в X11 издревле задавались хитрой строчкой, поля в которой были разделены знаком “-”, последние два элемента как раз и есть CHARSET_REGISTRY и CHARSET_ENCODING (в терминах xfontsel: rgstry и encdng соответственно). Теперь просто проверяем по последним двум полям, что есть все комбинации из вышеполученных rgstry-encdng (на регистр внимания не обращаем), те, которые не находим помечаем.
Теперь возвращаемся в каталог с локалью, открываем файл XLC_LOCALE на редактирование находим секцию с несуществующей кодировкой и комментируем её.
У себя я не нашел шрифтов в кодировке microsoft-cp1251
(есть только cp1252), поэтому полностью закомментированная секция выглядит теперь так:
# fs3 class (MICROSOFT-CP1251)
#fs3 {
# charset {
# name MICROSOFT-CP1251:GR
# }
# font {
# primary MICROSOFT-CP1251:GR
# }
#}
Все, сохраняемся и выходим. Проверяем, приложения должны стартовать практически мгновенно.
Ну и последний штрих для ArhLinux. Дабы уберечь от перезаписывания этого файла при обновлениях пакета libx11 (а именно ему принадлежат эти файлы локали), его нужно “замаскировать”. Для чего открываем на редактирование файл /etc/pacman.conf,
находим параметр NoUpgrade и приводим его примерно к такому виду:
NoUpgrade = usr/share/X11/locale/ru_RU.UTF-8/XLC_LOCALE
Теперь при обновлениях, если файл в пакете изменился, он будет ставиться под именем XLC_LOCALE.pacnew и соответствующим предупреждением на экране и в логе. Дальнейшие шаги по поддержанию в актуальном состоянии зависят от вас.
Ну и последнее замечание, описанной процедурой можно и просто найти шрифтов в каких кодировках нет в системе и просто поставить их, если они у вас имеются :)
В этом году опять повезло, 12 июня выпало на субботу, а, как следствие, сразу образуются три выходных подряд.
Не долго думая, решил собрать народ, и сходить на Ольховую, а то уже засиделся дома, да и вершин повыше захотелось. Народ собирался вяло, расшевелить получалось слабо. К четвергу собрал только троих: Я, Настя, Серёга. Судьба ещё четверых (одна моя знакомая и трое ею позванных людей, мне не знакомых на тот момент: Аня (знакомая), Ярослава, Лиза и Антон) должна была решиться в пятницу, поэтому распределяя продукты, сделал так, что бы эти две подгруппы были независимы. Просто подводили уже не раз, когда только в транспорте оказывалось, что кто-то проспал, а так получается относительная независимость, при возможности готовки в одном котле :)
В пятницу покупаю билеты на автобус, идущий на Преображение (отходит в 10.00 от автовокзала, с учетом багажа и предварительной продажи, на троих получается 1000 руб, билеты брал до Монакино), смотрю на места: 37, 38, 41, смутно понимаю, что остальным врядли судьба боготворит ехать одной бандой с нами…
В общем так и случилось, они добирались на электричке до Партизанска (да, а Аня проспала), и от туда на перекладных (благо Ярослава гоняла автостопом, но без дорожного атласа в незнакомых местах, трудно бывает)… В результате по выезду из Сергеевки наш же автобус их и подобрал :)
И тут оказалось, что они малость не туристы: палатка в руках, спальник в руках, всю экипировку собирали смиру по нитке. Ладно, примерно на такие случаи 20 метров бельевой веревки вожу :laughing:
Высадили нас перед знаком въезда в Монакино, огляделись, закинули рюкзаки и отправились в путь.
Дорога сразу не понравилась: видно, что она довольно езженная, широкая и пыльная. А сверху жарит как не в себя. Но буквально через несколько метров рядом с нами останавливается пикапчик, оказался местный егерь (жалко имени не спросил), отличный мужик, малость интересностей рассказал. Забросили ему в кузов рюкзаки и умудрились вшестером впихнуться во внутрь :)
Добросил он нас не далеко, но как раз провез самый жуткий этап: поля. Сам он поворачивал на базу.
Скинув рюкзаки занялись делом: примотали всё что можно примотать к рюкзакам веревкой, что бы освободить руки. А мой рюкзак потяжелел на килограмм гречки с рисом :( На речке рядом, запаслись водой (как оказалось - не зря). И шагом марш.
По дороге ничего особо хорошего рассказать не могу: пылища, машин много (правда больше встречных было, а отставшие Лиза и Ярослава, даже смогли уазик застопить, который до речки их подбросил, после чего сворачивал на боковую, еле видную дорогу вдоль ручья), жирило и с низу (пыль раскаленная была) и сверху. В одном только месте порадовал полоз: проходим, смотрим, из коряги торчит хвост, и буквально сразу вжик, и втянулся, а сантиметров 10 ниже из коряги показалась любопытная морда, что уставилась на нас и как палка стояла, отошли, он малость втянулся, а когда подходили: снова вылазил, мол, что это за создания такие интересные? :)
Из-за жары снял футболку, повесил на спину и под лямки, что бы рюкзак не натирал, пока дошел до речки (примерно где впадает ключ Карненков (нечетко пропечатано)) - стал похож на африканца. Там мы были в 18.00 (за спиной 3 часа пути). Сделали передышку, искупались (кто хотел) приготовили суп… А тут вторая новость: вкусовые предпочтения. Я когда сочинял меню и раскладку, всех кто точно едет спросил, кто, что, как. Про новичков не знал, а оказалось: Антон не ест мясо, Ярослава - сало (правда я его, как оказалось, забыл в холодильнике :)), Лиза - лук в супе. Как результат, на вершине варили такой же суп, но уже из расчета на троих (вторая подгруппа решила возвращаться на второй день и на вершине не ночевала), получилось значительно вкуснее (в поход тушенку не брали, использовали сервелат, получилось крайне вполне себе).
На привал ушло около 2х часов, решили, что по дороге ищем подходящее место и ставим лагерь. Через 30 минут вышли к развилке - прямо дорога к подножию, направо - к пещерам вдоль р.Малая Алексеевка, там же на берегу и поставили лагерь. Буквально рядом есть замечательная заводь в которой милое дело купаться, над заводью нависает скала - красивое место.
А вот вечерние посиделки, до 2х ночи и вино, как показал следующий день, были явно лишними. Кроме того, пока сидели, я по глупости у тента оставил мешки с едой, так мышки помогли попробовать одну картофелину (прогрызли пакет) и одну пачку гречки. Эту часть продуктов пришлось утилизовать. И вообще, если ночуете под тентом - не трудно подвязать мешок под конек на веревку, благо, обычно, место позволяет.
Кроме того, утром я и настя нормально встали в 6.30, приготовили завтрак, к семи часам разбудили лагерь, правда встал только Серёга, вторую палатку смогли растолкать только к 8.30-9.00 часам. Как результат смогли выйти только в 10 часов, вместо намеченых 8.00-8.30.
Где-то через час были у последнего моста, у которого переходили реку вброд, малость отдохнули и ещё через час были у начала маршрута. После выхода на хребтик, остановились, так как начали решать как лучше быть тем, кто сегодня хочет добраться домой. В результате Антон и Ярослава, спрятали свои рюкзаки и решили налегке подняться на вершину, осмотреться и спуститься вниз. Лиза же остается внизу (трудно оказалось её и на хребтик зайти), ждет их до 16.30-17.00, если они не возвращаются, сама отправляется домой. Я такие вещи не люблю, основной подход: или все идем, или все возвращаемся. Но в любом случае, люди должны быть парой - если что случится, что бы хоть один мог найти помощь.
У начала маршрута, как я думаю, следовало бы сделать привал, но мы сразу пошли на подъем, а недостаток воды, не позволил на переходе сделать привал и приготовить обед, поэтому шел на запасах орехов и изюма в карманах.
Подъем дался очень тяжко, хотя погода очень способствовала - солнышко выглянуло только под вечер, а так небо было затянуто и поддувал ветерок. Несмотря на всё это сердечко заходилось, а ближе к вершине, после каменистого хребтика, малость недоходя до родников, после прыжка с камушка, уже дали знать и ноги - подкосились, подумал и присел передохнуть, прикрыл глаза и вырубился. Судя по всему, в отключке был около 30 минут, потом проснулся и продолжил путь. В общей сложности подъем у меня занял почти ровно 7 часов, по дороге было два или три 30 минутных передыха. Местами хотелось очень есть, но когда доставал еду, кусок в рот не лез. Сдается мне, что сказалось то (помимо вообще физ подготовки), что мало спали и вино - знакомые признаки интоксикации, хотя вроде и не пили почти, в общем, алкоголь если и принимать, то строго наркомовские 100 грамм, не больше :)
Уже после каменного хребтика (или как я её назвал “каменная грядка”), порадовала и живность: дорогу перебежал любопытный бурундук, который не торопился убегать далеко, туристы для него, видать, уже обыденность. Через несколько шагов, буквально из под ног, выскочила полевка и юркнула между камней, но так, что спинка осталась видна, почти сразу развернулась и секунд десять смотрела на меня своими бусинками глаз, после чего скрылась окончательно. Действительно, зверье там уже прикормлено и людей особо не пугается :) Клещей почти не снимали, было похоже на то, что спускающиеся навстречу туристы уже их всех собрали :laughing:
Когда дошел до родника, счастию не было предела, ведь как приятно вдоволь напиться ледяной, ломящей зубы, сладкой воды (или только мне она показалась сладкой?). Небольшой передых и дорога дальше: сто шажков и отдышаться, сто шажков и отдышаться, пятьсот шажков - присесть и передохнуть пару минут. Но ничего, Я упорный: язык три раза вокруг шеи обмотаю, но до цели доползу, назад не поверну! И дополз же :) Что бы несколько себя оправдать на передышках делал фотографии.
На подъёме обогнала ещё одна группа туристов: они тащили с собой баню, однин человек - печку и один саму баню и веники, остальные - прочее имущество.
Пока поднимался, начал задумываться, а чего это я обратно не вижу Антона с Ярословой, ведь они должны были по крайней мере около 2-3 часов назад мне встретится. На вершине все стало на свои места: у костра сидит Антон, Ярославы нет, говорит, пошли вместе на вершину, но возращались не вместе. Как оказалось Ярослава заплутала, но у меня сразу полезли нехорошие мысли. Решили - сейчас малость передохну и пойдем искать. Но Антоха, молодец, сорвался раньше, хорошо, что ничего не случилось, и, буквально тут же, нашлась. Стал вопрос как им возвращаться: уже скоро закат, а в сумерках, достаточно сложно спускаться. Но все же, они решили отправляться. Подробности их обратного пути узнал только на следующий день (все это время было малость не по себе).
Через час после завершения пути был приготовлен обедо-ужин: вкуснющий рисовый суп (т.к. супы отличались только заправкой: рис, перловка, макароны и т.п., соответственно названия я им давал и этому признаку) =-) Перекус, и уже бодро прыгали по камням смотреть закат. Пока прыгали, прошли мимо стоянки семейной пары и их детей, бросилось в глаза их убежище: четыре кола, высоток около 40-50 см, и сверху натянут полиэтилен, с образованием стенок, получается эдакая коробочка, напротив входа которой горит костер. На обротном пути в наш лагерь присел у них поболтать: дочка у них походница с 1 года и 4 месяцев - носили в детском рюкзаке-люльке на Туманную. Вообще - молодцы, что сказать.
Там же на камнях, удалось поймать связь, предупредил родных, что таким темпом есть веротяность, что останемся на третью ночевку, посему не волноваться. Кстати про связь, после каменной градки был промежуток в котором было замечено: как начинает дуть ветер - появляется связь, как только он прекращается - исчезает (у меня телефон мерзко пикает, когда ловит и теряет связь), объяснимо, но забавно :)
Вечером долго не сидели, в 11 часов начало клонить в сон, посему, не стал издеваться над собой, собрал продукты, подвесил на крючек на веревку, на которой был растянут тент, котелок с остатками супа - закрыл и повесил на сук. Сам упаковал себя в спальник и буквально сразу заснул, предварительно завел будильник на 6.30. Спал без задних ног - так сказалась усталость, но проснулся за десять минут до будильника.
Утром сразу поднялись и побежали на вершину смотреть восход, к сожалению, малость промазали со временем, но красоту это не отменило. Восход бы и так не увидели, ибо на востоке было облачно, но пробивающиеся лучи солнца… Почти как на библейских картинах :) Вокруг шикарная видимость, хотя и ближние и дальние сопки укутаны голубой дымкой (приморская влажность под 100%) В общем - красота.
Побродив по вершине, пофотографировавшись, возвратились в лагерь - готовить завтрак и собираться в обратный путь. Стало несколько грустно, но что делать - время поджимает.
Позавтракали, помыли котелки, запаковали рюкзаки и тронулись.
И вот спуск, решили идти по тому же маршруту, что и поднимались - другие маршруты оставим на следующие разы :)
На роднике заправились водой, на каменной грядке отлично ловит Акос, Настя предупредила свою родню о возможной внеплановой ночевки. Буквально после каменной градки встретили двух ребят - Сергея и Николая, они на легке в быстром темпе забирались на гору, сказали им, что скоро родники (они были рады, ибо водичка кончилась) и идти не больше получаса в их темпе. Они же сказали, что внизу, у брода встретили наших, как я понял - Антона и Ярославу, они собирались, следовательно они успешно спустились, дошли до переправы и разбили там лагерь на ночь - не получилось им вернуться в тот же день, но неплохо, главное что все нормально. Поблагодарили их за добрую весть и потопали дальше.
Спуск дался достаточно легко, занял около 3.5 часов времени, и то, лишние пол-часа из-за меня - под конец отказались держать ноги на спуске, пришлось семенить. Крутые участки, которые можно было легко просмотреть, не мучался и пробегал - так оказалось легче, даже с рюкзаком. Внизу у ручья сделали небольшой передых, залиль два литра воды, бандану на голову смочил и отправились дальше. Примерно через час были на переправе, опять малость привалились, переправились. И буквально сразу видим ребят, которых встретили у каменной грядки - у ни на все про все забег занял около 3-3.5 часов. Молодцы, шустро. Нужно будет попробовать в следующий раз тоже забраться на легке.
Они окунулись прямо на переправе, я не смог удеражаться и последовал их примеру :) После, они сами предложили подбросить нас до трассы (сами направлялись в Партизанск), мы переглянулись, и без лишних обсуждений согласились. По дороге малость болтали, поделились впечателениями, кто где был, дал ссылку где можно варианты маршрутов посмотреть (на сайте Зеленого). Они рассказали, что на подъеме видели тигриный след - большой и малый, видать тигрица с тигренком, но т.к. по отзывам егеря, зверье тут есть, не думаю, что они будут агрессивны по отношению к человеку, не рыси же все таки.
Около 17 часов были на федеральной трассе. Распрощались, пожелали доброго пути и новых встреч на тропах.
Тут я начал вспоминать свои навыки автостопа, скоро остановили машину, водитель правда сказал, я не далеко, подброшу вас до перекрестка на Углекаменск, а то много машин туда едет, что бы вы и вас не вводили в заблуждение, там уже поймаете машину. Спасибо ему за участие, как оказалось, сам он работал в Лозовском заповеднике, так что с такими как мы уже сталкивался, и понимает :)
Там мы выбрали место наверху пригорка - лучшее место для стопа, обычно у машин там скорость меньше, и где-то около 17.50 поймали машину, за рулём на пассажирском сидении настоящие горцы, а буквально пятью минутами раньше Настя напомнила, как прозвала её сестра меня на прошлогоднем походе на Туманную (я тогда бороду носил) - чечен. А у Сереги в роду тоже чеченцы были, и профиль соответствующий, может это помогло? :))
Ребята ехали в Уссурийск, согласились нас подбросить сколько смогут по пути… Ага, подбросить, как мы ехали, я вспомнил слоган: лучше нету самолета, чем любимая тойота, ибо средняя скорость на спидометре была 130 км/час, местами до 150. Таким образом долетели до Шкотово, где по прикидкам через 30-40 минут должна быть электричка, попросили там высадить, поблагодарили и потопали на станцию. Купили билеты, на лавочке перекусили в ожидании элекрички… А дальше был дом, душ и сон :)
По приезду домой сразу прозвонился нашим попутчикам: Ярославе и Лизе, оказалось, что добрались отлично, Лизу довезли спелеологи, чуть ли не до самого дома, Ярославу и Антона на следующий день так же на попутке, подобрали в километре от нашей первой ночевки. Все добрались, все здоровы, и я спокойно лег спать.
Как финал: я в восторге, спать под тентом было не холодно, и даже комфортно, Настя отличный кашевар и всем спасибо за компанию!
UPD, фото:
http://picasaweb.google.ru/adrozdoff/2010061214, а тут одним архивом (в исходном качестве):
http://hatred.homelinux.net/~hatred/foto/tourism/2010.06.12-14_Olhovaya.tar