June 10, 2011

Олимпиада по контроллерам глазами олимпиадника

     Одной из 4-х олимпиад, в которых я учавствовал с февраля по апрель, была олимпиада по микроконтроллерам. Проходила она с 15 по 17 апреля и проводилась фирмой "Оупен Систем" совместно с КПИ. Фирма проводит олимпиады каждый год уже не знаю, сколько лет подряд, меняя универ каждые 3 года. Поехал я в составе одной из двух команд от нашего универа. Немного позднее в универе сказали, что видели наши фотки на сайте "не все дома". О сайте я раньше ничего не слышал, и поэтому само название и смех информатора несколько настораживали. Потратив битые полчаса я все-таки нашел статью, где действительно были фотки. Правда, на фотках из всех участников наших 2-х команд я нашел только себя да и то один раз. Сама статья вот здесь, а фотка в самом низу. Может репортера в плохо проинформировали или он сам немного напутал, но в общем статья в некоторых местах искажает суть событий. Мне это долгое время не нравилось и решил несколько подправить то, что сказал автор стати.
    Сама олимпиада проводится в 2 этапа, разделённых во времени, на отладочных стендах, предоставляемых фирмой-организатором.
    1-й этап заочный и обычно проводится осенью. Это означает, что участники могут находиться в любой точке планеты и использовать любые подручные средства при выполнении заданий. Готовые задания отправляются на удалённый сервер, где они и проверяются.
    2-й этап уже очный и проводится он весной. Все участники съезжаются в один универ, рассаживаются по аудиториям и опять-таки выполняют задания, отправляя результаты на сервер. При этом пользоваться уже можно только макулатурой, любой, но принесенной с собой, плюс документацией к аппаратной части. Из всех доступных программных средств - только текстовый редактор, компилятор и ПО для программатора (калькулятор и просмотрщик PDF - не в счёт :) ). Библиотек для работы со стендом не дают. Обычно организаторы за день до начала олимпиады могут сообщить о том, что будет использоваться некоторая дополнительная аппаратная часть (например, ЭМ-катушка, которую самому смотать надо или, как было в этот раз, 2-хстрочный LCD-дисплей). В любом случае на очную олимпиаду надо тащить с собой пачку распечатанных исходников своих собственных библиотек, а потом тратить время на то, чтобы их набрать в редакторе, вместо того, чтобы решать задачи. Ну это бывает только тогда, если повезёт, и при решении заданий нужно будет использовать что-то, что уже придумалось, проверилось и распечаталось.
    В этот раз зимой нам сказали, что в этом году 2-й этап будет проводиться на роботах-танках, в которых стоит Atmega64. До этого мы долбили только стенды этой фирмы, на которых стоят древние i8051. Танки прислали уже весной. Пришлось в перерывах между 4-мя олимпиадами разбираться с AVR и с самим танком. Думали, что это будет основное задание и отнеслись к дело серьёзно. Потом за неделю до олимпиады стало известно, что это совсем не основной тур (наверное, многие отказались), а основным туром опять будут стенды. Стало несколько досадно, особенно потому, что к этому времени многое по стендам несколько забылось. А ещё через пару дней стало известно, что одна наша команда будет долбить стенды на тех же i8051, а вторая - на AVR. 2-ю команду это вообще убило, т.к. стенды на AVR никто долбить не собирался и нужно было за 4-5 дней со всем этим разобраться, параллельно добивая танк.
    Обычно олимпиада длится часов с 9 утра и до 16. Иногда где-то на полчаса могут продлить. В этот раз сделали так, что те, кто занимаются только стендами и те, кто занимаются только танками используют это время полностью. 1-е - для решения заданий, 2-е - для подготовки к конкурсу с танком. А такие команды как наша половину времени используют на работу со стендом, после чего один участник идет готовься к танкам, оставляя второго наедине с эти самым стендом. Где-то часов в 11-12 делают небольшой перерыв минут на 10-15. Эти 15 минут мы использовали сполна. Дело в том, что олимпиада проводилась в субботу, т.е. выходной. Распечатанных библиотек с собой мы не привезли - чисто физически не успели их подготовить. В ночь перед олимпиадой мы с одним из участников вообще не спали: он клепал эти библиотеки для 51-го и AVR, а я допиливал танк. И вот после бессонной ночи нам еще и не повезло: в субботу утром всякие печатные центры еще спят и возможности распечатать хоть что-нибудь не было. Несколько обрадовало то, что в универе был интересный автомат наподобие банкомата. Вставляешь в него флешку вместо карточки, выбинаешь на экране файлы для распечатки и печатаешь их, если есть бумага в лотке и деньги при себе. Штука довольно удобная, особенно учитывая её привлекательный дизайн в стиле, чем-то напоминающем Apple. Но именно идея удобства и привлекательност были чисто издевательством, поскольку стояла там винда, ужасно тупила и при открытии того файла, который нам надо было печатать она просто висла. Пришлось половину времени просто вспоминать всякое из библиотек и лазить по даташитам, для того, чтобы найти адреса устройств и хоть что-то написать.
    Дождавшись перерывая мне пришлось бегать по улице и искать центр распечатки, а напарнику моему нужно было бежать фиг знает куда, чтобы забрать свою паяльную станцию, которую он до этого еще дома заказал. После перерыва я пошел дальше мучить танк и готовиться к конкурсу. Но тут меня ожидал, наверное, самый большой провал. Всю ночь танк делал то, что я хотел. Ну или почти то, но во всяком случае прочентов 85-90 меня устраивало. А днём он взбесился, вернее взбесились датчики. Даже самые простые датчики линий, которые стоят на бамперах по бокам и смотрят вниз, отказывались работать. Причем это происходило даже, если поменять сами бамперы или использовать пограмму, тестирующую только их. На то, чтобы вернуть их к жизни ушло не меньше получаса (а времени на подготовку было всего часа 2). Дальше было веселей. 
   Больше всего проблем создавала катушка, составляющая часть миноискателя. Незная как, её намотать на предоставленное нам пластмассовое кольцо довольно-таки сложно. Сложность не в самом процессе намотки (тут мы прибегали к довольно эффективным извращениям), а том, чтобы правильно подобрать индуктивность. Металлодетектор должен определять копейки строго определённого номинала. Их можно различать исходя только из размеров копейки и металла, из которого она сделана. Поскольку все копейки похожи, то и различать их довольно сложно. Необходимо правильно подобрать толщину проволки и количество витков, добиваясь оптимальной индуктивности катушки. В программировании к программам нужно жестко применять 3 очень важных критерия: размер программы, быстродействие, объем используемых ресурсов. Размер программы и быстродействие - вещи обратнопропорциональные. С катушкой вышло примерно то же самое: необходимо обеспечить точность определения номинала копейки, сохраняя при этом скорость. Точность повышается путем увеличения индуктивности, что достигается добавлением количетсва витков. Точности при этом можно добиться очень хорошей, но при этом увеличивается время намагничивания и размагничивания катушки. Проходя в течении 200мс над монетой с ускорением 9g (от сервопривода HXT900) котушка с большой индуктивностью мало что успевает хотя бы засечь. К тому же в зависимости от толщины проволоки её масса может заметно возрастать и при тех же самых 9g сильно болтать танк, который имеет маленькую массу и на гладких поверхностях довольно легко скользит. Если количество витков уменьшать, то детектор начинает ловить всё подряд, включая различный фон. К тому же со временем котушка несколько намагничивается сама по себе и при малой индуктивности начинает заметно фонить. Но на этом веселье не заканчивалось. В танке металлодетектор и датчик света подключаются на одну плату. При этом певый начитает давать такие наводки, что это сводит с ума не только танк, но и меня в том числе. В конце-концов пришлось отнести плату, чтобы её немного изменили, но было уже слишком поздно. В конце-концов пришлось отказаться от участия. Честно говоря, до сих пор очень досадно, т.к. наблюдая за ходом соревнований часто посещала мысль, что если бы не эти катушка с датчиком света, то мы бы их... не буду говорить, что, а поправлю некоторые комментарии автора статьи на "не все дома".
  1. "Изучаем задание! На каждую команду по танку и компьютеру и программатору." :: С одним программатором далеко не уедешь. Там еще и этот пресловутый стенд был.
  2. "Задание выполняется на ассемблере или С++." :: Никаких ++. Чистый С. Лично я не знаю, зачем там можно было бы использовать С++.
  3. "Вот и сам программатор" :: Да это же стенд чистой воды.
  4. "Монетки.... на поле будет много 25-копеечных монет, которые нужно будет обойти, а на гривневые нужно будет наехать" :: Хочу добавить, что там и другие номиналы были. Например, 5 и 50.
  5. "Отдых программисту нужен. И точка!" :: Это "надзиратель". За день до олимпиады у него заспиной на доске было написано большими буквами  Х**, в общем то, что обычно на заборах можно увидеть. Фотка есть, но из морально-этических соображений показывать не буду:)
    Собственно вот та фотка, о которой писалось вначале. Я там с красным бэджиком между парнями в зелёном и оранжевом. Перед этим всю ночь не спал, так что вид у меня соответствующий.


4 comments:

  1. Суровые будни олимпиадников с ИКСов :) Из всех олимпиад этого года контроллеры получились самые экстремальные :)

    ReplyDelete
  2. можно ли както найти готовий код программи?

    ReplyDelete
  3. Думаю, можно. Спросите [тут у огранизаторов]. Тема относительно свежая. Если что, могу выложить то, что осталось из моей писанины.

    ReplyDelete