Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments
ЧТЕНИЕ ЗАЩИЩЕННЫХ МИКРОКОНТОЛЛЕРОВ (МК) – RussianSemiResearch
 

Ответы на часто задаваемые вопросы:

  • Содержание

    1. Для кого предназначен этот FAQ?

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

  • 2. Для чего и от кого делается защита микроконтроллеров?

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

  • 3. Что представляет собой защита от копирования в микроконтроллере, и почему я сам не могу считать защищенную микропрограмму (прошивку)?

    Обычно защита от копирования устанавливается во время программирования микроконтроллера путем установки специального бита защиты или нескольких бит в слове конфигурации микроконтроллера. Физически эти биты располагаются в специальных ячейках памяти на кристалле микроконтроллера. Иногда используются другие методы защиты, например защита паролем, но принцип сохраняется. Чтобы снять защиту обычно необходимо изменить значение этого бита или нескольких битов, хотя часто могут использоваться и другие методы считывания содержимого памяти программы микроконтроллера. Обычными методами, например программатором, это сделать не удастся, необходимо сложное дорогостоящее оборудования, которого обычный разработчик электронных устройств не имеет. Поэтому мы, имея необходимое оборудование, знания и опыт, специализируемся на предоставлении подобного рода услуг.

  • 4. Что дает мне снятие защиты от чтения микропрограммы (прошивки)?

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

  • 5. Какова законность таких действий с точки зрения законодательства?

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

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

    Статья 1280 ГК РФ. “Свободное воспроизведение программ для ЭВМ и баз данных. Декомпилирование программ для ЭВМ”.

    2. Лицо, правомерно владеющее экземпляром программы для ЭВМ, вправе без согласия правообладателя и без выплаты дополнительного вознаграждения изучать, исследовать или испытывать функционирование такой программы в целях определения идей и принципов, лежащих в основе любого элемента программы для ЭВМ, путем осуществления действий, предусмотренных подпунктом 1 пункта 1 настоящей статьи.

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

  • 6. Что представляет собой дополнительная защита от чтения и почему она лучше обычной?

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

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

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

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

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

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

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

  • 8. Я боюсь, что после считывания моя программа может быть передана или использована третьими лицами.

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

  •  

    Задать свой вопрос: [email protected]

     

     

    ПРОГРАММИРУЕМ С UNIPROF

    В настоящее время, все больше людей, интересующихся электроникой, и конструирующих самостоятельно различные устройства, собирают устройства с применением микроконтроллеров. Даже начинающие, рано или поздно приходят к мысли, о необходимости их изучения, потому — что за ними будущее. Из наиболее широко распространенных, и относительно простых для изучения, по крайней мере, относительно других МК, могу назвать микроконтроллеры PIC и AVR. 

    Внешний вид микроконтроллера

    По микроконтроллерам AVR, семейств Mega и Tiny, есть много информации в интернете, и огромное количество готовых схем и прошивок для них. Выбравшие для изучения AVR микроконтроллеры (МК), думаю, чаще всего собирают себе, сперва для прошивания МК Программатор Громова. Это очень легкий в сборке программатор, не содержит дефицитных деталей, не требует наладки, и собрать его может даже школьник. Главным недостатком его является то, что для его подключения к компьютеру необходим СОМ порт, который часто отсутствует на современных компьютерах. Я являюсь обладателем относительно современного системного блока, на материнской плате которого производители оставили СОМ порт, и разумеется, собрал себе Программатор Громова, начав свое знакомство с МК AVR. 

    Программатор Громова самодельный

    Выбор оболочек работающих с этим программатором не велик, наиболее распространенные, это Ponyprog и Uniprof. Испробовав в работе обе из них, понял, что к Ponyprog, у меня почему-то душа не лежит, зато Uniprof меня полностью устроила. Так выглядит её рабочее окно:

    Рабочее окно программы Uniprof

    В настоящий момент программатор не подключен, после подключения программатора к программируемому МК, и подаче на него питания, вместо надписи синим текстом UNKNOWN будет показана модель микроконтроллера. В случае каких-либо проблем, с автоматическим определением типа МК, можно вручную указать его тип в появившемся  меню. В настоящее время мощность современных компьютеров очень высока, для того чтобы прошить МК без ошибок, нужно поставить галочку Тормоз, в рабочем окне программы. Особенно это касается прошивания выставленных фьюзов. 

    Иконки программы Uniprof

    Разберем подробнее основные пиктограммы, используемые при работе с оболочкой.

    • READ. Считать прошивку с микроконтроллера. Кликнув по этой иконке, мы считываем записанную ранее прошивку, с чипа микроконтроллера в буфер программы.
    • PROG. Записать прошивку в микроконтроллер. С помощью этой иконки мы записываем прошивку, из буфера программы в память чипа, или прошиваем МК.
    • TEST. Сверка  прошивки, записанной в память чипа, с прошивкой в буфере программы.
    • FUSE. Выставление фьюзов. Установка фьюз битов, задающих параметры работы микроконтроллера. О них ниже поговорим отдельно.
    • ERASE. Стереть прошивку микроконтроллера. Перед тем, как залить в чип новую прошивку, мы должны удалить старую из его памяти. С помощью этой иконки, мы и осуществляем стирание.
    • HEX Загрузить прошивку в буфер, (иконка папки). Перед тем как прошить микроконтроллер, мы должны загрузить прошивку в буфер программы, сделать это можно с помощью этой иконки.
    • HEX Сохранить прошивку из буфера (иконка дискеты). Служит для сохранения на компьютере прошивки, снятой с чипа микроконтроллера, и загруженной в буфер. Сохранить прошивку можно, только если микроконтроллер не был защищен от копирования его прошивки, с помощью выставления определенных фьюз битов.

    Рассмотрим что это такое, фьюз биты. Такое окно появляется, если мы кликнем на иконку Фьюзы:

    Окно Унипроф

    У некоторых типов микроконтроллеров, часть фьюзов представленных на скрине может отсутствовать, у других наоборот, могут быть дополнительные фьюзы, которых нет на этом рисунке. Фьюзы делятся на несколько групп: Перечислим их так, как они идут на рисунке, слева направо, это Lock Байт, установка lock битов, защищает прошивку от копирования, Low Байт, это Младший байт. High Байт, это Старший байт. Ext Байт, это Дополнительный байт. 

    Список фьюзов Тини 2313

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

    Онлайн калькулятор фьюзов

    При выставлении фьюзов, нужно быть очень внимательным, потому что ошибочное выставление некоторых из них, приведет к тому, что микроконтроллер залочится, и перепрошить его через последовательный интерфейс (SPI) будет невозможно. В таком случае если вы все же напутали с выставлением фьюзов, поищите среди своих знакомых радиолюбителя, с параллельным (высоковольтным) программатором или Реаниматором МК AVR. Также, если вы случайно выставили тактирование, не от внутреннего генератора МК, а от внешнего кварца, и микроконтроллер перестал быть “виден” при прошивании, нужно будет подключить кварц и 2 конденсатора в соответствии со схемой и распиновкой из даташита.

    Фузы которые изменять осторожно

    Выше на рисунке, обведены красным те фьюзы, которые изменять не нужно, иначе микроконтроллер залочится. Это RSTDISABLE, выбор этого бита, отключает работу вывода RESET, и превращает его в еще один вывод порта микроконтроллера.  SPIEN, этот бит, собственно и включает последовательное программирование. В некоторых программах-оболочках стоит защита от его изменения. DWEN, это бит служащий для отладки микроконтроллера, если его изменить, МК будет также недоступен для программирования по SPI. Также нужно обратить внимание, что в некоторых программах-оболочках, фьюз биты выставляются инверсно, Uniprof относиться именно к таким программам. То есть в одних, наличие галочки  означает, что бит не запрограммирован, а в других наоборот. Для того что не ошибиться, можно ориентироваться по биту Spien, есть на нем галочка или нет, так как если микроконтроллер виден, бит Spien запрограммирован, этот бит бывает установлен по умолчанию. В программе-оболочке Ponyprog, галочки ставятся инверсно относительно Uniprof. Автор статьи — AKV.

    Что нужно для программирования микроконтроллеров? ⋆ diodov.net

    Программирование микроконтроллеров Курсы

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

    Программирование микроконтроллеров AVR

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

    Структура и порядок написания программы

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

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

    Языки программирования микроконтроллеров: Си и Ассемблер

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

    Здесь мы не будем сравнивать преимущества и недостатки написания программ на Ассемблере и Си. Со временем, приобретя некоторый опыт в программировании МК, вы сами для себя сделаете полезные выводы.

    Сам код программы можно писать в любом стандартном текстовом редакторе, например в Блокноте. Однако на практике пользуются более удобными редакторами, о которых будет сказано далее.

    Компиляция программы

    Написанный нами код на Си еще вовсе не понятен микроконтроллеру, поскольку МК понимает команды только в двоичной (или шестнадцатеричной) системе, которая представляет собой набор нулей и единиц. Поэтому Си-шный код нужно преобразовать в нули и единицы. Для этого применяется специальная программа, называемая компилятор, а сам процесс преобразования кода называется компиляция.

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

    Для прошивки МК применяется устройство, называемое программатор. В зависимости от типа программатора вход его подключается к COM или USB порту, а выход к определенным выводам микроконтроллера.

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

    Существует широкий выбор программаторов и отладочных плат, однако нас вполне устроит самый простой программатор USBASP, который в Китае стоит не более 3 $.

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

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

    Теперь давайте подытожим этапы программирования микроконтроллеров.

    Что нужно для программирования микроконтроллеров

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

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

    Необходимый набор программ

    Существует множество полезных и удобных программ для программирования МК. Они бывают как платные, так и бесплатные. Среди них можно выделить три основных:

    1) Atmel Studio

    2) CodeVisionAVR

    3) WinAVR

    Все эти программы относятся к IDEIntegrated Development Environment – интегрированная среда разработки. В них можно писать код, компилировать и отлаживать его.

    Следует обратить внимание на Code Vision AVR. Эта IDE позволяет упростить и ускорить написание кода. Однако программа платная.

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

    Прошивка и отладка программы

    Прошивать микроконтроллеры мы будем с помощью дополнительной программы AVRDUDE.

    Если микроконтроллера в наличии нет, то его работу можно эмитировать с помощью программы Proteus. Она значительно упрощает процесс отладки программы даже при наличии МК, чтобы его часто не перепрошивать, ведь любой МК имеет конечное число перезаписей, хотя это число и достаточно большое.

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

    Еще один важный элемент, который нам пригодится – это техническая документация на МК, называемая datasheet. В общем, нужно скачать datasheet на микроконтроллер ATmega8.

    Итак, полный набор для программирования МК состоит из таких элементов:

    1) Atmel Studio

    2) Datasheet на ATmega8

    3) Proteus

    4) AVRDUDE

    5) Программатор USB ASP (+ драйвер на него)

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

    7) Микроконтроллер ATmega8

    Если микроконтроллера нет в наличии, не стоит откладывать изучение микроконтроллеров на потом, достаточно скачать и установить:

    1) Atmel Studio

    2) Datasheet на ATmega8

    3) Proteus

    Скачать AVRDUDE

    Скачать datasheet ATmega8

    Скачать Atmel Studio

    Как читать электрические схемы и создавать электронные устройства

    Еще статьи по данной теме

    Обход встроенной защиты PIC-микроконтроллеров / ХабрВ комментариях к недавнему топику о вскрытии процессора была упомянута статья о том, как удалось обойти встроенную защиту от чтения прошивки микроконтроллера (т.н. Fuse-биты). Мне она понравилась, ниже — перевод с некоторыми дополнениями и пояснениями.
    Взлом МК PIC18F1320

    Я подумал, что было бы неплохо попробовать что-нибудь из тех техник взлома микроконтроллеров семейства PIC, о которых я слышал. Обычно PIC-микроконтроллеры имеют некоторое количество так называемых fuse-бит, которые служат для защиты от чтения или модификации каких-то частей памяти. Однако бывают случаи, когда возникает необходимость прочитать содержимое уже запрограммированного и защищенного контроллера (на законных основаниях). Типичный пример — потеря компанией технической документации на устройство, либо увольнение тех людей, которые изначально разрабатывали защищенную прошивку микроконтроллера. Такое так же часто случается, когда компания хочет обновить линейку своих продуктов.
    Ну, сами понимаете, есть еще некоторые ситуации, когда такие навыки могут пригодиться.

    Я купил четыре PIC18F1320 и начал их мучать. Вот так выглядит PIC18F1320 в первозданном, не раскуроченном виде:

    Первое, что предстоит сделать, это внять верхнюю часть корпуса, чтобы стали доступны кремниевые внутренности микроконтроллера. Хотя существует достаточно много любительских способов сделать это, но обычно они основаны на применении азотной или серной кислоты. Во-первых, это, скорее всего, не те вещи, которые вы очень хотите видеть рядом с собой. Во-вторых, их непросто достать, поскольку, например, азотная кислота является одним из компонентов для изготовления взрывчатых веществ. Я решил, что самый простой и надежный способ — отправить микроконтроллеры в лабораторию анализа отказов, такую как MEFAS, и за $50 и 2 дня получить на руки уже «обезглавленные» компоненты. Для этого проекта я удалил компаунд с трех микроконтроллеров. Два из них остались полностью рабочими, а один лишился корпуса полностью, т.е. остался только сам чип. Это было продиктовано конструктивными особенностями моего микроскопа при больших увеличениях.

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

    Видны (по часовой стрелке): 8 KB flash-памяти, источник опорного напряжения, зарядовый насос для программирования flash/EEPROM памяти, 256 байт EEPROM памяти, втроенные таймеры и цепи тактирования, вычислительное ядро, ПЗУ с микрокодом, массив с fuse-битами, 256 байт ОЗУ, АЦП. (

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

    Немного подумаем об этих металлических экранах. Для чего они нужны? Во-первых, вспомним некоторые интересные факты о технологии flash (этот тип памяти применяется в том числе и в PIC-микроконтроллерах для хранения fuse-бит). Flash-технология подразумевает использование транзисторов с плавающим затвором, очень похожие на те, что применялись в старых микросхемах ПЗУ с ИФ-стиранием (вы же помните 2616-е в керамическом корпусе и с кварцевым стеклом?). И во flash, и в УФ-ППЗУ данные сохраняются путем инжектирования электронов на плавающий затвор при помощи тоннельного эффекта, где эти электроны могут находиться десятилетиями. Дополнительные электроны в плавающем затворе создают заметные изменения в характеристиках транзистора. Разница заключается в том, что во flash-памяти для стирания информации достаточно электрических импульсов, в то время как в УФ-ППЗУ для того чтобы «выгнать» электроны с плавающего затвора необходимы фотоны с высокой энергией. Для этого необходим ультрафиолет с длинной волны примерно 250 нм. Для того, чтобы УФ-излучение не слишком сильно ослабевало, применяются кварцевые стекла (те самые окошечки на старых микросхемах ПЗУ).
    Важный вывод, который можно сделать из вышеуказанных фактов: flash память тоже может быть стерта при помощи УФ-излучения, т.к. она имеет практически ту же транзисторную структуру, что и УФ-ППЗУ устройства. Корпус устройств с flash-памятью обычно мешает попаданию ультрафиолета на поверхность кристалла, но так как наш PIC микроконтроллер теперь лишен пластиковой верхушки корпуса, то мы может применить УФ-излучение и посмотреть, что из этого выйдет.
    Я провел эксперимент, в котором запрограммировал PIC-контроллер последовательными значениями от 0x00 до 0xFF, и затем проэкспонировал его в моем УФ-ППЗУ стирателе, пока принимал душ и проверял почту.
    Когда я извлек контроллер из стирателя, то обнаружил, что flash-память действительно была очищена и вернулась в изначальное состояние (все значения 0xFF), и что защитные fuse-биты так же были деактивированы. Так же следует учитывать, что УФ-излучение действует и на EEPROM-память.
    Ясно, что металлические пластины над защитными fuse-битами как раз служат защитой от того, чтобы сбросить их отдельно от flash-памяти программ.

    Картинка иллюстрирует проблему (и ее решение), с которой я столкнулся. Для того чтобы стереть информацию на транзисторе flash-памяти, сильное УФ-излучение должно достигать его плавающего затвора. А металлические экраны препятствуют этому, эффективно отражая УФ-лучи.
    Однако, благодаря разности между коэффициентами преломления света для оксида и кремния, свет, падая под некоторым углом, будет отражаться от его поверхности. Чтобы получше понять этот эффект можете прыгнуть в бассейн и посмотреть на воду почти на уровне глаз. Вода будет обладать очень хорошей отражательной способностью как раз из-за разницы коэффициентов преломления воды и воздуха. Это называется полное внутреннее отражение.
    Это отражение как раз можно использовать, чтобы заставить УФ-излучение отражаться от металлической поверхности экрана и падать обратно на плавающий затвор транзистора. Итак, поворачивая PIC-микроконтроллер внутри ПЗУ-стирателя, я могу направить достаточно света для того чтобы он, отразившись в области транзистора flash-памяти, вызвал его стирание. После нескольких попыток я разработал технологию, которая кажется работает вполне неплохо.

    Это фото микроконтроллера внутри ПЗУ-стирателя (синее свечение вокруг контроллера обусловлено работой УФ-лампы). Микроконтроллер закреплен под углом в антистатическом материале.
    Но все это не может защитить от стирания нужных данных в той части flash-памяти, где хранится программа микроконтроллера. Для того чтобы предотвратить стирание этих данных используется сплошная маска, которая была очень аккуратно вырезана из изоленты и прикреплена к кристаллу с помощью двух пинцетов, микроскопа и недрогнувшей руки ) Изолента эффективно блокирует прохождение ультрафиолета, тем самым защищая закрытую область памяти от стирания, а так же поглощает отраженный от кремниевой подложки ультрафиолет.

    Это фото кристалла с прикрепленной маской над областью flash-памяти.
    Используя эту технику я наконец смог сбросить защитные fuse-биты без стирания основной программы микроконтроллера. Этим же способом можно стирать только некоторую часть flash-памяти. Ура!
    Замечания

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

    UPD: исправил по возможности огрехи перевода (про ширину запрещенной зоны, магнитную ленту и способ заполнения памяти контроллера).

    UPD 2: эта же тема, но для микроконтроллеров AVR, затрагивается здесь и здесь. Вот тут можно заказать чтение прошивки и даже купить спец. приборы.

    Оригинал статьи тут.

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

    1. Многие начинающие электронщики не знают с чего начать, поэтому спрашивают совета. Большинство бывалых радиолюбителей ответят, что начни собирать какую нибудь схему. Естественно в голове любого начинающего сразу мелькает LCD дисплей с jpeg картинками, какой нибудь mp3 плеер или часы, без малейшей мысли о том, что не имея базовых знаний это неподъемная задача.

    Я категорически против такого подхода. Обычно это все заканчивается — либо ничем, либо забитые форумы с мольбами помочь. Даже если кому то помогают, то в 90% он больше никогда не всплывет на сайтах по электронике. В остальных 10% он так и продолжает заливать форумы мольбами, его будут сначала пинать, затем поливать грязью. Из этих 10% отсеивается еще 9%. Далее два варианта: либо таки до глупой головы доходит и все же происходит goto к началу, либо в особо запущенных вариантах, его удел копировать чужие конструкции, без единой мысли о том как это работает. Из последних зачастую рождаются ардуинщики.

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

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

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

    2. Перед решением задачи, дробите ее до абсурда вплоть до «припаять резистор», это помогает, проверено. Мелкие задачи решать куда проще. Когда большая задача разбита на кучу мелких действий, то все что остается — это выполнить их. Могу привести еще один годный совет, хоть он вам и покажется бредовым — заведите блокнотик и пишите в него все что собираетесь сделать. Вы думаете, итак запомню, но нет. Допустим сегодня у меня хорошее настроение и думаю о том, как собрать плату. Запиши план действий: сходить купить резистор, подготовить провода, сделать крепление дисплея. Потом все забудешь, откроешь блокнотик и смотришь — ага сегодня настроение попилить и построгать, сделаю крепление. Или собираешь ты плату и уже осталось допаять последний компонент, но не тут то было резисторы кончились, вот записал бы перед тем как паять, то вспомнил.

    3. Не пользуйтесь кодогенераторами, нестандартными фичами и прочими упрощалками, хотя бы на первых этапах. Могу привести свой личный пример. Во времена активного использования AVR я пользовался кодогеном CAVR. Меня он полностью устраивал, хотя все говорили, что он кака. Звоночки звенели постоянно, были проблемы с библиотеками, с синтаксисом, с портированием, но было тяжело от этого отказаться. Я не разбирался как это работает, просто знал где и как поставить галочки.

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

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

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

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

    Очень многие начинающие брезгуют изучением языка, поэтому если вы не будете как все, то сразу станете на две ступени выше остальных новичков. Так же не никакой разницы, где изучать язык. На мой взгляд, микроконтроллер для этого не очень подходит. Гораздо проще поставить какую нибудь Visual studio или Qt Creator и порешать задачки в командной строке.

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

    5. Изучение ассемблера? Бояться его не нужно, равно как и боготворить. Не нужно думать, что умея написать программу на ассемблере, вы сразу станете гуру микроконтроллеров, почему то это частое заблуждение. В первую очередь это инструмент. Даже если вы не планируете использовать его, то все равно я бы настоятельно рекомендовал написать хотя бы пару программ. Это сильно упростит понимание работы микроконтроллера и внутреннего устройства программ.

    6. Читайте даташит. Многие разработчики, пренебрегают этим. Изучая даташит вы будете на две ступени выше тех разработчиков. Делать это крайне полезно, во первых это первоисточник, какие бы сайты вы не читали, в большинстве случаев они повторяют информацию из даташита, зачастую с ошибками и недосказанностями. Кроме того, там может находиться информация, о которой вы не задумываетесь сейчас, но которая может пригодиться в будущем. Может статься так, что вылезет какая то ошибка и вы вспомните что да, в даташите об этом было сказано. Если ваша цель стать хорошим разработчиком, то этого этапа не избежать, читать даташиты придется, чем раньше вы начнете это делать, тем быстрее пойдет рост.

    7. Часто народ просит прислать даташит на русском. Даташит — это то, что должно восприниматься как истина, самая верная информация. Даже там не исключены ошибки. Если к этому добавятся ошибки переводчика, он ведь тоже человек, может даже не нарочно, просто опечататься. Либо у него свое видение, может что-то упустить, на его взгляд не важное, но возможно крайне важное для вас. Особенно смешной становится ситуация, когда нужно найти документацию на не сильно популярные компоненты.

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

    Мною был проведен эксперимент: в наличии был студент, даташит и гугл переводчик. Эксперимент №1: студенту вручен даташит и дано задание самостоятельно найти нужные значения, результат — «да как я смогу», «да я не знаю английский», «я ничего не нашел/я не понял» типичные фразы, говорящие о том, что он даже не пытался. Эксперимент №2: тому же студенту, вручен все тот же даташит и тоже задание, с той разницей, что я сел рядом. Результат — через 5 минут он сам нашел все нужные значения, абсолютно без моего участия, без знания английского.

    8. Изобретайте велосипед. Например, изучаете какую то новую штуку, допустим транзистор, дядька Хоровиц со страниц своей книги авторитетно заявляет, что транзистор усиливает, всегда говорите — НЕ ВЕРЮ. Берем в руки транзистор включаем его в схему и убеждаемся что это действительно так. Есть целый пласт проблем и тонкостей, которые не описываются в книгах. Прочувствовать их можно только, когда возьмешь в руки и попробуешь собрать. При этом получаем кучу попутных знаний, узнаем тонкости. Кроме того, любая теория без практики забудется намного быстрее.

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

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

    9. А как бы я сделал это, если бы находился на месте разработчиков? Могу ли я сделать лучше? Каждый раз задавайте себе эти вопросы, это очень хорошо помогает продвигаться в обучении. Например, изучите интерфейсы 1wire, i2c, spi, uart, а потом подумайте чем они отличаются, можно ли было сделать лучше, это поможет осознать почему все именно так, а не иначе. Так же вы будете осознавать, когда и какой лучше применить.

    10. Не ограничивайтесь в технологиях. Важно что этот совет имеет очень тонкую грань. Был этап в жизни, когда из каждой подворотни доносилось «надо бы знать ПЛИС», «а вот на ПЛИС то можно сделать». Формально у меня не было целей изучать ПЛИСины, но и пройти мимо было никак нельзя. Этому вопросу было выделено немного времени на ознакомление. Время не прошло зря, у меня был целый ряд вопросов, касаемых внутреннего устройства микроконтроллеров, именно после общения с плисинами я получил ответы на них. Подобных примеров много, все знания, которые я приобретал в том или ином виде, рано или поздно пригодились. У меня нет ни единого бесполезного примера.

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

    11. Если спросить начинающего радиолюбителя, что ему больше нравится программирование или схемотехника, то с вероятностью 99% ответ будет программирование. При этом большую часть времени эти программисты тратят на изготовление плат ЛУТом/фоторезистом. Причины в общем то понятны, но довольно часто это переходит в некий маразм, который состоит в изготовлении плат ради изготовления плат.

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

    12. Следующий совет, особенно болезненный, мне очень не хочется его обсуждать, но надо. Часто мне пишут, мол ххх руб за ууу дорого, где бы подешевле достать. Вроде бы обычный вопрос, но обычно я сразу напрягаюсь от него, так как зачастую он переходит в бесконечные жалобы на отсутствие денег. У меня всегда возникает вопрос: почему бы не оторвать пятую точку и не пойти работать? Хоть в тот же макдак, хоть на стройку, потерпеть месяц, зато потом можно приобрести парочку плат, которых хватит на ближайший год. Да я знаю, что маленьких городах и селах сложно найти работу, переезжайте в большой город. Работайте на удаленке, в общем нужно крутиться. Просто жаловаться нет смысла, выход из ситуации есть, кто ищет его тот находит.

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

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

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

    15. Тонкий вопрос: профильное высшее образование, нужно ли оно? Мне известны не единичные случаи, когда люди работали абсолютно без образования и по опыту и знаниям они могли дать прикурить любому дипломированному специалисту. Собственно, у меня нет профильного образования, испытываю ли я от этого дискомфорт? В определенной степени да.

    Еще в самом начале, когда микроконтроллеры были для меня хобби, я много помогал с курсовыми и дипломами разных вузов, просто чтобы оценить свой уровень. Могу сказать уверенно, что уровень в целом невысок вне зависимости от имени вуза. Учиться несколько лет, для того чтобы написать такой диплом, совершенно необязательно. Достигнуть этого можно самостоятельно за весьма короткий срок. И все же зачастую бывали моменты, когда студенты знали какой то предмет, который они проходили на 2-3 курсе, а я этого не знал. Хоть все эти знания и компенсировались самообразованием, но все же лучше было бы не тратить на это время.

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

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

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

    Если подытожить то совет таков: если есть хоть малейшая возможность — нужно идти учиться, обязательно по профилю, если есть хоть какие то шансы, то лезть везде, а не отсиживать штаны на задней парте. Заводить знакомства, параллельно дома самому практиковаться, развиваться.

    16. Поздно ли начинать программировать в 20, 30, 40, 50 лет? Практика других людей показывает, что возраст вообще не помеха. Многие почему то не учитывают то, что есть целый пласт работы, которую молодые в силу своих амбиций не хотят делать. Поэтому работодатели предпочитают брать тех, кто будет ее тащить. Это ваш шанс зацепиться, а дальше все зависит только от вас.

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

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



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


    Впервые интерес к МК у меня возник, когда я учился в 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 Ваше всё. МК расчитаны на использование в «железках» — блоки управления, платы, контроллеры итд итп, это не полноценный компьютер, а контроллер. И ожидать от него следует соответственно. Благо сейчас полно примеров на ютубе, и я надеюсь, что мой опыт начинания с нуля будет не таким горьким и моя статья кому-нибудь, да поможет.
    Способы отладки ПО микроконтроллеров в электроприводе / Блог компании НПФ ВЕКТОР / Хабр

    Как отлаживают программы микроконтроллеров? Берется JTAG, осциллограф – пара дней/недель и программа отлажена. Таким будет типичный ответ, и в большинстве случаев он будет правильным… Но не всегда. Микроконтроллеры решают очень разные задачи, и в этой статье мы рассмотрим, что делать, если нужно разработать громоздкое ПО низкоуровневого управления каким-либо силовым электрооборудованием, например, преобразователями частоты для электродвигателей, DC/DC преобразователями заряда АКБ для поезда, корректорами мощности, сервоприводами и т.п. Оборудованием, где протекают килоамперы и ШИМят киловольты, где на счету каждая коммутация IGBT ключей инвертора, где время реакции микроконтроллера на нештатную ситуацию измеряется в микросекундах, а само оборудование в герметичных корпусах устанавливается и эксплуатируется где-нибудь на заводах Якутии. Если вы хотите узнать, какие особенности это накладывает на способы отладки – добро пожаловать под кат.


    В чем же особенности отладки микроконтроллеров (МК), выполняющих такие задачи? Во-первых, когда МК работает с силовым оборудованием, его нельзя останавливать. МК при помощи ШИМ управляет силовыми ключами, регулирует множество величин в своих коридорах – токи фаз двигателя, напряжение звена постоянного тока, частоту вращения, положение рабочего органа и т.п. Если остановить МК во время работы на точке останова, то в лучшем случае оборудование отключится по аппаратной защите, а в худшем всё просто взорвется (если силовые ключи останутся включенными в «одном» положении или с одним заданием скважности). Поэтому классический способ отладки – «пройти по шагам отладчиком» в таких задачах не работает. Так можно только обкатать «на столе» совсем сырые программные модули перед их первым включением на реальном оборудовании.

    Во-вторых, это сложность низкоуровневого ПО. Размер секции программного кода .text 50-200 Кбайт для программного кода, управляющего исключительно аппаратной частью (без высокоуровневых коммуникационных драйверов и т.п.) – это типичная ситуация для микроконтроллера какого-нибудь промышленного сервопривода. Поэтому для таких задач используют микроконтроллеры серии motorcontrol, которые сочетают в себе одновременно и очень развитую периферию, и высокую производительность, и относительно большой (для МК) объем памяти. В качестве примера из импортных МК можно привести 32х разрядные МК Texas Instruments серии C2000, из отечественных чип К1921ВК01Т ОАО «НИИЭТ». ПО для таких МК обычно содержит десятки или сотни тысяч строк отборного оптимизированного Си/Си++ кода, которые просто невозможно отладить «миганием светодиодиком», «printf’ом в UART» или наблюдением работы ножек МК внешним осциллографом.

    В-третьих, контроллер системы управления электроприводом чаще всего стоит внутри силового преобразователя, корпус которого закрыт, а иногда даже загерметизирован. Поэтому доступ по JTAG – уже большая проблема хотя бы только для прошивки (с выключенным силовым питанием). И еще более серьезная проблема – отладка по JTAG с включенным силовым питанием. Здесь должен использоваться обязательно гальванически-развязанный и помехозащищенный JTAG (мы используем для МК TI JTAG SAURIS со встроенной гальванической развязкой – дорого, но работает).

    В-четвертых, никаких операционных систем! Можно предвидеть, как у некоторых в голове крутится мысль «ну раз у вас такая сложная задача, поставьте нормальный микроконтроллер с Linux и пишите под него обычные приложения, обновляя ПО с флешки». Системы управления силовым оборудованием – системы очень жесткого реального времени. Не то что Linux, даже не все специализированные ОС реального времени подходят для таких задач. Например, прерывание АЦП по считыванию и усреднению аналоговых данных может вызываться с частотой до 100кГц. При этом оно будет содержать всего десяток-другой строк кода – сбор данных аналоговых каналов, пара проверок быстродействующих защит и выход – всё, больше ничего не успеть. Если поручить такое прерывание какому-нибудь планировщику задач ОС, то просто его собственное выполнение будет занимать больше ресурсов. Не говоря уже о том, что, в частности, для Linux вместо одной микросхемы МК на плату надо поставить еще две – внешнюю оперативную и флеш-память, отведя на них кучу драгоценных ножек кристалла, использовать шестислойную плату для правильной разводки, получить огромное время загрузки МК (иногда при сбое питания или срабатывании сторожевого таймера надо начать работу раньше, чем двигатель успел остановиться!), иметь проблемы с целостностью файловой системы и прочее.

    Ну и пятая особенность – системы низкоуровневого управления электроприводом и другим силовым оборудованием (в отличие от задач коммуникации по разным интерфейсам, ПЛК, контроллеров всяких сигнализаций, пультов и прочего) реализуют в основном алгоритмы систем автоматического регулирования. А именно: софт наполовину состоит из различного рода замкнутых структур с ПИД-регуляторами, блоками насыщения, мертвой зоны, таблиц зависимости одного от другого, фильтрами, наблюдателями, задатчиками интенсивности, планировщиками движения и прочим. Вычисления в таком ПО выполняются с определенной частотой – скажем, на частоте 10кГц вызывается прерывание и обсчитывает все перечисленные блоки, которые вместе образуют нужную структуру управления оборудованием. В таких алгоритмах пошаговая отладка не помогает – чаще всего на каждом шаге каждый модуль выдает то, что от него ждут – собственно, все эти фильтры, регуляторы и прочее уже отлажено годами и сюрпризов там мало. Проблемы возникают при работе всей структуры в целом – каждый блок по отдельности работает, а желаемый процесс регулирования происходит не так, как ожидается. И проблемы оказываются как в настройке сотен параметров и коэффициентов этих блоков, так и в самой собранной из них структуре – может статься, что нужно добавить новый контур стабилизации чего-то где-то, добавить блок предсказания, ограничения и т.п. Поэтому это очередной «камень в огород» пошаговой отладки и отладочных сообщений printf: отлаживать нужно чаще всего не сам программный код, а собранную структуру автоматического управления. Если кто-то слабо представляет себе, что это такое (структура), то вот простейшая структура бездатчикового векторного управления синхронным двигателем:

    Каждый квадратик – это иногда несколько формул, а иногда модуль на десяток-другой страниц кода. У модуля есть входы/выходы, а также некоторые переменные состояния (например, интегральная часть ПИ-регулятора и прочее). Также желающие могут посмотреть аналогичную структуру на странице википедии. Так как система управления замкнутая, то неправильная работа одного блока (или неправильная его настройка) приводит к неработоспособности всей структуры. И найти, где именно проблема – та еще задача.


    Итак, что же делать, как это отлаживать? Внешний осциллограф? Не поможет. Осциллограф, конечно, необходим для отладки некоторых чисто аппаратных проблем, но им можно лишь увидеть входные и выходные величины микроконтроллера, а сотни переменных внутри структуры останутся за кадром. Ну увидите вы, что ток фазы двигателя странно дергается, и странно дергается выходное напряжение инвертора. А почему – какой блок внутри ПО МК к этому приводит (или к этому приводит кривой двигатель или датчик положения или ещё что) – останется непонятным.

    Модель? Да, это хорошее подспорье. Чаще всего разработка сложных структур управления начинается с моделирования. В терминах ТАУ и в виде дифференциальных уравнений описывается объект управления, строится предполагаемая система регулирования (как на рисунке выше, например), а далее всё это реализуется… ну, кто в чем любит, но стандарт-де-факто – это Simulink Matlab. В нем можно «нарисовать» структуру вместе с моделью объекта управления, используя «рассыпуху» в виде интеграторов, сумматоров, переходных функций и т.п. Можно воспользоваться его пакетом по моделированию электрических цепей, где есть готовые IGBT ключи, электродвигатели, резисторы, конденсаторы и прочее, отдав на откуп программистам матлаба реализацию нарисованного в виде дифференциальных уравнений, а саму структуру управления нарисовать уже в виде «рассыпухи» самому. А еще можно написать все нужные блоки в матлабе на Си. Этот способ удобен тем, что отлаженный программный код в матлабе можно просто скопировать в микроконтроллер. Обычно этот этап всегда следует за «рисованием», когда структура системы управления после прикидочных исследовательских работ по моделированию более-менее сформировалась. Но зачастую параметры объекта априори неизвестны, или известны очень неточно – никогда еще софт, работающий в модели, не начинал также хорошо работать на объекте. Также нельзя заложить в модель «всё» – переходные процессы переключения транзисторов, насыщение магнитопровода, вихревые токи, ёмкостные связи, уплывание параметров от температуры и от экземпляра к экземпляру, помехи то здесь, то там… А иногда объект регулирования настолько сложен, что проще делать разработку структуры управления для него уже непосредственно на объекте.

    Например, когда мы делали систему управления для поддержания тока в дуге плавильной печи при помощи транзисторного источника напряжения, объект управления (дуга) был чем-то из разряда черного ящика. Мы нашли несколько моделей дуги в разных статьях, но они описывали внутренние процессы в плазме дуги, без ответа на наш «простой» вопрос – как надо задавать на дугу напряжение, чтобы ток оставался постоянным, и справится ли с этим обычный ПИ-регулятор тока? (если кому интересно – не справился, пришлось городить «огород высоких материй», но всё получилось).

    Также есть ряд продуктов, позволяющих «рисовать» программы непосредственно для микроконтроллеров. В том числе тот же Matlab умеет генерировать Си-код для МК именитых брендов на основе модели в Simulink. Якобы можно нарисовать и отладить нарисованную структуру системы управления на компьютере в модели, а потом загрузить в МК – и готово, поехали! И даже такие среды позволяют отлаживать нарисованные структуры управления прямо внутри МК, смотреть переменные и т.п., а на сайтах таких продуктов есть куча демо-проектов для самых сложных систем, «запрограммированных» таким образом. Но так как все реальные проекты до сих пор почему-то программируют «руками», то можно догадаться, что с «рисованием» что-то не так. Но тут даже сложно описать, что именно, когда не так – всё. Главный аргумент против – это отсутствие полного контроля над происходящим внутри МК. Вы нажимаете кнопку в такой среде «сделать хорошо» и надеетесь, что генератор кода сделает за вас всё остальное. Для каких-то простых систем, где производительности МК «за глаза», сроки разработки очень поджимают, а программировать на фирме, которая взялась за проект, никто не умеет… то да, наверное, можно попробовать «нарисовать» программу. Но если она не заработает как надо, или будет иметь какой-то очень специфический глюк, то отладить её уже не будет никакой возможности. А для сложной задачи, где даже при программировании руками с производительностью МК всегда проблемы, рисование не подходит просто по причине нехватки ресурсов – любой язык программирования, чем он более высокоуровневый (куда уж выше рисования), генерирует менее оптимальный машинный код. А низкоуровневые оптимизации, которые сделал бы программист на Си, такая система сделать не сможет (расчет блоков одной структуры с разным тактированием, использование закешированных значений синуса и косинуса, замена функций деления на умножение на заранее подготовленную величину, или совсем уж хитрые вещи типа таких и т.п.).

    Таким образом, приходится писать свой софт, и писать на Си. И отлаживать свой софт так или иначе надо, и надо на объекте. Наверное, к этому месту статьи все уже поняли, что отладить структуру управления можно только просмотром осциллограмм внутренних переменных, т.е. просмотром графиков во времени, как меняется та или иная переменная на Си – скажем, «выход вот того блока, пятого слева, одновременно с входами третьего справа». Получая картинки типа такой:


    И сделать это можно только средствами самого микроконтроллера. Нельзя просто взять и поставить внешний быстрый интерфейс связи и посылать «наверх» значение какой-то переменной, так быстро, как только можно, а уже в системе верхнего уровня строить график. Потому что ни один интерфейс связи МК не успеет сделать это с той частотой, с которой протекают регулируемые переходные процессы. А если успеет, то все ресурсы МК уйдут на обслуживание этого интерфейса связи. Поэтому делают так – записывают осциллограмму в оперативную память МК, просто в массив. Обычно много точек не надо – достаточно поймать нужный момент, когда именно записывать данные: возвести нужный триггер на старт записи. И тогда можно увидеть, что выдавали те или иные блоки системы управления в момент сбоя, как он развивался, что пытался сделать МК. Конечно, все переменные сразу не заосциллографировать – но на практике по нашему опыту хватает, скажем, четырех массивов по 256 точек каждый – эдакий четырехканальный осциллограф средствами МК. Если сбой работы оборудования происходит не раз в неделю, то отладить это не проблема – в одном опыте смотрим эти 4 переменных, в следующем заменяем половину на другие, смотрим снова… пока не найдется неправильно работающий блок, или пока не снимем всё, что происходит на всех блоках и не уйдем просматривать «отснятый материал», почесывая то место, кто чем думает…

    Чем же снимать такие осциллограммы? Какой софт это умеет? Через какой интерфейс связи это пересылать? Собственно, Texas Instruments потому и является лидером по производству motorcontrol микроконтроллеров, так как он сделал для этого всё, что надо: Code Composer Studio (их среда разработки) плюс режим реального времени МК. Режим реального времени – это когда через JTAG среда разработки может запрашивать и записывать данные в оперативной памяти МК без его остановки. Даже не просто без остановки, а без малейшего нарушения его работы. Этот режим есть во всех МК серии C2000, но для использования требуется дорогой и быстрый JTAG, который это поддерживает. Но кроме самого режима в МК должно быть что-то соответствующее и на обратной стороне кабеля: среда разработки Code Composer Studio «из коробки» умеет строить осциллограммы. Причем как в простейшем режиме, когда пользователь задает имя переменной Си и видит её изменение во времени на графике, а среда запрашивает данные с той частотой, с которой сможет (обычно хорошо, если герц 10), так и в режиме отображения массива в памяти в виде осциллограммы – т.е. как раз то, что описывалось выше. Таким образом, пользователь в МК делает ПО, которое запишет в массивы нужные осциллограммы, а Code Composer Studio через JTAG в реальном времени их скачает и покажет. При этом устройство может продолжать работать как ни в чем не бывало. Этот инструмент успешно используется уже больше десяти лет, и, собственно, такая идеология отладки (кажется, но могу ошибаться) и была предложена Texas. Во всех их демо-проектах есть модуль даталоггера (который записывает массивы осциллограмм) и в мануалах рассказывается, как им пользоваться. Кстати, здесь надо бросить камень в огород ARM. У них тоже есть режим реального времени, и на этой архитектуре есть МК, которые могут управлять электродвигателями. Однако ни в одной среде разработки мне не повстречалось функции построения графиков, даже если режим реального времени поддерживается. Например, в любимом всеми Keil даже нельзя на запущенном МК нормально поменять значение переменной – она постоянно обновляется, а вписываемое пользователем в окошко новое значение затирается… Не говоря уже о каких-то там графиках. Может быть кто-то в комментариях предложит работающий вариант? Или это «никому не надо», поэтому и не работает?

    Но с этим способом отладки, даже через Code Composer Studio, есть проблема. И эта проблема JTAG. Как было сказано, его разъем не всегда доступен, а чаще всего на запущенном оборудовании и не доступен вовсе. Да и, честно признаться, не очень комфортно сидеть в паре метров от мегаватного преобразователя, смотреть его осциллограммы работы, и очень сконцентрировано и сосредоточенно объезжать мышкой кнопку «стоп» микроконтроллера, вдруг по пути дрогнет палец? А вы знаете, как глючит тачпад при работе мощного ШИМ? А если сглючит среда? А если JTAG? Всё, бабах?

    Бабах обыкновенный

    Кроме того, осциллограммы в среде разработки отображаются в тех значениях, «как есть» на Си, без всякого масштабирования, на разных окнах графиков, без пользовательских единиц измерения (надо помнить, что на этом графике 0.342 это вольты, их надо умножить в уме на 540 чтобы получить физические единицы, а тут 1.2 это амперы с масштабом 800А). И неудобно, и страшно. А еще ведь не на всех МК и средах разработки можно смотреть осциллограммы! Вдруг у вас – не Texas? Поэтому мы решили изобрести другой путь.
    Собственно, если нам не нужна пошаговая отладка, то в чем проблема? Заменяем всё, что мы делаем через JTAG, на любой другой интерфейс связи и делаем свою оболочку верхнего уровня, которая строит графики так, как нам захочется. Profit!

    Так мы и сделали. Интерфейс связи мы выбрали CAN, протокол – CANopen. Почему? CAN – очень хороший промышленный интерфейс связи, помехоустойчивый, имеет аппаратный арбитраж, неразрушающий доступ к шине, аппаратное подтверждение посылок, и при этом – всего два провода и земля. Это лучше, чем все RSы, и менее монстровидное, чем Ethernet (который на motorcontrol МК скорее экзотика). Почему CANopen? Собственно, для CAN есть два распространенных протокола, это J1939 («автомобильный») и CANopen (станки, автоматика, датчики и прочее). Разницы между ними не так много, но CANopen нам показался более гибким, поэтому мы реализовали его в своем собственном стеке (драйвере). Кто не знает ничего о CANopen – основная его функция, как и многих протоколов для МК, это предоставление доступа к словарю объектов (списку переменных на Си МК) по определенному адресу. Делаться это в нем может двумя основными способами: сообщениями SDO вида запрос-ответ, а также сообщениями PDO в виде постоянной отправки значений по таймеру или по событию (настраивает верхний уровень, что посылать и когда). Также есть различные служебные сервисы типа аварийного сообщения (emergency), сообщения наличия устройств в сети (heartbeat) и т.п. Мастер в сети не обязателен: кто хочет – посылает, кому надо – принимает.

    Мы сделали стек CANopen не только для МК, но и для компьютера в виде библиотеки. И уже на её основе под Windows написали свою среду верхнего уровня. Сначала сделали просто доступ к переменным словаря объектов, чтобы можно было смотреть и менять настройки системы управления (а их, между прочим, сотни!), потом сделали отрисовку графиков путем периодического запроса параметра словаря объектов по сети, а потом добавили загрузку осциллограмм из массивов МК (причем выбор что осциллографировать производится также из переменных объектов словаря). Получили всё тоже самое, что дает отладка через JTAG. Или нет? Нет, потому что нужна была еще функция обновления ПО через CAN. Несмотря на наличие бутлоадера по CAN в МК Texas, мы решили сделать свой, так как стандартный был не CANopen и мог мешать работе других устройств в сети, пока мы шьем одно, также как и устройства могли мешать прошивке. Кроме того, там были проблемы с коррекцией ошибок и пропажей сообщений (хоть CAN и очень хорош, сбои иногда бывают, а прошивка – очень ответственная вещь, чтобы не сделать верификацию или повторную попытку отправки битого куска). Поэтому мы реализовали свой «программатор» по сети CAN, но в рамках протокола CANOpen. Вот теперь всё. Теперь мы смогли полностью отказаться от JTAG, используя его только один раз, для программирования нового МК.

    При этом такой подход открыл нам еще новые горизонты отладки, которые мы не видели раньше. Так как среду верхнего уровня мы делали с прицелом не только на программистов, но и на «обычных людей», мы сделали всем параметрам русскоязычные названия и сделали документацию наладчика по каждому параметру (документация не среды, а устройства, конечно). И это принесло пользу – теперь при наличии какой-то проблемы с приводом не обязательно «дёргать» разработчика – обслуживающий персонал заказчика в ряде случаев может самостоятельно выполнить диагностику проблем. Теперь мы можем получить е-меил вида «У нас привод стал странные звуки издавать иногда, я посмотрел осциллограмму датчика положения, вот что увидел (картинка). Проверил заземление экрана, оно отвалилось, я подпаял и все заработало как надо!». И совершенно не нужно никуда ехать или лететь! Второе «открытие» – если есть проблема, просим заказчика подключить компьютер к оборудованию и дать управление удаленным рабочим столом через интернет – запускаем свою среду верхнего уровня, сами все осциллографируем, правим параметры/прошивку/говорим что сломалось – profit! Опять не надо никуда ехать (главное, чтобы интернет на объекте был, хотя бы через сотовую сеть).

    С годами использования эта программа верхнего уровня обрастала мелкими функциями, как грибами (естественный процесс для софта, которым пользуются). Это и работа с журналом аварий устройства, и сохранение/загрузка слепка всех параметров в файл на компьютере, и конфигурирование панели управления устройством а-ля «пульт управления», и ведение логов сети в файл, и отдача трафика CAN сети по TCP/IP, и автоматическая множественная прошивка/параметрирование однотипных устройств в сети (если устройств десятки, то прошить все руками – лениво, нужен скрипт) и т.п.

    Ну а теперь немного рекламы. Сейчас это уже очень мощный инструмент (назвали мы его ни много ни мало – UniCON), который в некоторых задачах выглядит функциональнее, чем аналогичное ПО от именитых брендов по настройке их приводов и устройств. При этом он не привязан к конкретному устройству – можно настраивать хоть электропривод, хоть печку, хоть зарядное устройство – меняется только словарь объектов. Сейчас в нашей компании мы не видим возможности выполнить успешно новый сложный проект без наших CANopen средств отладки. Для работы с UniCON нужно всего лишь встроить в МК наш стек CANopen, после чего МК превращается в цифровую лабораторию. Уверены, все фирмы, которые делают серьезные системы управления на МК, имеют подобные средства отладки. Но мы предлагаем наше CANopen решение в виде самостоятельного программного продукта, так как оно выполнено универсально в плане независимости от функций устройства. На текущий момент мы реализовали стек CANopen с описанными расширенными функциями для МК Texas Instruments C2000, их ARM микроконтроллеров (например, семейства Concerto) и для К1921ВК01Т ОАО «НИИЭТ». Поэтому если вам требуется разработать систему управления электроприводом или другим сложным объектом управления, то мы приглашаем вас к сотрудничеству.



    P.S.
    В комментариях с нетерпением ждем критики вида «Так есть же *** – оно делает все то же самое и бесплатно». Так как мы долго искали аналогичные по функционалу средства отладки для ARM, но споткнулись даже об именитые среды разработки.

    UPD: Благодаря комментариям Indemsys, olekl и LeonidLenin нашлись функции построения графиков в средах разработки под ARM Keil и STMStudio при работе через SWD. Однако отображать массив данных из памяти МК в виде графика они не умеют, что как раз нужно для наблюдения быстротекущих процессов систем управления (но STMStudio умеет при помощи кеширования данных показывать графики с дискретизацией около 1мс). Также интересным выглядит инструмент FreeMaster от NXP — по описанию и назначению очень похож на нашу разработку UniCON, но со своими особенностями. Кроме того, у Segger J-Link есть свой инструмент для показа осциллограмм.

    Как запрограммировать / записать микроконтроллер

    Как запрограммировать микроконтроллер PIC18 на языке C. Пошаговое руководство (графические представления)

    Как запрограммировать микроконтроллер?

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

    В этом руководстве мы запрограммируем или напишем простой код для микроконтроллера PIC18 на C, где «C» является широко используемым компьютерным языком, и на данный момент это единственный поддерживаемый язык (кроме ассемблера) для 8- битовые и 16-битные микроконтроллеры PIC.

    PIC10, PIC12, PIC16, PIC18 – это серии 8-битных микроконтроллеров.

    PIC24, dsPIC30, dsPIC33 – это серия 16-битных MCU

    PIC32 – это серия 32-битных MCU.

    How to Program PIC18 Microcontroller in C. Step by Step Tutorial (Pictorial Views) How to Program PIC18 Microcontroller in C. Step by Step Tutorial (Pictorial Views)

    Как записать закодированную программу на микроконтроллер?

    Запись микроконтроллера означает передачу кодированной программы из компилятора (где компилятор – это программное обеспечение, в котором мы можем писать, анализировать, тестировать и отлаживать кодированную программу для микроконтроллера.) В память микроконтроллера.

    Кодировка или программа, написанная для микроконтроллера, обычно написана на языке ассемблера / C, и компилятор создает шестнадцатеричный файл, понятный для микроконтроллера. Шестнадцатеричный файл содержит специальные инструкции, которые нужно перенести в память микроконтроллера, а затем он работает в соответствии с данной инструкцией и программой.

    Когда мы запрограммировали микроконтроллер (мы обсудим пошаговое руководство о том, как программировать запись специального кода для микроконтроллера), нам нужно записать эту программу в память микроконтроллера.

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

    Программирование PIC18 Микроконтроллер на C.

    Microchip Technology является второй по величине отраслью производства электроники и ИС. Microchip Technology продает микроконтроллеры в 6-контактных корпусах (серия PIC10F2xx), 100-контактных корпусах (dsPIC33EP512MU810) и даже 144-контактных корпусах (некоторые устройства PIC32). Также есть много предыдущих серий, таких как PIC12, PIC16, PIC18.

    Введение целевого контроллера:

    Мы собираемся обсудить здесь серию PIC18. Общий микроконтроллер этой серии – PIC18f452.Этот контроллер представляет собой 8-разрядный микроконтроллер, имеющий 40 контактов, 32 КБ памяти программ, и он может работать до 40 МГц кристаллической частоты, поэтому этот контроллер подходит для многих приложений.

    Этот контроллер может потреблять ток до 25 мА, поэтому нет необходимости использовать транзистор для управления светодиодом и его подключения к другому оборудованию. Есть 3 внешних контакта прерывания и два 16-битных таймера, один 8-битный таймер. Этот контроллер оснащен модулем захвата и модулем компаратора. Этот контроллер имеет аналоговый цифровой преобразователь, поэтому нет необходимости подключать внешний АЦП к этому устройству.

    Этот контроллер также может иметь модули для связи с другим оборудованием, таким как модуль RS232, модуль I2C, 1-проводный модуль и параллельный подчиненный порт. Этот микроконтроллер представляет собой устройство, созданное с эстетической точки зрения, и подходит как для начинающих, так и для любителей, а также профессионалов для мини-и сложных электронных проектов.

    Введение в среду программирования:

    Средой программирования, которую мы будем использовать, является MikroC для PIC. Эта IDE полностью оснащена рядом встроенных библиотек и простым в использовании интерфейсом.Эта интегрированная среда разработки содержит множество калькуляторов, таких как шестнадцатеричное в двоичное и десятичное преобразование, что очень помогает в программировании.

    Размер этого программного обеспечения также очень мал по сравнению с другим программным обеспечением, поэтому его легко использовать и устанавливать. Синтаксис этого программного обеспечения немного отличается от MPLAB Software, но, будучи дизайнером, я предложу всем читателям использовать MikroC вместо MPLB, потому что он действительно прост для чтения синтаксиса и множества встроенных библиотек для использования.

    Это определенно сократит время программирования, и вам не придется создавать общие функции с нуля, такие как задержка, чтение и запись на ЖК-дисплее, протокол RS232 и многие другие.

    Обратите внимание, что MikroC не является бесплатным программным обеспечением, в то время как компилятор Microchip MPLAB X IDE и XC8 бесплатен и предлагает множество бесплатных библиотек.

    Давайте начнем с примера.

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

    Создание нового проекта в MikroC:

    Шаг 1:

    Дважды щелкните значок MikroC на рабочем столе или там, где установлено это программное обеспечение (как показано ниже).

    How to program a PIC18 microcontroller in C with MikroC? How to program a PIC18 microcontroller in C with MikroC? После загрузки программного обеспечения вы увидите это окно.

    How to program a PIC18 microcontroller? How to program a PIC18 microcontroller?

    Шаг 2:
    Теперь перейдите к кнопке «Проект» в правом верхнем углу и нажмите «Проект».

    How to burn and Program a microcontroller How to burn and Program a microcontroller

    Шаг 3:

    Теперь нажмите «Сейчас проект», и появится новое окно ниже.

    how to program a microcontroller in MikroC how to program a microcontroller in MikroC

    Шаг 4.

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

    После этого не обращайте внимания на остальные окна, а просто нажмите «Далее» на всех оставшихся окнах, которые появляются.
    Теперь появится окно ниже. Это ваша среда программирования, в этом окне вы должны написать код и скомпилировать его.

    Теперь у вас есть настройка программного обеспечения. Следующий шаг – написание кода.

    Написание кода для микроконтроллера PIC18:

    PIC18f452 поставляется с 5 портами. Четыре порта – 8 бит, а один порт – 4 бита. В этом уроке мы будем использовать 8-битный порт.Есть несколько вещей, которые вы должны иметь в виду при написании кода для PIC18. (Код указан ниже )

    Создание порта в качестве входа или выхода:

    Каждый порт имеет регистр TRISX, который определяет, что вы используете этот порт для входа или выхода. Где X может быть, A, B, C, D, E, F, например. TRISB.

    Для вывода вы должны поместить 0x00 в TRISB, а для ввода вы должны ввести 0xFF. но это не всегда так, потому что каждый вывод может быть независимо выбран в качестве входа или выхода.Вы можете написать 0x09 в TRISB, который выберет RB0 и RB3 для входов и остальные контакты для выходов.

    Функция задержки:

    В mikroC я выбрал библиотеку задержки, поэтому мне не нужно создавать здесь функции задержки, я могу просто использовать функцию Delay_ms (). В этой функции вы должны указать желаемую задержку в миллисекунды, если вы хотите задержку в 1000 миллисекунд, вы можете записать ее как Delay_ms (1000).

    Writing Code and program for PIC18 microcontroller Writing Code and program for PIC18 microcontroller

    Ее первый код битов PORT простого переключения.

      void main () {
    TRISB = 0x00;  // Определить как вывод 
    Пока (1)  // Бесконечный цикл 
    {
    PORTB = 0x00;
    Delay_ms (500);  // Задержка 500 миллисекунд 
    PORTB = 0xFF;
    Delay_ms (500);
    }
    }  

    Когда вы пишете этот код после этого, вы должны его скомпилировать.

    Нажмите на кнопку «build all», код будет скомпилирован, и в папке, в которой вы сохранили файл проекта, будет создан hex. toggle PORT bits Code for pic18 microcontroller toggle PORT bits Code for pic18 microcontroller

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

    Вот и все об этом первом уроке; следите за будущими сообщениями на эту тему.

    Похожие сообщения:

    .
    Как запрограммировать действительно дешевый микроконтроллер

    Ходят слухи о дешевом чипе, который изначально поддерживает USB, имеет набор инструментов с открытым исходным кодом и стоит четверть. Это не слухи: вы можете купить микроконтроллер CH552 прямо сейчас. Удивительно, но не так много людей выбирают этот дешевый чип для своего следующего проекта. Если нет оригинальных проектов, использующих этот чип, никто не собирается использовать этот чип. Поймай 22 и все такое.

    Как щедрый бог, [Аарон Кристофель] вернул вам рабочий пример программирования этого дешевого чипа и выполнения с ним чего-то полезного.Он мигает светодиодами, записывает данные на дисплей I2C и выполняет все, что вам нужно от микроконтроллера, который стоит несколько центов.

    CH552 и его друзья, маленький CH551 вплоть до CH559, содержат ядро ​​8051, где-то около 16 КБ флэш-памяти, чипы высокого класса имеют контроллер USB, есть SPI, PWM, I2C, и это стоит пенсы. В отличие от многих других чипов, вы можете найти SDK и наборы инструментов. Вы можете запрограммировать чип через USB. Ясно, что мы смотрим на что-то действительно классное, если кто-то напишет для него обертку Arduino.Мы еще не там, но мы рядом.

    Чтобы запрограммировать эти микросхемы, [Аарону] сначала пришлось подключить микроконтроллер к цепи. Это была всего лишь небольшая плата, резистор, несколько заглушек и USB-разъем. Вот и все, это все, что нужно. Это довольно стандартное ядро ​​8051, поэтому написание кода относительно просто. Загрузка осуществляется с помощью программного обеспечения WCHISPTool с опциями, доступными для вашего любимого варианта * nix.

    Но это становится лучше. Одной из главных особенностей CH552 является USB.Это означает, что нет дорогих или странных программистов, да, но это также означает, что CH552 может эмулировать устройство USB HID. CH552 может стать клавиатурой USB. Чтобы продемонстрировать это, [Aaron] запрограммировал плату CH552 (DE, вот Google Translatrix), загруженную сенсорными панелями и светодиодами, в качестве клавиатуры USB.

    Если вы не хотите паять одну из них самостоятельно, есть несколько поставщиков плат разработки CH554, и файлы для проектов [Aaron] доступны здесь. Посмотрите видео ниже, потому что это лучший урок по программированию и использованию некоторых очень интересных фишек, которые только появились на рынке.

    ,

    C ++ – Как программировать микроконтроллеры

    Переполнение стека
    1. Товары
    2. Клиенты
    3. Случаи использования
    1. Переполнение стека Публичные вопросы и ответы
    2. Команды Частные вопросы и ответы для вашей команды
    3. предприятие Частные вопросы и ответы для вашего предприятия
    4. работы Программирование и связанные с ним технические возможности карьерного роста
    5. Талант Нанимать технический талант
    6. реклама Связаться с разработчиками по всему миру

    Загрузка…

    .
    учебников по микроконтроллерам – станьте экспертом в программировании микроконтроллеров и цифровой электронике!

    *** Новый эксклюзивный учебник ***

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

    Учебное пособие по микроконтроллеру

    для начинающих

    Если вы новичок и хотите получить знания о микроконтроллерах, вы можете найти что этот учебник идеально подходит.Этот учебник исследует различные использование и особенности популярного микроконтроллера AVR Atmega32. Обучающие шоу реальные программы пишутся и объясняются при разработке схем. Базовый и средний Концепции и использование программирования также предоставляются по пути. Через много Например, вы можете быть экспертом по встроенным системам в кратчайшие сроки.

    Микроконтроллер – Введение

    Изучите основные функции микроконтроллера AVR Atmega32 и некоторую информацию об использовании каждого контакта.Программирование чипа (получение программы на чипе) также кратко объяснено.

    Микроконтроллер 1

    Мы пачкаем руки и создаем удобный маленький интерфейс для ключа программиста к соответствующим контактам микроконтроллера.

    MCU Programmer 2

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

    MCU WinAVR Установить

    Драйвер и интерфейс готовы, но для написания программ и передачи их в микроконтроллер необходима среда программирования. В этом руководстве мы создали среду программирования AVR-GCC, которая называется winavr.

    MCU добавить светодиод и проверить

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

    Первая программа MCU

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

    MCU светодиод мигает

    Мы углубимся в программирование микроконтроллеров и заставим светодиод мигать.

    Установка Atmel Studio 6

    Узнайте, как установить Atmel Studio 6 и настроить функции программирования микроконтроллера.

    MCU Добавить кнопку

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

    Кнопка Debouncing

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

    Программное обеспечение Debounce

    Мы продолжаем работу с кнопкой «debouncing», но на этот раз у нас есть программа микроконтроллера, которая выполняет функцию «debouncing» в программном обеспечении.

    Кнопка игры

    Теперь мы выводим светодиоды и кнопки на совершенно новый уровень и создаем игру с помощью микроконтроллера.

    Создание библиотеки кнопок

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

    Таймеры Счетчики Базовые

    тик, тук, тик тук.Узнайте, как микроконтроллер считает и раз. Узнайте, как запрограммировать микроконтроллер для управления таймером и счетчиком.

    Введение в прерывания

    Это где перерывы хорошие манеры и даже желательно. Мы прерываем подпрограммы из событий в микроконтроллере и создаем программы микроконтроллера для обработки событий.

    Интерфейс LCD

    Отличный способ увидеть, что происходит, жидкокристаллические дисплеи обеспечивают информативный способ вывода данных с микроконтроллера.

    Первая ЖК-программа

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

    ЖК-дисплей и струны

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

    Цифры на ЖК-дисплее

    Отображение чисел на ЖК-дисплее, вероятно, является наиболее полезным способом использования ЖК-дисплея и просмотра того, что происходит в микроконтроллере. Этот урок покажет, как преобразовать целую переменную или любое другое число в строку, чтобы мы могли отобразить ее на ЖК-дисплее.

    Разделение ЖК-кода

    Пришло время снять загромождение кода main.c и получить все функции LCD в их собственную библиотеку, чтобы main.c был более читабельным. Это сделает программирование для микроконтроллера намного веселее.

    Функция для отображения целых чисел

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

    Источники энергии

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

    Изготовление разъемов

    Проверьте этот удобный способ подключения периферийных устройств к микроконтроллеру с помощью заголовков.

    потенциометры

    Вы действительно знаете, как работает потенциометр? Вы знаете, как сделать это супер крутой делитель напряжения? Узнайте, как использовать потенциометр для получения переменного напряжения, чтобы его можно было использовать в АЦП (аналого-цифровой преобразователь) на микроконтроллере.

    Введение в АЦП

    Узнайте, как работает АЦП (аналого-цифровой преобразователь), и несколько советов о том, как сохранить аналоговый сигнал и свой микроконтроллер.

    ADC – Первая программа

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

    АЦП и 10-бит

    Увеличьте разрешение АЦП микроконтроллера, захватив 10-битный результат (результат, который будет в диапазоне 0-1023).

    Акселерометры / АЦП

    Познакомьтесь с акселерометрами и узнайте, как конкретная разновидность связана с микроконтроллером.

    Измерить шум АЦП

    Вы постоянно получаете шум АЦП, и это сводит вас с ума? Из этого туториала вы узнаете, как измерить этот шум, и увидите падение измерений при применении методов шумоподавления к сигналу и микроконтроллеру.

    АЦП несколько каналов

    Итак, одного датчика или устройства, подключенного к АЦП микроконтроллера, недостаточно? Что ж, посмотрим, как использовать другие каналы АЦП.

    Введение в Хобби Сервос

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

    Введение в ШИМ

    Изучите детали ШИМ (широтно-импульсная модуляция) и посмотрите, что нам нужно знать, чтобы мы могли начать вывод ШИМ-сигналов с микроконтроллера на различные устройства.

    Управление сервоприводом с помощью ШИМ

    Теперь, когда мы поняли некоторые концепции ШИМ, давайте управлять сервоприводом с микроконтроллера! Мы погрузимся в суть настоящего понимания ШИМ и того, как ШИМ сможет контролировать рупор хобби-сервопривода.

    UART и USART Подробности

    Использование микроконтроллера для связи с функциями UART и USART.

    UART One Way Comm.

    Использование UART для связи от передающего микроконтроллера к принимающему микроконтроллеру.

    Программирование I2C (Эксклюзив)

    Получите подробные инструкции о том, как кодировать I2C / TWI (двухпроводной интерфейс) с помощью микроконтроллера Atmega 324p.В этом эксклюзивном видео мы будем общаться с акселератором ADXL.

    ,

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *