AVR. Учебный курс. Постановка задачи

Этот пост можно смело считать кратким описанием того безобразия, что я называю AVR. Учебный Курс.

Сразу оговорюсь, что курс у меня краткий. Он не будет содержать в себе исчерпывающий материал по теме. Я не буду делать упор на подробности, потому что их все равно все не опишешь — полное описание на ту же ATMega16 занимает порядка 400 страниц убористого текста.

Моя основная цель — дать понять как это работает, как это использовать, как это настроить, чтобы получить хоть что-то рабочее. Поэтому я много уделяю алгоритмам, организации логики программ — классическим приемам программирования. Стараюсь не забывать и про оптимизацию.
Это, возможно, будет неинтересно тем кто учился на программистов, но вот электронщикам, изучающим программирование, это редко дают даже в ВУЗах.

Поэтому я дам лишь один-два самых ходовых примера по каждой теме, которые пригодятся в первую очередь, а остальное тебе придется додумывать по ходу пьесы самому. Впрочем, всегда можно будет спросить в комментариях.

О комментариях
Их обычно много, их пишут адекватные люди и в них часто можно найти массу дополнений и уточнений по моим статьям. А также ответы на многие смежные вопросы . Так что прежде чем что то спрашивать, рекомендую прочитать, хотя бы бегло, комменты. Возможно в них уже будет ответ на твой вопрос. Ну и отвечать я стараюсь на все комментарии к любому посту журнала.

О структуре курса
Курс начинается с ассемблера. Так как я считаю, что без понимания работы контроллера на уровне машинных инструкций невозможно научиться писать надежные и быстрые программы. Знание ассемблера позволяет в разы быстрей находить баги и ошибки в собственных программах. Да и вообще, на самом деле, ассемблер куда проще изучать чем тот же Си. Просто потому, что там все действия видны как на ладони. Достаточно только прогнать по ним отладчик AVR Studio.

В Си же есть ряд мощных заморочек с оптимизатором да и вообще, будучи более высокоуровневым, Си намного более сложен по структуре чем ассемблер. И изучать его с нуля сложней — т.к. в случае когда очевидная конструкция работает «не так» не знаешь куда бежать и за что хвататься. А если знаешь ассемблер, то открываешь дизасм, прогоняешь мутный участок и все баги выходят из сумрака.

После ассемблерной части сразу же начинается Сишный курс. Он написан так, как если бы все изучать с самого нуля. Даже без ассемблера, но к асму я там все равно постоянно обращаюсь. Так что рекомендую проходить все последовательно.

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

О ошибках
Я их совершаю, более того, я их совершаю часто. Могут быть как опечатки и технические неточности, так и откровенные ляпы :) Так что не стоит все написанное у меня рассматривать как истину в последней инстанции. Если что то не работает или работает не так как надо, то открывай даташит и сравнивай параметры — я мог и ошибиться. Если это так то сообщи мне в комментариях — исправлю. Если в чем то сомневаешься — спрашивай, разберемся.
В даташитах, кстати, тоже бывают ошибки. Более того, они бывают и в самих контроллерах на аппаратном уровне. Особенно в первых ревизиях. Об ошибках контроллеров и прошлых ревизий даташитов есть отдельный раздел. Называется ERRATA, находится в конце каждого даташита на контроллер. Советую внимательно его прочитать.

О языках
Вся техническая документация написана на английском. Но незнание языка — это не отмазка. Сейчас 21 век, а еще в конце 20го века, крошечная программка Сократ’97 умела вполне сносно переводить с английского на русский, не литературно, конечно, но понять суть можно было. За 13 лет технологии машинного перевода продвинулись весьма значительно =)))) Так что читайте мануалы.

О примерах
Примеры я даю в первой половине курса на ассемблере, во второй на Си и, если речь идет о алгоритме, в Си-подобном псевдокоде.

Однако, примеры просты и перегнать из Си в ассемблер и наоборот несложно. Особенно когда речь идет о инициализации и запуске в работу периферии.

