Всем привет. В этой статье хотел рассказать о том, как я научился работать с микроконтроллерами
(далее по тексту — МК) и на какие подводные камни налетел. Сразу скажу — статья не претендует на эксклюзивность, так как любой человек работающий с МК проходил через то, что прошёл я. Прошу строго не судить, а прочитать как историю.



Вместо вступления


Впервые интерес к МК у меня возник, когда я учился в 10 классе. На тот момент был 2009 год. Я умел немного программировать на ПК в QBasic и Visual Basic — школьная программа, но так сложилась жизнь, что я особо не разбирался в программировании, да и отсутствие знающих людей по части электроники и МК рядом сделали своё дело — для меня это была новая ниша. Хотя я с детства ковырялся с платами и микросхемами найденными на помойках, но как оно работало я толком не понимал — толком никто не мог объяснить. Как работает транзистор нормально я узнал только спустя пару лет после описанных событий. Когда я выбирал первый МК то смотрел характеристики на сайте ЧИП-ДИП. Скажу честно — для меня это было как иероглифы. Так что не стоит этого бояться. И да, про Arduino тогда никто понятия не имел.

Как всё началось


Начал ковыряться в яндексах и гуглах. Понимал, что сам контроллер — половина дела, нужна ещё и программа. А как сказано во вступлении — с программированием у меня было не очень. В конце концов попал на какой-то сайт. Как стало позднее ясно, я с этим сайтом реально «попал». Создатель сайта написал ещё и учебник по программированию, я на радостях скачал учебник и первое что там увидел — «В качестве образца для работы я использовал PIC16F84A ». Собственно так я и выбрал свой первый МК. Теперь вопрос — почему я именно «попал». А попал я из-за того, что создатель этого учебника и сайта предлагал программировать МК на АССЕМБЛЕРЕ. Его не все практикующие проггеры то знают, а тут новичок… Контроллер я уже заказал, и только потом начал читать учебник, к сожалению.

Как я выходил из положения


После того, как я понял, что ничего не понял, я забросил МК на пару лет, но параллельно всё-таки шарился на форумах типа Схем.нет и прочих, и ко мне постепенно приходило понимание вопроса. Решил учиться кстати на модели PIC16F877A.

Итак, что нужно знать новичку:


Микроконтроллер — это маленький компьютер, в нём есть и Арифметико-логическое устройство — процессор по сути дела, и оперативная память и некое подобие жесткого диска — память программ и данных, но выполнено это всё в одной микросхеме. Соответственно в зависимости от модели и производителя у него следующие характеристики (ориентировочно):

  • Рабочие частоты от единиц до ~100 Мгц, я лично использую в своих устройствах как правило частоты 20 Мгц, именно МЕГАгерц, а не ГИГАгерц. Частота задаётся внешним источником тактирования — кварцевым или керамическим резонатором.

  • Объём ОЗУ — единицы и десятки Килобайт
  • Объём памяти под данные и программу — до нескольких десятков Килобайт. При желании можно расширить память для данных с помощью микросхем памяти. Для того чтобы использовать эти микросхемы для расширения памяти под программу — новичку стоит забыть, не всякий профессионал может это правильно сделать, да и не каждый микроконтроллер позволяет изменять свою прошивку во время работы.
  • Рабочее напряжение от 1 до 5 вольт в зависимости от модели и производителя.

Микроконтроллер рассчитан на работу на плате, скажем так, в конкретной «железке», на плате, в устройстве. Так что не стоит думать, что на нём можно поиграть в CS :)

Языки программирования


Начал выбирать язык программирования и среду в которой можно программировать. Так как я хоть как-то знал Basic, то и задумался, что было бы хорошо прогать на нём. Да, он не очень совершенный и ещё куча недостатков, но для начала подходил как нельзя кстати. Мне повезло, оказалось, что есть язык PIC-Basic. По нему есть учебник, автор Чак Хелибайк и переведённое на русский руководство, собственно до всего доходил дальше по учебнику и руководству. Среда работает из-под ДОС, но можно прикрутить CodeStudio и всё будет работать из-под Windows.

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


Следующая проблема, стоявшая у меня на пути — чем записать программу в чип. Понятное дело, что нужен программатор, я решил экономить, попробовал собрать несколько схем из этих ваших интернетов. Одной схемы недостаточно, нужна ещё программа которая используя программатор (саму железку) занесёт код в память. Все мои опыты окончились неудачами, по причине малого опыта. Решил я больше не смотреть на то, как от чипов идёт дым и заказал PICKit3, после этого не знал проблем, поигрался пару дней с ним и всё заработало.



Что нужно знать новичку:



  • В настоящее время есть адаптированные языки программирования для МК, тот же Бэйсик, СИ и прочие.
  • После написания программы она компилируется в машинный код — файлик с расширением HEX, его-то и надо прошивать в память МК.
  • Для того, чтобы «прошить МК» — записать в него выполняемый код нужно две вещи:

    1) плата-программатор, которая является промежуточным устройством между разъёмом компьютера и самим чипом
    2) Программа-программатор, которая будет знать как работать с программатором, собранным по конкретной схеме.
    То есть нужно чтобы программа на ПК знала какая схема подключена к ПК чтоб правильно прошить чип. В моём случае это заводское решение — вместе с программатором PicKit идет диск с нужными программами.
  • Памяти в МК ограниченное количество, это надо учитывать, иногда приходится выкраивать каждый байт прошивки, лишь бы влезть в объём памяти чипа. Так же следует понимать, что в МК нет никакой операционной системы, и Ваша прошивка — единственные данные которые знает МК.

