24 января 2011 в 16:44

Дайте мне железа! Часть 1

Дайте мне железа!

Часть 2

На хабре есть много статей, посвященных созданию прикольных самопальных девайсов на базе микроконтроллеров, взять хотябы замечательную серию про необычный подарок (1, 2, 3) и дополнение про сенсорную клавиатуру. Они вызывают энтузиазм, побуждают к экспериментам, но вот возникает примерно такая фраза: «А теперь, значит, рисуем схему, разводим плату, травим, запаиваем, пишем прошивку, заливаем, и дело в шляпе». Вот тут-то у меня, как кодера, ни разу не державшего в руках паяльника, эти самые руки и опускались, ибо все пункты кроме написания прошивки были недоступны.

Но все меняется, когда желание пересиливает лень! В этой статье я расскажу, с чего начать, чтобы приобщиться к экспериментам с микроконтроллерами.

Под катом чуть менее мегабайта картинок


Камень


Прежде всего нужно определиться, какому микроконтроллеру посчастливится стать жертвой наших экспериментов. В душе я тот еще минималист, и поэтому начать мне захотелось с максимально простого камня, чтобы ресурсы были ограничены, чтобы приходилось считать каждый байт, как в старые добрые времена :) Поэтому мой выбор пал на PIC-контроллеры, которые примечательны гарвардской архитектурой и сокращенным набором команд (RISC). Идем на сайт производителя (microchip.com) и смотрим, какие они вообще бывают.

Разрядности

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

Семейства 8-разрядных PIC-контроллеров

Чем больше циферка, тем круче камень. Руководствуясь все тем же минимализмом, я смело ткнулся в самую младшую серию PIC10. Здесь мы уже наблюдаем номера конкретных моделей. Обратите внимание на букву, которая стоит между названием семейства и номером модели: либо C либо F. Эта буква указывает на тип памяти микроконтроллера, C — однократно записываемая, F — перезаписываемая (flash). Для экспериментов, ясное дело, нам нужен камень с перезаписываемой памятью.

Однако мой выбор несколько обломался, встретившись с суровой реальностью: самый младший камень, который был в магазине — PIC12F509. Так что эксперименты буду описывать на нем :)

Матчасть


Итак, после того, как мы определились с камнем, нужно что? Нужно почитать даташит (pdf), чтобы понять, с чем мы собираемся иметь дело. Кстати, кроме даташита, на сайте есть еще много увлекательного чтива. Также очень кстати будет освежить (или даже приобрести) знания по основам электроники, сделать это можно на easyelectronics.ru, там увлекательного чтива еще больше :)

Программатор


Программатор — это девайс ИЗ ХОЛОДНОГО ЖЕСТОКОГО МЕТАЛЛА!!1, который нужен для заливки программы в микроконтроллер. В инете можно найти множество схем, но моей целью было получить его как можно быстрее, а не махать паяльником и заваливать форумы вопросами типа «почему оно не работает». Поэтому я выбрал самый попсовый вариант: купить PICKit2. Подробно о нем можно почитать на сайте с непредсказуемым названием.

PICKit2

Вот такая коробочка, зажигалка для масштаба. Примечательна тем, что работает от USB, в отличие от многих подобных девайсов, которые требуют наличия COM, или даже LPT порта. Еще один плюс — возможность питать целевое устройство, не нужно запариваться на отдельный источник. В комплекте идут диски с дровами и IDE (с тем же успехом все можно скачать с офсайта), USB-кабель и, в зависимости от варианта комплектации, демоплата с установленным микроконтроллером. Ништячок весьма вкусный, но я его предпочел оставить для будущих экспериментов, так как камень там постарше.

Внимание! Существует 2 версии PICKit2, отличаются цветом кнопки: у старой кнопка черная, у новой — красная. Девайс с красной кнопкой можно просто подключить к камню, а для девайса с черной кнопкой потребуется дополнительно навесить 2 резистора. Чтобы меньше париться, рекомендую взять девайс с красной кнопкой.