Отмазки в стиле «Я знаю Си(ассемблер), а а вот ассемблер(си) не понимаю, есть пример на Си(асме)?» идут от нежелания чуть чуть подумать, внимательно посмотреть на то что и куда записывается :))) Не важно на каком языке что записано! Главное, что и в какие порты пихается, это понять можно с первого взгляда, на чем бы не писалось — на асме, си, паскале или бейсике.
Я, конечно, отвечаю и на такие вопросы. Но настроение мне это не повышает :)

О телепатии
Я ей не владею. Так что если что то не работает, то не надо мне пытаться съесть мозг вопросами. Куда лучше приложить тот код который не работает. Причем не стоит его копипастить в форму ввода комментариев — его весь перекосит, половина символов закосит под хтмл тэги, а читать все это вовсе будет невозможно. Да и проблема может быть вовсе и не там где тебе кажется.

Возьми и пихни в архив весь проект из AVR Studio и залей на какой-нибудь файлхостинг (их миллион сейчас. Тот же narod.yandex.ru), а мне в комменты скинь ссылочку на архив и описание проблемы. Быстрей будет.

А раньше было же не так! Что случилось с старыми статьями?
А как собачки — сдохли и все. Старый курс был весьма коряв, в нем содержались мощные дыры, а также не было единой отладочной платформы. Сейчас, с появлением демоплатыPinboard эта проблема решена.

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

Чего не будет в курсе
У меня гарантированно не будет ботвы вида «смотрите как легко и просто мигнуть диодиком», «скопируйте эту строку в свою программу и на LCD увидите текст. Это просто». Я не буду показывать как писать программы для AVR на примере какого-нибудь, нафиг тебе не нужного устройства, вроде частотомера или музыкального звонка. Захочешь частотомер — сам потом сделаешь, уже без моей помощи :)

Что будет в курсе
В курсе будут куски типовых решений, ассемблерные и сишные процедуры. Будет подробный разбор как работает и как сделать ту или иную конструкцию, такие как цикл, флаговый автомат, табличный переход и тыды. Как организовать многопоточное выполнение кода и псевдомногозадачность. Как оседлать прерывания и всякие извраты с кодом. Как зажмотить два три байта и как выйграть два три такта. Как взорвать мозг тому, кто захочет разобраться в твоем коде и как сделать так, чтобы все было логично и просто.

Разумеется, я покажу и как дидом мигнуть, и как на LCD экран вывести что-то. А также множество других не менее интересных приемов. Но будет это далеко не сразу, а лишь тогда, когда выданной тебе инфы будет достаточно для представления себе полной картины происходящего действа.

Вплоть до того как и в каком порядке перемещаются байты по регистрам. Поэтому первым делом будет разобрана работа ядра контроллера. Как и в каком порядке он щелкает байты, а уж потом как дрыгает ножками.

И ты удивишься тому, какой же простой и логичный язык Ассемблера. А потом, без проблем, пересядешь на Си. Освоив, тем самым надфиль и кувалду микроконтроллерного программирования. Я в этом уверен.

А если что, то я всегда рядом, стоит только оставить комментарий… =))))

З.Ы.
Курс находится в стадии непрерывного развития и усовершенствования, статьи дополняются и перетасовываются для получения более логичной и последовательной структуры. Причем делается это втихую, без уведомления. Рекомендую переодически проглядывать курс с начала и до конца, возможны изменения.