Несколько слов про периферию


Для связи с внешним миром и удобства работы и разработки в МК встраивают различные периферийные схемы, например АЦП — аналогово-цифровой преобразователь, так что можно без лишней обвязки измерять напряжение подаваемое на вывод МК, но оно должно быть не выше чем напряжение питания, иначе чип сгорит. Используя делитель напряжения можно сделать вольтметр, например. Периферия, количество встроенных функций и их характеристики тоже зависят от модели, как правило чем дороже модель — тем богаче комплектация. Так же следует не забывать, что у контроллера ограниченное число ножек, к которым можно подключиться.

Например у PIC16F877А их 40 штук, причем 7 штук вылетают сразу, т.к. используются для подачи питания, подключения резонатора и управления аварийным сбросом. Так же надо внимательно смотреть документацию на чип. Например тот же АЦП — в PIC16F877А он может измерять напряжение только на 8 конкретных ножках чипа, на других он это делать не может. То есть под каждую встроенную функцию отводятся конкретные выводы и поменять их нельзя.

Суть сей басни такова


Освоить МК реально даже самому и с нуля, но есть места где не очень понятно. Если с программированием никогда не сталкивались, то сначала выучите хотя-бы азы программирования и напишите «Hello World» на компьютере. После этого будет проще. Если не хотите особо заморачиваться — Arduino Ваше всё. МК расчитаны на использование в «железках» — блоки управления, платы, контроллеры итд итп, это не полноценный компьютер, а контроллер. И ожидать от него следует соответственно. Благо сейчас полно примеров на ютубе, и я надеюсь, что мой опыт начинания с нуля будет не таким горьким и моя статья кому-нибудь, да поможет.

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


  1. sintech
    08.12.2019 23:15

    Я тоже начинал примерно по такому сценарию, только в 2001 году. Приехали с другом на Митинский рынок и я с горящими глазами в первой же палатке попросил продать мне PIC16F84. Программатор собрал сам для последовательного порта, тогда это было еще актуально. В качестве языка выбрал творение сумрачного гения под названием JAL (http://justanotherlanguage.org), это было самое дружелюбное, что я нашел (по сравнению с ассемблером). Написал программу для мигания светодиодом, порадовался, не придумал чтобы сделать на нем еще, поэтому сложил все артефакты в коробочку и забыл об этом на много лет.


  1. AlexanderS
    08.12.2019 23:32

    Почему выбрали именно PIC? Почему не AVR, который для новичка будет в освоении попроще + по ним у DIHALT целый курс статей расписан. PIC'и, конечно, дешевле, но эта дешевизна будет ощущаться при партии устройств этак в тысяч десять штук и полбакса в цене для новичка абсолютно никакой роли не играет.

    Я-то учился работать с МК в начале 2000-ых, но то было в рамках высшего образования и у меня свободного выбора не было — моим первым МК стал Motorola 68HC11 =)


    1. DIHALT
      09.12.2019 01:24

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


      1. LeonidPr
        09.12.2019 21:45

        Ага, а еще пики бывало проще достать, чем авр-ки. Если не в Москве, выбирать не приходилось. Начал где-то в середине нулевых. Наслушался про AVR, прихожу в магаз говорю ATmega есть — неа, ATtiny есть — неа, а что есть — а вот PIC16F628. ну я такой — давайте чо уж) С тех пор почти нет опыта с AVR. С пиков перешел на АРМы


  1. Zuy
    08.12.2019 23:52
    +3

    Был примерно 1997 год. Шла мода на халяву, если кто еще понит что это такое. Microchip прислал толстенную книгу по их контролерам с примерами схем и диск с какой-то древней версией MPLAB. Вот по примерам с этой книги изучались програмки и ассемблер PIC, набирались в MPLAB и там же смотрелось как оно работало. Реальных контролеров не было, только отладчик. Все это добро было на английском и читалось с бумажным словарем в руках.
    А сейчас у них гуглы, яндексы, всякие форумы и т.д. и все равно сложности какие-то возникают. Эхххх, молодеж :-)


    1. emmibox
      09.12.2019 09:09
      +2

      Молодежь… отладчик у них был… программки… диски с мплабом микрочип прислал…

      Как насчет дизассемблировать прогу архитектуры MCS48 — 2к содержимое 537РФ2 ручкой в тетрадке в 1988 году? — потому, что других примеров, чтоб учиться — нет. Ну разве, что было немножко в «микропроцессорных средствах и системах». А за ними между прочим надо в центральную районную библиотеку переться на метро и двух троллейбусах — потому что в местной они не предусмотрены. С тетрадкой… Бо ксерокс туда не завезли… а сканер — вообще никто не знал что так можно…


      1. Zuy
        09.12.2019 09:16

        Классно вам, у вас метро было… :-)


        1. emmibox
          09.12.2019 10:57

          Не было… До него на троллейбусе ехать и ехать…


      1. DarkTiger
        09.12.2019 12:03

        Книга «Микропроцессорные средства и системы», насколько я помню спустя 30 лет, не содержала (почти) сведений по программированию, фокусируясь на аппаратных решениях. У меня она была, случайно купил в обычном книжном. Там вроде было описание синтеза системы микрокоманд процессора на 556РТ5 (которое и сейчас изучают в Бауманке на ИУ5 в качестве курсовой на 4 курсе), но не более того. Но в 1988 году в дефолт-сити уже вовсю функционировал Митинский радиорынок, где продавались распечатки инструкций по программированию на ассемблере, Паскале и т.п. Не уверен насчет MSC-48, конечно — не спрашивал :) К тому же там можно было заказать за относительно небольшую денежку многое из доступного в мире на тот момент, уж ксерокс-то из русскоязычной литературы можно было заказать любой, да и оригинальных книг хватало, хотя, конечно, не по магазинным ценам. Я жил в 200км от Москвы тогда, в Калуге, так что мне приходилось вставать в 5 утра в выходные, чтобы попасть на Митинку до того, как основная масса народа разойдется.
        Да, тогда не было сканера-ксерокса в библиотеках, но фотоаппарат никто не запрещал с собой приносить. Если выбрать солнечный день и место у окна, чтобы не вызывать ругань библиотекаря работающей вспышкой — вполне себе приемлемо получалось. Переходные кольца и т.п.


        1. emmibox
          09.12.2019 12:48

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

          Но в 1988 году в дефолт-сити уже вовсю функционировал Митинский радиорынок,
          Даже Тушинский не функционировал!
          а митино вообще было «3 дома» и пустырь вокруг с проектом застройки. Жизнь была у магазина пионер.


        1. sshmakov
          09.12.2019 12:49

          А разве МПСС — не журнал?


      1. sim2q
        10.12.2019 15:49

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


  1. Astroscope
    09.12.2019 00:56
    -1

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


    1. WhisperingOak
      09.12.2019 09:09

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


      1. Astroscope
        09.12.2019 10:06

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


    1. DrGluck07
      09.12.2019 14:23

      Контроллеру с 64+ килобайтами памяти программ ассемблер уже не нужен. Только если для каких-то вставок в критически важные места, которые по-другому никак не оптимизировать.
      Мы под xmega даже C++11 применяем, в доступном объёме оф коз.
      Ну а для всяких мелких контроллеров с 256 байт флеша вариантов и нет. Но это уже совсем своя особая область разработки.


    1. Gordon01
      11.12.2019 09:44

      Нет никакого смысла сегодня использовать «маломощные» МК.
      Они дороже (из-за низкого спроса) и больше потребляют (из-за старого техпроцесса).


  1. Sun-ami
    09.12.2019 01:17

    Грабли, на которые чаще всего наступают при освоении микроконтроллеров, в статье перечислены почти все. Самые большие грабли — это выбор устаревшего микроконтроллера, такого как PIC16 или ATmega. Со времён, когда ресурсы микроконтроллера ограничивались несколькими килобайтами оперативной памяти и несколькими десятками килобайт памяти программ, много воды утекло. Сейчас диапазон очень широк — микроконтроллер может иметь от нескольких килобайт до нескольких сотен килобайт встроенной оперативной памяти, до нескольких мегабайт встроенной памяти программ и работать на частотах до 400МГц. Подключив к микроконтроллеру по QuadSPI 8-ногую микросхему Flash-памяти можно увеличить размер памяти программ до гигабайт, другое дело — сложно написать настолько объёмную прошивку, поэтому это применяется редко. Оперативную память микроконтроллеров, напротив, часто наращивают внешними микросхемами динамической памяти до десятков мегабайт, чтобы получить графический буфер для подключения графического ЖК-экрана, но для новичков может оказаться сложной трассировка печатной платы с высокочастотным параллельным интерфейсом такой памяти, поэтому лучше поначалу ограничиться встроенной памятью микроконтроллера. Программатор не обязателен для загрузки в микроконтроллер программы — многие микроконтроллеры имеют вшитый при производстве загрузчик, который позволяет загружать прошивку через USB или COM-порт с преобразователем уровней. Но если программа не совсем элементарная — очень рекомендую купить программатор с функцией отладки. Он позволит остановить программу в любом месте, и пройти по ней пошагово, строку за строкой, наблюдая изменение данных — это очень помогает найти ошибки. Для освоения лучше выбрать современную серию 32-битных микроконтроллеров на ядре ARM — они есть у всех ведущих производителей мекроконтроллеров. Я рекомендую STM32 — эта серия отличается очень большим числом моделей микроконтроллеров под любые задачи, и дешевизной клонов программаторов-отладчиков ST-LINK, которые подходят для всех STM32. Если вникать не хочется, а хочется собрать что-то из готовых модулей — можно выбрать Arduino. Язык программирования для начала — только C и С++ — на них пишет большинство профессионалов, и написано большинство примеров и модулей.


    1. Kanumowa
      09.12.2019 01:26

      После того как поморгал светодиодами, становится понятно, что необходимо учить/вспоминать радиоэлектронику, я на этом моменте собственно и забросил… много лет назад ) может посоветуете книги, сайты?


      1. Sun-ami
        10.12.2019 21:17
        +1

        Не знаю, чего хочется конкретно Вам. Возможно, Вам стоит почитать сайт easyelectronics.ru. Мне в освоении ARM помогла книга Джозефа Ю «Ядро Cortex-МЗ компании ARM. Полное руководство.».


    1. DIHALT
      09.12.2019 01:29
      +3

      На тот год в тренде как раз были восьмибитки. Армы слишком сложны были для сборки в домашних условиях и вообще там много чего надо было знать. Тогда даже кортексов вроде бы не было. Кругом арм7тдми царил.


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


      1. AssMoFun
        09.12.2019 09:39

        Дополню: лучше ат89S51/52. Программируется USBASP-ом.


      1. Sun-ami
        09.12.2019 14:25

        В 2009 году уже выпускались STM32F1, хотя выбор в их пользу был тогда не очевиден, и в тренде продолжали оставаться AVR, а ARM7TDM были дороговаты для начинающего. Но PIC16 и AT89C51/52 уже были сильно устаревшим, а сейчас устарели и AVR. Если начинать с устаревших контроллеров — придётся много внимания уделять ограничениям, неактуальным для современных микроконтроллеров — переключать в прерываниях банки регистров и экономить каждый байт ОЗУ для AT89C51, где его всего 128 байт, избегать выделять код в функции в PIC16, где стек возвратов аппаратный, и можно наткнуться на ограничение вложенности вызовов, распределять данные между быстрой и медленной внутренней памятью в реализациях архитектуры 8051 с более чем 128 байтами памяти, привязывать код работы с периферией к конкретному экземпляру однотипной периферии в AVR. А если ещё и использовать ассемблер — к этому добавляется страничная адресация памяти PIC16, и ограничения по адрессации данных, вынуждающие писать неестественный код. Всё это вырабатывает трудночитаемый «ассемблерный» стиль написания кода, затрудяет повторное использование кода, и препятствует использованию C++. Вместо этого стоит сосредоточиться на алгоритмах и архитектуре программы, а низкоуровневую оптимизацию, требующую хорошего знания контроллера, применять точечно, по необходимости. То, что периферия STM32 намного богаче чем у AVR не заставляет изучать и начинать её использовать сразу всю. UART STM32F0..F4 не намного сложнее UART AVR, System timer и Basic timer — тоже не сложнее таймеров AVR.


    1. Dima_Sharihin
      09.12.2019 08:05

      работать на частотах до 400МГц

      У вас устаревшая информация: i.MX-RT1170 — 1 GHz Cortex M7+ 400 MHz Cortex M4


      1. Sun-ami
        09.12.2019 11:06

        Можно считать и так. Но, на мой взгляд, i.MX-RT1170 — это не микроконтроллер, а SoC для задач реального времени, потому что он не имеет встроенной энергонезависимой памяти программ. В этом смысле он не сильно отличается от TMS320 C67xx или BCM2835. Хотя и раньше выпускались микроконтроллеры без встроенной памяти программ, например intel 8031, на сегодняшний день стандартно для микроконтроллера — иметь такую память. Но я действительно запамятовал, у NXP в серии i.MX-RT есть и микросхемы со встроенной flash-памятью — i.MX-RT1164 с частотой 600МГц.


    1. slog2
      09.12.2019 11:19
      +1

      А может наоборот, грабли это сразу взяться за какой-нибудь жирный STM32 и увязнуть там в изучении периферии, которую мало кто полностью изучил. А для начала PIC16F84 вполне сойдёт, разобраться со всем, что в нем есть можно за пару вечеров. И поработав с отдельными регистрами на ассемблере поймешь, что такое микроконтроллер и как он работает. А если начать с другого конца, то микроконтроллер так и останется чёрным ящиком, общение с которым происходит через кем-то написанные драйвера и библиотеки. Вот ардуинщики они как раз не с того конца начали. Да, они могут программировать микроконтроллер, но очень мало кто из них понимает как там всё внутри устроено.


      1. Sun-ami
        09.12.2019 22:03

        Разобраться в ассемблере и понять как работает микроконтроллер, конечно, полезно. Но для этого плохо подходят RISC микроконтроллеры вообще, и PIC16 особенно, уж очень он не по-человечески сделан. Гораздо больше подойдёт какой-нибудь микроконтроллер с CISC ядром, особенно простые микроконтроллеры с ядром 8051 или 8052 — например, AT89C52. Потому что CISC-системы команд разрабатывались с ориентацией на удобство программирования на ассемблере, а RISC — с ориентацией на минимизацию количества транзисторов на ядро, и времени выполнения одной команды. Но чтобы понять как работает микроконтроллер не обязательно писать на ассемблере — достаточно хотя бы поверхносно изучить систему команд, и читать фрагменты дизасемблированного кода в отладчике для интересующих моментов. А с регистрами периферии можно работать и на C и на C++. Кем-то написанные драйвера и библиотеки помогают избежать затыков в случаях, когда что-то описано в документации не очень понятно, или есть жесткая последовательность действий, непонятно чем определяемая — вот здесь действительно можно увязнуть.


        1. mpa4b
          09.12.2019 23:07

          Ну что PIC — это якобы RISC, прожужжано конечно во всех даташитах. Но на самом деле какой же это риск, если он может сложить регистр с памятью и положить результат в память же?
          На самом деле его команды, в т.ч. 12-14 битная их ширина очень похожи на команды каких-нибудь ранних ЭВМ, типа PDP-8 или ей подобных. И это ни разу не RISC.
          Конечно если понимать RISC не буквально (типа, мало команд, в PDP-8 8 команд всего!), а как то, что все команды простые.


          Туда же и MSP430, который махровейший CISC с командами от 1 до 3 слов, может прибавить 1 командой память к памяти, как и PDP-11, глядя на который он и делался.


    1. zanac
      10.12.2019 03:44

      Как наращивают оперативную память микроконтроллеров?


      1. Sun-ami
        10.12.2019 09:42
        +1

        В основном подключением микросхем SRAM и SDRAM к аппаратной параллельной шине, для STM32 это FSMC или FMC в корпусах с более чем 100 ногами (в меньших корпусах они тоже есть, но могут не подходить для этого, потому что выведены не все необходимые линии). Но бывают и экзотические варианты — микросхемы SRAM с последовательным интерфейсом, и программная реализация параллельного интерфейса.


  1. CyberAndrew
    09.12.2019 03:05

    Знатоки, подскажите, существует ли аналог книги уровня Хоровица Хилла — Искусство схемотехники, но по микроконтроллерам? Ну или просто посоветуйте хорошую книгу по ним.


    1. devprodest
      09.12.2019 07:27

      Не по МК, но рядом полезно будет почитать Харис и Харис, название уже не помню.


      1. a5b
        09.12.2019 08:03

        Digital Design and Computer Architecture by David Money Harris and Sarah L Harris
        Цифровая схемотехника и архитектура компьютера
        http://easyelectronics.ru/files/Book/digital-design-and-computer-architecture-russian-translation.pdf


  1. SignallerK
    09.12.2019 06:47

    Начинал в далеком 2007 году что-ли с AVR, случайно наткнувшись на базаре на книгу А.Белова «Микроконтроллеры в радиолюбительской практике». Не лучшая книга, но на тот момент наверно других и не было доступно и не лучшая модель в линейке (tiny2313) для начала.
    Но, книга помогла в 3 моих затыках:
    1. Оказывается в шараге где я учился все зависло в году 85, и для помигать светодиодиком не нужен 8080 с россыпью чипов.
    2. Програмировать надо не 16х кодах не понятно где, а вполне себе в современных IDE.
    3. Программатор собирается на одной микросхеме стандартной логики.
    Самое интересное, что хоть в книге все примеры были на asm/c мне почемуто сначала зашел asm что здорово помогло в потом в понимании кода, даже на совсем других архитектурах.


    1. kasigor
      09.12.2019 10:27

      Знакомый учился в Харьковском политехническом универе на программиста. Его дипломная работа была запрограммировать pic контроллер, что бы он помигал светодиодом)) Я на ESP32 за один вечер сделал это, когда разбирался с arduino.


      1. Sun-ami
        09.12.2019 18:33

        Этого не может быть! Мой знакомый тоже недавно закончил Харьковский политехнический университет, и его дипломной работой была приставка-кардиограф для смартфона, с приложением для Android. По своей материальной базе этот университет, конечно, сильно отстал от жизни, но даже в 80-е, когда я там учился, на первом курсе был курсовой-фрагмент синтаксического анализатора компилятора, на втором курсе — ПИД-регулятор на ассемблере 8086, на третьем курсе — программа управления системой резервирования мэйнфрейма. И это даже по специальности «Разработка ЭВМ», а не программирование.


  1. fmkit
    09.12.2019 10:23

    в 2002 я работал на стройке (иногда с лопатой и ломом), однажды увидел в журнале Circuits Cellar рекламу Cypress PSOC купил набор и стал самостоятельно изучать практически с нуля. На чипе CY8C26233 сделал первый комерчекий проект — стерео передатчик FM 5w, стерео кодер и PLL в одном чипе, тогда не было однокристальных передатчиков и мой руками собранный хорошо продавался на eBay $220/шт и понеслось ;), до сих пор не понимаю почему PSOC остаются экзотикой, 15летний чип с 16k ROM/256b RAM позволяет проекты неосуществимые на STM32F103.


    1. Mutilator
      09.12.2019 14:49

      Привет, подскажите пожалуйста какая периферия мне понадобится, если я хочу «грокать» моторолу 6809. Какая-то минимальная система, позоляющая писать для него программы и запускать их на «железном» 6809.


      1. mpa4b
        09.12.2019 21:05

        Как минимум ACIA (6851 или 6551) и PIO с таймерами для рулёжки внешним миром, например 6522. Ну и какие-нибудь средства самопрошивать флешь, чтобы после отладки бутовой программы можно было шить остальную флешь через UART.


  1. JackKatch
    09.12.2019 10:47

    Ассемблер знать обязательно нужно, это очень простой язык, а начинать нужно именно с простого. Почему это восьми битный контроллер устаревший? Ну и естественно куда в него Си++? Автору спасибо за статью.


    1. FForth
      09.12.2019 12:05

      Форт (Forth) тоже даёт неплохие условия для знакомства с контроллерами (при реализации Форт-систем знание ассемблера только приветствуется)
      По PIC16 есть и некоторая учебная методичка F2P (Forth to PIC compiler) Г.Р.Алпатов Применение PIC-контроллеров. (Южный Федеральный университет)

      P.S. Здесь немного больше по Форт и PIC
      Pic Forth
      PIC Projects
      FlashForth


      А так, да Форт (Forth) есть в разных вариантах на любой контроллер.


  1. Gordon01
    09.12.2019 12:22

    Сегодня полезнее всего будет начать с ESP32, которую программировать из VS + VisualGDB.
    Никакой мороки со средой/программаторами/драйверами, сразу мощный двухядерный МК на 240 МГц с вайфаем, блютусом и мегатоннами примеров и готового кода плюс возможность для новичка сразу получить какой-то полезный готовый результат.
    Как бонус: отладочные платы стоят дешево.

    В восьмибитное погружаться смысла нет никакого вообще.

    В будущем, с переходом на батарейное питание можно перейти на stm32l или msp430. Все остальное вымерло либо очень узкоспециализированное.


  1. sami777
    09.12.2019 14:07

    так вы все равно потом со своих 8 биток пересядете на 32битки. Во и зачем тогда начинать с 8 биток — только время терять.


    1. emmibox
      09.12.2019 15:43

      Есть например устройства 10 лет работающие на одной литиевой таблетке батарейке.
      с процессорами у которых в слип ток потребления меньше чем саморазряд этой батарейки.
      И никаких 32х биток в них не будет никогда (как и кода не на ассемблере).


      1. Gordon01
        09.12.2019 17:07

        Серийно выпускаем устройства на STM32L0, работают от одной литиевой батарейки 10+ лет.
        Пишу на С, потихоньку перехожу на С++.

        В стопе все МК любой архитектуры примерно потребляют одинаково на обновление памяти и работу таймеров. Какая разница на чем написан код, если ядро вообще выключено по питанию?
        STM32 в low-power run примерно в два раза энергоэффективнее STM8, при этом потенциально быстрее.
        Из всех выделяется только msp430 с FRAM, там можно сэкономить последние 2-3 мкА, но так же можно любой другой МК просто полностью отключать, сохраняясь во флеш.


        1. emmibox
          10.12.2019 01:01

          В стопе одинаково — а при работе любой лишний исполняющйся код = лишнее потребление! И в одном техпроцессе, чем меньше бит тем меньше жрет.

          К тому же ваш STM32 10 лет не существует — а 8-ми биткам с наноамперным потреблением 20 лет (т.е. все уже было когда никаких вас не было — все задачи решены!)


          1. Gordon01
            10.12.2019 12:17

            Что вы подразумеваете под «наноамперным потреблением»?
            Покажите страницу из даташита или название МК, который при исполнении кода потребляет наноамперы?


            1. emmibox
              10.12.2019 12:24

              PIC12-16 — все токи по каждому модулю даны. в определенных конфигах можно получить наноамперы.


              1. Gordon01
                10.12.2019 14:46

                Это отлично, но вопрос был о другом:

                Покажите страницу из даташита или название МК, который при исполнении кода потребляет наноамперы?


                1. emmibox
                  10.12.2019 16:14

                  Гугол «microchip nanowatt mcu» — их там как грязи за баней. у меня под рукой нет даташитов.


                  1. Gordon01
                    10.12.2019 18:02

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


                    1. emmibox
                      10.12.2019 18:14

                      Мне просто лень сейчас прикидывать конкретный конфиг для наноамперного потребления и конкретный чип который это даст перелопачивая кучу данных — мне достаточно. что сам микрочип заявляет, что так можно, на этой архитектуре…


                      1. Gordon01
                        10.12.2019 22:50

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


                        1. emmibox
                          11.12.2019 09:41
                          +1

                          Реальный опыт — я вам уже сказал, что 20 лет назад производились изделия с потреблением ниже саморазряда батареек на линейках для этого не предназначенных. Хотя никаких нановаттных технологий тогда и в помине не было, но они уже жрали микроамперы…


                          1. Gordon01
                            11.12.2019 11:43

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

                            На конец 2019 STM32L0 потребляют меньше всего, они доступнее и дешевле всего остального и имеют нормальную периферию.


                            1. emmibox
                              11.12.2019 13:24

                              У вас неправильное понимание слова «мусор» в контексте обсуждения…

                              1) да любой 8-ми битный CPU by design жрет меньше 32х битного — ибо содержит меньше транзисторов и требует меньше энергии на их переключение в процессе выполнения кода.
                              1a) Так же любой код на ассемблере, жрет меньше по тем же самым причинам: не имеет «лишнего» исполняющегося мусора — лишних переключений состояний.

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

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

                              2) Оригинальная микропроцессорная архитектура разработанная самим производителем с учетом требования рынка (microchip), всегда имеет качество лучше, чем дженерик архитектура на ip модулях купленных как правило хрен знает у кого и насыпанные в кристалл по быстрому (ST). Дичайшие баги с АЦП в ST-шных поделках тому пример… А уж конфликты модулей друг с другом по ногам вообще смех — думать было некогда, надо было за кем то гнаться (за кем?)… Так что в вашем случае — это именно ST мусор. И этот мусор: сюрприз — стоит как мусор! кто бы мог подумать… А не как настоящие ARM процессоры которые например делает та же фуджитсу, и у которых степень доводки тех же самых по сути IP модулей — вообще космос по сравнению с глюкавыми ST. И это не ST-шный индустриальный only шлак — а чипы в автомотив-милитри-спейс грейд. Цена у них тоже конечно выше на порядок. Ибо так и должно быть! При том, что еще ST умеет секретить баги, пока эти баги до тех пор ну просто уже из горла не лезут у каждого 2-го разработчика…

                              3) особенно весело в контексте новичка например обсуждать минимальное число деталей, необходимых для запуска этих ваших 32-хбиток… когда те же PIC12-16 могут работать имея только батарейку подключенную к чипу 2-мя проводами — И ВСЕ! Можно по обсуждать корпуса, ведь те кто учатся еще не уверенно паяльник держит. Этот ваш STM32L0 — В ДИПЕ ГДЕ!? нету конечно… вы сразу паять в TSSOP20 будете учиться? ну ну — я бы посмотрел на этот цирк…

                              Так вот новичку лучше начинать работать с тем, что проще надежнее и предсказуемее, с меньшим числом деталей и в понятном корпусе с большим шагом и на что даташит на русском — а не этим вашим «а зато оно дешево». Чтоб не ходить по чужим граблям когда своих будет поле не пройденное.


                              1. Gordon01
                                11.12.2019 17:28

                                1) да любой 8-ми битный CPU by design жрет меньше 32х битного — ибо содержит меньше транзисторов и требует меньше энергии на их переключение в процессе выполнения кода.
                                1a) Так же любой код на ассемблере, жрет меньше по тем же самым причинам: не имеет «лишнего» исполняющегося мусора — лишних переключений состояний.

                                Я слышу что вы не программист, поэтому у вас нет понимания того, что чем быстрее работает ядро, тем меньше по времени оно работает. Современное ядро -> меньше техпроцесс -> меньше потребление на ватт -> меньше общее потребление.
                                Про ассемблер даже комментировать не буду. Пока вы будете писать код на ассемблере для выравнивания износа на FLASH, я уже дойду до выпуска многотысячной партии устройств и поеду в отпуск отдыхать на берегу моря.
                                Одна только реализация HashMap на ассемблере займет не один месяц и потребует идеальных академических знаний, с которыми человек в гугле будет зарабатывать пол миллиона долларов в год, а не программировать восьмибитные контроллеры.

                                2) Оригинальная микропроцессорная архитектура разработанная самим производителем с учетом требования рынка (microchip), всегда имеет качество лучше, чем дженерик архитектура на ip модулях купленных как правило хрен знает у кого и насыпанные в кристалл по быстрому (ST).

                                Такая прекрасная, что программировать под нее придется не в нормальном VisualGDB, а в мусорной IDE из 90х, где ни гит не поддерживается, ни инструментов рефакторинга нет.

                                Дичайшие баги с АЦП в ST-шных поделках тому пример… А уж конфликты модулей друг с другом по ногам вообще смех — думать было некогда, надо было за кем то гнаться (за кем?)

                                Вау, и в МК бывают баги. А я-то думал, что мир идеален

                                3) особенно весело в контексте новичка например обсуждать минимальное число деталей, необходимых для запуска этих ваших 32-хбиток… когда те же PIC12-16 могут работать имея только батарейку подключенную к чипу 2-мя проводами — И ВСЕ! Можно по обсуждать корпуса, ведь те кто учатся еще не уверенно паяльник держит. Этот ваш STM32L0 — В ДИПЕ ГДЕ!? нету конечно… вы сразу паять в TSSOP20 будете учиться? ну ну — я бы посмотрел на этот цирк…

                                Снова вы не в теме.

                                Плата с STM32L071KBU6. Подключена «только батарейка двумя проводками» и светодиод. Как раз для тестов потребления)))
                                Новички сегодня ничего не паяют сами. Зачем, если алика можно за 300 рублей заказать готовую отладочную плату.

                                И вы все еще не показали тот крутой МК двадцатилетней давности, у которого при работе ядра «наноамперное потребление». Мы все еще ждем.
                                Даже ваш любимый PIC16F15356 (самый современный) даст 1 микроампер на 32768 на 1.8 вольтах. Найти эту инфу у меня заняло 5 минут. Доказать свои слова вам лень, зато писать простыни гнева — нет.

                                И это не говоря, что вы сами свой главный аргумент
                                Есть например устройства 10 лет работающие на одной литиевой таблетке батарейке.
                                с процессорами у которых в слип ток потребления меньше чем саморазряд этой батарейки.
                                И никаких 32х биток в них не будет никогда (как и кода не на ассемблере).

                                в своем следующем сообщении дискредитировали:
                                В стопе одинаково


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


                                1. emmibox
                                  11.12.2019 17:56

                                  Я слышу что вы не программист, поэтому у вас нет понимания того, что чем быстрее работает ядро, тем меньше по времени оно работает

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

                                  Есть код экономящий 5$ в партии 10млн штук — КИХ фильтр. ассемблер. Люди что это сделали никогда не пойдут в гугл — им банально гугл не интересен.
                                  (смешно но работает на ваших любимых ST).

                                  Снова вы не в теме.

                                  Это для новичка? А школьник спаяет? QFN для школьников? а откуда он плату возьмет? утюгом сделает? двухстороннюю? и у вас 9 деталей на плате кроме процессора, хотя вам сказали что можно — НОЛЬ.

                                  Основная проблема этого вашего 32-битостроения тупо отсуствие реальных решаемых исключительно на нем задач! Когда придумали процессоры, придумали компиляторы, гиты и налабалии говнокода — а уровень задач как был «гирляндой» так и остался… А где не гирлянда — почему то гораздо проще промPC воткнуть с примитивным интерфейсом на линуксе чем изобретать кастомный говнокод на 32битках… (32 бита давно придумали — он x86 называется ;)


                              1. Sun-ami
                                11.12.2019 18:43

                                1) Не любой 8-ми битный CPU потребляет меньше 32х битного — это больше зависит от техпроцесса и напряжения питания. Но даже если они одинаковы — при отключенном питании ядра количество транзисторов в нём не имеет значения, а при включенном — расход энергии зависит от задачи. Если не требуется работать с данными разрядностью больше 8 бит — 8-битники могут выиграть. Но если значительный процент времени программа работает с данными разрядностью больше 8 — расход энергии 8-битником легко может оказаться выше. Сколько нужно 8-битных операций на MAC-операцию с 12-битными операндами и 24-битной суммой? Явно больше 8, а значит энергии будет потрачено больше, чем 32-битным ядром с его одной-двумя операциями и 4-кратным количеством транзисторов. А если взять ещё и PIC16 или ATtiny без умножителя — вообще катастрофически больше.
                                1a) Практика показывает, что большую часть времени выполняется небольшой процент кода. Это означает, что если для энергоэффективности недостаточно выбора контроллера с подходящим техпроцессом — нужно оптимизировать эту самую небольшую часть кода. Часто можно подобрать конструкцию на С, с которой компилятор сгенерирует эффективный код, но если этого недостаточно — можно использовать ассемблерные вставки и отдельные функции. Но писать на ассемблере всю программу — это как правило означает, что её функционал будет максимально урезан, потому что на всякие там выравнивания износа флэша банально не хватило времени. А если использовать что-то вроде ATtiny — на такие вещи ещё и просто не хватит ресурсов контроллера.
                                2) Модуль EEPROM для XmegaA3 разрабатывался не в Atmel? Или почему он нормально работает только в sleep-режиме?
                                3) STM32F070 может работать от батарейки без дополнительных деталей. Другим STM32 нужно лишь несколько конденсаторов по питанию.


    1. Int_13h
      11.12.2019 10:07
      +1

      Каждой задаче свой инструмент. Зачем закручивать гвозди отверткой, если есть молоток? И мне не нравится слово «пересядете». Что запрещает использовать и 8, и 32 битки?


      1. quwy
        11.12.2019 20:49

        Зачем закручивать гвозди отверткой, если есть молоток?

        Мне адепты STM местами напоминают сектантов. Стоит появиться статье или комментарию с упоминанием 8-битных контроллеров, тут же налетают эти товарищи и начинают доказывать, что вы все говно, а истинные профи используют исключительно 32-битные кристаллы единственно одного верного производителя. И ладно бы их задачи требовали каких-то особых ресурсов, но нет, светодиодом мигать тоже позволено только из ARM-ядра.


        1. emmibox
          12.12.2019 12:33

          В старых срачах микрочип VS атмел AVR было все ровно то же самое…
          AVR форева… AVR дешево!!! Оказалось и правда не дорого — когда микрочип весь атмел с потрохами купил… Видимо это те же люди — их на ST просто сдуло ;)


  1. slog2
    09.12.2019 17:49

    Как я научился работать с микроконтроллерами — опыт старичка. Какой был год точно уже не помню, да и не важно. Помню мой первый микроконтроллер. Он был в керамическом корпусе с окошком для стирания ПЗУ ультрафиолетом. Количество циклов перепрограммирования что-то в районе сотни. Зато стоил как пол автомобиля. А других тогда не было. Если не считать разово или масочно программируемых. Да и интернета не было. И спросить было не у кого. Информация вся из бумажных книг в советской библиотеке. Так вот и жили. А потом наступила величайшая геополитическая катастрофа, появился интернет, электрически стираемый ЕЕПРОМ, внутрисхемное программирование и остальной разврат.


  1. diafour
    09.12.2019 20:56

    И да, про Arduino тогда никто понятия не имел.

    В 2009ом никто не имел понятия? Как это? Заказал diecimila в Линуксцентре ещё в 2008ом как раз чтобы попробовать программирование МК.


    1. DIHALT
      09.12.2019 23:19
      +1

      Скажем так, оно тогда только начало у нас тут набирать популярность. Сам помнится писал в журнал Хакер статью про ардуину примерно в то время, может раньше. Наверное раньше, году так в 2008


  1. siargy
    10.12.2019 06:57

    Создатель сайта написал ещё и учебник по программированию

    видимо склоняемый на мелкочипе корабельникофф


  1. siargy
    10.12.2019 07:05

    Освоить МК реально даже самому и с нуля

    я бы советовал начинающим вот такую плату
    image
    и уроки к ней, есть на асме и си.


  1. radonit
    10.12.2019 12:48

    Есть микроконтроллеры, а есть ещё ПЛИС (про которые тут человек из Америки пишет) и это разные вещи и используют разные языки программирования?
    Тогда с чего лучше начинать новичку и почему?


    1. quwy
      11.12.2019 08:45

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

      ПЛИС — это цифровой радиоконструктор в микросхеме, вам дается набор логических модулей и вы можете [почти] произвольным образом соединять их между собой и с ножками микросхемы. Т.е. вы фактически разрабатываете принципиальную схему устройства, которое совсем не обязано быть чем-то похожим на компьютер с программами и памятью. И языки разработки там совсем не похожи на то, с чем вы имеете дело, программируя компьютер или контроллер.