Да, цена вопроса. Microchip продает их по 50 баксов. Но они там, а я здесь, в Питере. Этими девайсами много кто занимается, но кто-то работает только с юр. лицами, а кто-то готов доставить за 5-7 недель. Остаются розничные магазины. Чип и дип — 3к, Мегаэлектроника — 2.5-2.7к. Возможно где-то есть дешевле, но мне надоело искать, поэтому я взял в мегаэлектронике. inb4 лоханулся

Рассыпуха


Резисторы, конденсаторы, диоды, транзисторы. Читаем здесь. Я не стал мелочиться и взял по 10 штук каждого номинала, для экспериментов — за глаза. Пока мне пригодились только 2 резистора (самые большие) и 2 кондера (большой электролитовый и мелкий керамический).

Светодиоды. Какие эксперименты без светодиодов? Я повелся на слова продавца о том, что светодиоды BL-L513UBD можно смело цеплять на 5-вольтовые выводы без резисторов. Да, цеплять можно. Но подходят они скорее для выжигания собственной сетчатки, чем для индикации. Попросите продавца подобрать вам светодиоды небольшой яркости, и резисторы к ним для подключения на 5 вольт.

Макетная плата


Тот самый полигон, на котором мы будем эксперементировать. Бывают двух видов: для монтажа с пайкой (выглядит как печатная плата) и без пайки (выглядит как матрас с дырками). Я взял в мегаэлектронике EIC-16020 за что-то типа 500 рублей. Состоит из двух кусков, которые соединяются пазами. Куски можно докупать.

EIC-16020

На следующем фото показано, как такие платы разведены внутри:

Внутренности макетной платы

Для коммутации на такой плате потребуются провода. Можно купить набор перемычек по цене 180 рублей за 10 проводков, а можно просто взять метр витой пары — она подходит идеально.

Еще проблема: разъем программатора — дырки. 6 штук. И на плате дырки. По-хорошему, для подключения программатора нужно найти двусторонний DIP-разъем. Но я это понял, только когда вернулся домой, и потому, недолго думая, нарезал необходимое из канцелярских скрепок. Они чуть толще, чем требуется, и вошли с небольшим усилием.

Самопальные пины

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

Конец первой части

Часть 2
Михаил @Gaen
карма
53,1
рейтинг 0,0
Похожие публикации
Самое читаемое Разработка

Комментарии (87)

  • +8
    Статья не закончена. Если охота особенного тантрического секса, то советую посмотреть в сторону адового прибора с названием КР1878ВЕ1. Некоторые тут на хабре на нем даже музыку помница играли.
    • +6
      Тогда уж можно и самому процессор начать делать:

      Мой не законченный проект по разработке процессора на базе советской логики.
      • +5
        А не проще делать свой процессор на ПЛИС?
        • +3
          Изначально суть проекта была именно в том, что бы показать что из рассыпухи можно что-то сделать стоящее, а на ПЛИС не интересно, что ли.
          • +7


            А чего не на транзисторах, а ещё лучше на лампах? Или даже самим растить кристаллы? Всё сделанно для нашего удобства, надо смотреть в будущее.
            • +8
              На транзисторы у меня не хватит терпения =)
              Хотя что-то такое может сделать каждый:
              www.youtube.com/watch?v=xISG4nGTQYE&feature=player_embedded
              • +2
                Плюсую коммент и сыплю кармы за крутое видео!
              • 0
                было вот такое: habrahabr.ru/blogs/DIY/84394/ и где то видел сайт англоязычный на эту тему.
              • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Даёшь Z80 на KT315 :)
      • +1
        такие фотографии отгоняют желание познакомиться с микроконтроллерами поближе.
        • +2
          Вы, наверное, никогда ничего не собирали на макетных платах. При самостоятельной сборке этого нагромождения запоминается каждый проводок, поэтому после сборки в ней относительно несложно разобраться и внести изменения, но другому человеку оно поначалу кажется непонятным и запутанным. Примерно как код своей программы и чужой.
          • +1
            А вы пробовали сделать перерыв и вернуться к макетке примерно через месяц и вновь в ней разбираться?)
            • +4
              код надо красиво и аккуратно писать, в смысле разводку цветными проводками делать ))))

              — Это космический корабль, который я построил… а сюда я кладу цветные проводки
              © Futurama
            • +1
              Легко, значительно сложнее разобраться в коде на ассемблере без комментариев спустя 2 года
            • +1
              Недавно возвращался к макетке, которую аккуратно сделал 2 года назад, но запутался в более простой макетке, которую собрал 2-3 недели назад торопясь.
              • 0
                P.S. Под макеткой я подразумеваю стеклотекстолитовую макетную плату под пайку.
      • +2
        Можно. Но автор статьи исходил из «минимализма» при выборе контроллера, поэтому я посоветовал присмотреться к микроконтроллеру КР1878ВЕ1, который в некоторой степени превосходит своих собратьев типа PIC16x84 с одной стороны, а с другой предоставляет «минималисткую» среду разработки — только ассемблер. Микроконтроллер не часто используемый, поэтому по своему интересный. Чего минусуют первый пост — неведомо. Видать приняли КР1878ВЕ1 за советскую TTL логику, не удосужившись даже загуглить.
      • +1
        Стенд «Смерть студента» ;)
      • +1
        Внушает! Мы на учебе то-же самое, но на бумаге делали…
        А фотка — вообще красота! Борюс с искушением поставить в качестве обоев :)
      • +2
        «проект по разработке процессора на базе советской логики».
        Извините, но не слишком ли это громко звучит для семи чипов, пять из которых — 155 серия, трех семисегментных индикаторов, трех кнопок и 8 светодиодов?....)
        • 0
          Все начиналось с малого =)
          На данном конкретном этапе(а не на том, который запечатлен на фотографии) процессор может через определенный интервал выводить поочередно до 2к значений, просто тупым перебором.
          • 0
            Странно только, что Вы называете этот генератор массива данных процессором… =) Я под процессором всегда подразумевал некое вычислительное устройство, обрабатывающее входные машинные инструкции, команды.
    • +2
      Чего человека минусуют, статья хороша, просто мало
  • –9
    Я так и не понял о чем статья.
    • 0
      Попробуйте прочесть еще раз ;)
      • +5
        Вот у нас микроконтроллер, вот программатор, вот макетная плата.
    • 0
      или я тот кто с дошкольных времен рылся в этом деле(отец радиоинженер) и что не удивила статья и задала выше написанный вопрос…
      • +4
        Я сломал мозг о ваш комментарий.
        • 0
          улыбнул ваш ник и о сломанном мозге :D может быть, да прост хотел сказать, что я с дошкольных времен рылся в том о чем написано в статье… мне сравнилось с тем как я например написал бы статью смотрите что я нашел у папы на столе, а теперь напишу в след статье что я с этим сделаю:)
          P.S. делал и шил, но уже в школьные.
          • +1
            а на самом деле, давай Автор не унывай, а то прочитаешь нас и стимул погаснет, ждем интересного!
  • +3
    Если бы было указано, что это первая часть, было бы лучше. А вообще, мне кажется, начало довольно интересное (для кодера, который редко держит в руках паяльник).
  • +1
    Продолжайте, все нормально :-)
  • +3
    Нельзя уместить всю информацию в один или несколько топиков. Ну не получится так объяснить человеку, который ни разу или очень редко берётся за паяльник. Я сам подумывал написать статью по этому поводу, но это сложно, т.к. существует много тонкостей и в любом случае, вам не удасться рассмотреть все аспекты или читателю в любом случае придётся искать информацию за пределами хабра.

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

    >Попросите продавца подобрать вам светодиоды небольшой яркости, и резисторы к ним для подключения >на 5 вольт.

    Ну нельзя так, вы не продукты покупаете, чтобы вам что-то советовали. Резистор ограничивает не напряжение, а ток. Написали бы лучше закон Ома. А вообще стандартный светодиод работает при токе 20 мА, так что в большинстве случаев нужен резистор 220 Ом.
    • +1
      Вы правы, в сети куча информации. И чтобы читатель не искал ее, по ходу повествования я привожу ссылки на материал, который нужно усвоить, чтобы понять, о чем пойдет речь дальше.

      По поводу светодиодов — продавец в магазине электроники более компетентен в таких вопросах, чем целевой читатель. К нему можно подойти и сказать, мол я хочу подключить к микроконтроллеру вот такой светодиод, какой резистор нужен? И он все поймет, и объяснит, и про закон Ома расскажет, ему же скучно там целый день торчать :)

      В общем, я планирую сосредоточиться на практической части, рассказать что и как можно сделать. А для того, чтобы читатель понял, почему делается именно так, существуют ссылки на те самые объемы информации, которые нельзя уместить в один или несколько топиков. Читателю дается выбор: либо просто следовать инструкциям и получить результат, либо сделать то же самое плюс вникнуть в теоретическую часть и осознать как сам результат, так и процесс его достижения.
      • 0
        По поводу светодиодов — продавец в магазине электроники более компетентен в таких вопросах, чем целевой читатель.

        Блажен кто верует. На самом деле там тоже «понабрали по обьявлениям», что даже часто резистор от диода не отличают
  • +2
    А не слишком дорого получилось? 2.5-2.7к программатор + 500 полигон + камень и плата + резисторы и прочая мелочь, ардуино или ему подобные разве не дешевле получились бы?
    • +2
      Человек PIC захотел =)
    • 0
      а никто не заставляет всё это покупать. PicKit2 стоит вообще-то 1900р, а если жалко денег, можно спаять самому. В интернете есть куча статей на эту тему.

      ну а самые распространённые Microchip'овские МК 16й серии (PIC16F873A, например) стоят 100-150р.
  • +1
    Запостите пожалуйста продолжение :))) На самом интересном закончилось :o
  • +2
    /Me смотрит на PIC1X (X < 8), блюёт хардварными стеками и долбанутой адресацией. Может, для новичков попроще что-нть нашлось бы, ну, те же MCS51/i8051 от Philips?
    • +4
      А как вам все прерывания, приходящие по одному вектору?) Имхо пики вообще непонятно для кого делались
      • НЛО прилетело и опубликовало эту надпись здесь
      • +2
        Прерывания еще ладно. До них еще надо дорасти чтобы их надо было много. Мне кажется, новичкам гораздо сильнее может взорвать моск необходимость переключения банков памяти при использовании :)
      • 0
        PIC-ов много разных, и среди них можно подобрать на любой вкус и под разные задачи. Нужны прерывания с разными векторами? К ваши услугам PIC24 и старше. Нужно всего пару векторов? PIC18… И т.д. и т.п.
        • 0
          То есть для нормальной работы с прерываниями мне нужно посадить на плату как минимум 28-ногий контроллер? Смешно же
          • +2
            Наш выбор TinyAVR!
            • 0
              Ну я к тому и вел)
            • 0
              По всей видимости, кто с чего начал — то больше всего и предпочитает. Мой выбор — 24FJ64GA004 — удобно, дешево и хватает почти для всего нужного. :)
              • 0
                А как с доставаемостью?
                • 0
                  Через дорогу — филиал гаммы(официальный представитель микрочипа). Если у них нет — есть в соседнем городе, два дня на доставку…
                  Собственно, конкретно в моем городе с атмелами заметно похуже, чем с пиками.
          • 0
            24F04KA200 — 14 ног. Ну и для приложений, где нужна такая мелочь — сильно подозреваю что наличие кучи векторов врядли потребуется.
    • +1
      купите какой-нибудь dsp starter kit на TMS или AVR, там железо посерьезнее, можно несколько потоков кода сделать, математический модуль мощный для обработки сигналов, опять же разное навесное оборудование и т.д.
      еще в гугле вот это вылазит, www.starterkit.ru, здесь на ARM есть Linux, экраны и все прочее
      так что ищите
    • +2
      MCS51? Хотя он до сих пор применяется, имхо, уже отжил своё. Одно дело — куча ранее разработанных устройств, которые нужно поддерживать, а другое — новые разработки. Пора 51-му на заслуженный отдых. Те же AVR дешевле, производительнее и проще в освоении.
    • +1
      Ну…
      во-первых, RISC против CISC на 8051,
      во-вторых, что там плохо с адресацией?,
      в-третьих, если с нуля, то 8051 вряд ли особо проще будет, много разбираться придется в обоих случаях (разве что по началу для RISC программы непривычно писать, но это по началу только).
      Необходимость ручной реализации стека — не очень приятно, конечно… Но зато… just for fun, как говорится (:
      • 0
        51 не трогать, там может среда разработки не айс, а так вполне себе контроллеры, конкуренты авр
  • +2
    Купили б Ардуино и не мучались бы. И кроме того — было б гораздо дешевле, т.к. программатор покупать не нужно было, прошивку с ПК залить можно…
    • +3
      Не мучаться скучно :(
    • 0
      На ардуино не прошьёшь, PIC16F630, к сожалению.
      • 0
        Зачем жрать кактус? Дорого и не эффективно
    • +1
      пиккит2 это не просто программатор. Он же еще и отладчик (прям по коду, как в JTAG правда этот мелкий пик это возможно не поддерживает) и какой никакой, но четырех канальный логический анализатор. Пусть и слабенький, но отладить и2с шинку или 1-wire на нем можно гораздо быстрей чем на аналоговом осциллографе.

      Плюс научившись сразу писать код под МК и делать схемы с нуля на соплях можно приступать к построению уже более серьезного устройства на плате, с отдельным контроллером. И вот тут цена в 100р за А4 текстолита и 100р за процессор по цене рвут дурку как тузик тряпку. Т.к. в каждую херню ардуино совать жирно будет.
      • –1
        Если заниматься этим серъездно, профессионально — то да, программатор и прочие средства разработки необходимы как воздух.
        Но если это хобби, не профессиональная деятельность — я думаю, тратиться на это не целесообразно. Для этого случая и придумали Ардуино и тому подобные решения…

        >>Т.к. в каждую херню ардуино совать жирно будет.
        Конечно, жирно. Но так никто и не делает. Вы, что — строите готовые решения на отладочных платах? Думаю, нет. Ардуино такая же отладочная плата, на ней легко и быстро строить единичные продукты, не требующие серии. И также же — это дешевый и быстрый способ для разработки прототипа — если конечное итоговое решение будет основываться на схожей архитектуре с МК от Atmel.
        • 0
          А кто сказал что электроника это дешевое хобби? Та же ардуино+ всякие шилды тоже отнюдь не дешевое решение, я бы сказал даже наоборот.

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

          Без всего это пошел вон в магазин. Купил голый контроллер за 60р, проводками на LPT порт и поехали.
          • –1
            >>Та же ардуино+ всякие шилды тоже отнюдь не дешевое решение
            По сравнению с отладочными платами, Ардуино не такой дорогой.

            >>Купил голый контроллер за 60р
            МК, что стоят на Ардуино (Atmega328) стоят отнють не 60 рублей, в розницу как минимум в 3 раза дороже.

            >>проводками на LPT порт и поехали.
            Все же сказать: «поехали» — можно про Ардуино — воткнул в USB и поехали.
            А вот про голый МК с проводочками через LPT порт — придется еще попаять, пошаманить, тут сразу не поедешь…

            Вообщем, кому что нравится.
            • 0
              1500р за голую168 мегу + FTDI + линейный стабилизатор это очень дорого. Себестоимость там рублей 300 максимум. Красная же цена этой платки рублей 500.

              А зачем сразу брать максимальный проц? Можно и на меньшем сделать, ведь далеко не всегда возможности использутся. Ну и смотря где брать. 328 может и дорогая, а вот 88 или 168 стоит уже недорого.
              • 0
                >>1500р за голую168 мегу
                платы с атмегой328 стоят:
                Arduino Uno — 1390 руб amperka.ru/collection/Platy/product/Arduino-Uno
                Cosmo Black Star — 1000 руб jt5.ru/arduino/cosmo-black-star
                Freeduino 2009 — 950 руб freeduino.ru/arduino/freeduino2009.html

                >>Себестоимость там рублей 300 максимум
                Про себестоимость на самом деле так категорично говорить нельзя, потому как она зависит от объема производства. При малых тиражах (менее 1000 штук) в 300 рублей уложиться невозможно. Например, только два компонента «съедают» большую часть вашего бюджета.
                FT232RL — 3$ (+18% НДС)
                ATMEGA328P-PU — 3.8$ (+18% НДС) — причем, это дефицит.

                А ведь есть еще куча мелочевки стоимостью от нескольких копеек до 10-20 рублей. А еще изготовление ПП, маска, маркировка, в конце концов — монтаж…

                А то, что оригинальные Ардуино стоят у нас дорого, объясняется одним словом — растаможка (сборы, пошлина, ндс) + транспортировка.
            • +1
              Странный у Вас подход. Хотите заниматься электроникой и ничего не паять/не собирать своими руками. Толку из этого мало будет.
  • +3
    если хотите минимализма — выбирайте ПЛИС. Тогда не только байты — биты считать научитесь :-)
    На самом деле программировать ПЛИС — это интересно.
    И не сильно сложно.
    Вот пример: marsohod.org
    • +3
      существует куча проектов, которые делать на ПЛИСе глупо при наличии готовых МК. К тому же, ПЛИСы, как правило, обходятся куда дороже. А учитывая, что тут народу 2к на программатор для PICов жалко, то что же тогда говорить о том же Xilinx Platform Cable USB II за 250 баксов? А в России он вообще 15к руб. стоит.
    • 0
      P.S.: А вообще да, сейчас как раз занимаюсь изучением оных. Штука интересная — затягивает :)
  • –4
    Не читал. Но классная статья!
  • 0
    А я решил в замен сгоревшей платы в термопоте свое сделать из подручных материалов пока вот в таком виде www.softcoder.ru/public/17012011810.jpg
    Используется AVR Mega8 + самодельный программатор + и немного усердия
    Если кому то интересно могу в итоге результаты показать(небольшой статьей), прошивку со схемой конечно в общий доступ :)
  • 0
    >> PIC12F509

    М-м-м, пробежался по архитектуре, крутота! 41 байт памяти, максимум 1024 инструкций. Стек глубиной 2! Банки памяти.
    Вот только одно смущает: что, нету conditional branch? Т.е. циклы не получится запрограммировать?
    • +1
      Там есть инструкции, которые позволяют проверить бит и, в зависимости от его значения, пропустить следующую инструкцию — btfss и btfsc. Ставим такую инструкцию перед безусловным переходом (goto) и получаем переход по условию.

      Чего там действительно нет, так это сравнения больше-меньше)
      • 0
        Спасибо за ответ:) Не знал про такой тип бранчинга.

        >>Чего там действительно нет, так это сравнения больше-меньше)

        Про умножение я вообще молчу:) Хотя там его и при всем желании нельзя было бы запихать, ведь результат был бы 16-битным.
        • 0
          Так результат умножения можно кидать в два регистра.
        • 0
          Для таких случаев на сайте Microchip'а лежат готовые подпрограммы для реализации функций умножения 8x8, деления 32/16 и многое другое.

          Как правило, в такого рода контроллерах (PIC12*) аппаратная реализация подобных вещей не требуется.
      • 0
        >>Чего там действительно нет, так это сравнения больше-меньше)

        а вычитание для кого сделано?

        SUBWF F
        BTFSS STATUS, C

  • 0
    Было бы неплохо выложить это сюда:
    habrahabr.ru/blogs/DIY/

    Спасибо за статью =)

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.