30 thoughts on “AVR. Учебный курс. Постановка задачи”

  1. «Нет, мигать лампочками и делать разные бегущие огоньки мы не будем. Это, конечно, классика, но насколько оно избито, настолько же и неинтересно.»
    хехе) Знаете, возможно будете смеяться, — но найти, «в целях практического обучения», алгоритм и листинг примера для примитивного «двоичного счётчика-делителя на микроконтроллере», после всех поисков — в сети так и не удалось! -))
    Такая вот избитость..

  2. А можно L293, L298 и ATmega8 (или чего посложнее/попроще) вытащить из старых вещей? Там… из телевизора :) из материнки… В чём есть МК? И как узнать для чего служат конкретные модели?

    1. Можно. Что найдешь все твое.

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

      МК из промышленных девайсов наковырять можно, но вероятность крайне низка. Т.к. это либо ОТП модели (однократно прошиваемые) либо DIE чипы (черные говняшки прям на плате)

  3. Хотелось бы узнать кто сделал шасси своими руками.
    Живу не в России и не нашел готового регения, поэтому хотелось бы сделать самому.
    Хорошо бы и статью накатать как сделать, надо ли использовать серво, шаговые или какие либо другие двигатели, как их присобачить к доске и т.п.
    Единственное что видел это глава из книги «Электроника для чайников», но там он использует серво двигатели, которые стоят примерно по 600 рэ за штуку. Может есть аналоги подешевле?

    1. Загляни в раздел робототехника. там в самом начале есть уже готовая плата под эту задачу — контроллер шасси.

  4. Привет, есть такой вопрос.
    Попал ко мне в руки прошитый МК ATMEGA16-16AI. Можно содрать с него прошивкуи прошить по новой, ну и если запорю вернуть всё назад?

    1. Если биты защиты не установлены (а они скорей всего установлены) то да. В противном случае ждет тебя облом.

  5. Всем привет!

    Спасибо за уроки — начало положено именно благодаря вам! Откомпилил в авр-студии, попробовал в протеусе, подправил малость чтоб и задние концевики были задействованы, правда теперь в мэйн я не возращаюсь — кнопка осталась снаружи цикла — зато теперь автомоб будет мотаться взад-вперед, пока его как черепаху не поймаешь рукой ).

    ЗЫЖ В протеусе даже движок с микросхемой драйвера нашелся. Вопрос по студии — выбрал билд энд ран — открылся отладчик — жму Ф11 — а он идет по коду не смотря на состояние кнопок и концевиков — что нужно еще сделать?

    1. А студия по концевикам и не пойдет. Она же не знает что там на PIN поэтому надо их вручную протыкивать, либо поставить утилитку HAPSIM которая сделает это за тебя (но подглючивает маленько)

      Либо ставить перед условием брейпоинт и когда прога на него воткнется — вручную протыкать PIN регистр.

  6. Раздобыл старый ИС-3. Так и не смог для него редуктор соорудить =( Если использовать шаговики, то они потянут без редуктора?

  7. Ясна. Буду мучать стеклоочиститель комбайна. Попробую с одной ведущей осью, а для поворота — систему позиционирование лазера CD мафона. Она там у меня с зубчатой рейкой и почему-то на коллекторном двигателе.

  8. Плавающий курс. Остановился на сборе Демоплаты, для последующего подключения блока со светодиодами. Смотрю снова, статьи нет. Придётся самому разводить, по статье «как подключить микроконтроллер», если она ещё осталась. Надеюсь, что удаление стати «демоплата» не является происками конкурентов (продавцы PinBoardы).

    1. Да, теперь он приводится к единому стилю и платформе. Под переделку (расширение, добавление примеров, заточку на контроллер мега16) пойдут все дальнейшие статьи АВР курса. Подключение микроконтроллера это уже из нового курса.

      Ими и является. Автор и продавец Pinboard это я =)

  9. День добрый!

    У меня такой вопрос: можно ли стереть ATtiny13 (или любой другой) если выставленны защитные биты… Мне не нужна та прошивка, что находится в нём. Мне нужен сам контроллер.

    Заранее спасибо.

    1. Можно. Но тут есть нюанс. Если производитель отключил RESET ради еще одной ноги, то придется делать высоковольтный программатор.

      1. Где-то слышал, что обрезание ресета в мелких процах (tiny13, 2313) — это путь в один конец, что высоковольтное программирование они не поддерживают. Это так — или меня дезинформировали?

        1. В тини13 вроде бы нет, а в 2313 есть какой то баг описанный в эррата. Там что то такое было, что да, путь в один конец. Только там речь вроде бы шла не про ресет, а про бит SPIEN

  10. di halt,помогите пжлста,имеется Master Kit 9215,хотел бы узнать работает ли он в связке с AVRStudio или Pony prog?
    понимаю что вопрос странный,но не дайте погибнуть моему хотению программирвать мкконтроллеры в самом начале моего пути))
    премного благодарен.

    1. Ну с понипрог точно работает, по крайней мере на сайте чип и дипа так заявлено. А вот со студией я сильно сомневаюсь. Впрочем, это не сильно мешает. Студия дает хекс, а его зашиваешь через понипрог.

      Правда я не люблю понипрог. Очень уж опасная программа. Защиты от дурака там просто нет никакой. Никаких подстраховок от неосторожных действий (банального считывания фузов перед записью даже нет). Так что угробить им МК случайно раз плюнуть.

      А вообще такие вопросы лучше задавать мастеркиту. Т.к. я этот программатор в глаза не видел.

  11. УВ. DH. Забросил на //narod.ru/disk/8740727001/ECM.rar.html и //narod.ru/disk/8740886001/ECM3.rar.html .asm и проект в Протеусе для анимации соответственно (ECM и ECM3). Предисловие к программе уже не соответствует проге кое в чем но в основном соответствует: при заземл. PD1 — TCNT1-режим СТС, переключ. при совпадении, OCR1A загружается из PM — на PB3 чередование 1/0 (точки), при замык. PD0 — то же сомое, но длит. 1/0 в три раза больше(тире). TCNT0 — звук. генератор для контроля. TCCR0A-все время 0x42, когда PB3 — 1 -> TCCR0B-0x3, режим TCNT0 STS, изменение при совпадении(звук) когда PB3 — 0 -> TCCR0B — 0(тишина). Это теоретически, практич. нет работы звук. генер.
    В I/O окне TCCRoB -нормальное значение, а в Watch окне — почему-то 66 !В!. Не могли бы ВЫ осветить это дело. Коэфф. удобные для работы в AVRSt. Всего наилучшего.

  12. Не могу понять почему так резко поднялись цены 8 битниые МК ATmel- аж в 2 раза!! :()?? Кто то пишет что атмел все заводы продала, кто то что 8 битников больше не будет :(( вы можете дать внятный ответ что это? И стоит ли дальше заниматься с этими МК??

    1. Не читайте по утрам советских газет..

      Во первых с ценами все впорядке. Я спокойно покупаю Атмегу16 оптом по цене меньше 80р. Такой дешевой она еще не была никогда.
      А в розницу найти можно в пределах сотнию.

      У атмеля (и не только у него, а у всех аутсорцеров) прошлым летом был некоторый кризис производства, в связи с общим завалом и внезапным ростом после кризиса 2008года, а также тем фактом, что они собрались влезть в производство чипов для сенсорных экранов и все силы бросили туда.

      Сейчас AVR спокойно продается и проблем с поставками и какими либо перебоями нет. Если она где и стоит у продавцов дорого то лишь потому, что ее купили когда то по кризисной цене, а теперь западло продать дешевле чем купили. Ищите других поставщиков.

      Я по прежнему серийные проекты делаю на AVR и не особо парюсь на этот счет.

  13. Возможно не по теме, но давно интересует вопрос, где же применяются avr, pic, stm32, сколько всего курочил нигде не встречал. Или только мелкая серия вроди вашего, Di-Halt, производства.

    1. Да много где. Например 90% охранно-пожарных сигнализаций российского производства (всякие ОПС Кварц, ОПС Периметр и прочие) сделаны на PIC. Вся мелко и средне серийная электроника. А на огромных тиражах МК использовать дорого, куда дешевле использовать там заказные микросхемы, т.е. это как тот же микроконтроллер, только он на заводе изготавливается уже сразу с прошивкой или заранее заложенной логикой. Или микроконтроллеры однократной прошивки. А также крайне широко распространены МК еще древней серии 8051 их часто можно найти в пультах от техники ,но обычно они все однократные, т.е. бесполезные для использования вне.

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha