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

Содержание

____________________________________________________________________

Нам нужен бесконечный цикл. Помещаем наши строчки        PORTC = 0;    __delay_cycles(4000000);    PORTC = 255;      __delay_cycles(4000000);внутрь бесконечного цикла, и вот что в итоге должно получиться://первая прога на Си для  AVR#include <ioavr.h>#include <intrinsics.h>int main(void){  DDRC = 255;  while(1){    PORTC = 0;    __delay_cycles(4000000);    PORTC = 255;      __delay_cycles(4000000);  }  return 0;}   Если у вас другой результат – пройдитесь снова по тексту. Может, я что-то полохо объяснил, может, вы что-то плохо поняли.         Кликаем Make на  панели с кнопками (можно нажать F7). Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages, в котором будет написано:…..Total number of errors: 0Total number of warnings: 1   Все прошло без ошибок, но компилер выдал warning — statement is unreachable. Ничего страшного – он просто сообщает нам, что функция main() никогда не возвратит значение. Просто у нас в программе бесконечный цикл и микроконтроллер при работе никогда не дойдет до строчки return 0.   Ищем папку проекта на жестком диске. Там, в директории Release лежит файл прошивки led.hex. Грузим в микроконтроллер… Светодиод заморгал? Отлично. А теперь легко проверить правильно ли работает наша программа. Берем механические часы и смотрим, моргает ли светодиод в такт с секундной стрелкой. У меня моргает, а у вас?

Оживляем гексапода. Часть первая

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

Устройство гексапода

На текущий момент в качестве основного контроллера используется плата UNO R3 с Wi-Fi ESP8266. По сути эта плата с двумя контроллерами на борту, взаимодействующих между собой через UART-интерфейс.
Несмотря на то, что Uno имеет довольно ограниченный объем вычислительных ресурсов, ее достаточно чтобы научить робота выполнять базовые команды:

  • движение по прямой с заданной скоростью и продолжительностью
  • круговое движение влево или вправо (разворот на месте)
  • принимать заданные положения конечностей

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

The Introduction to Programmable Logic Controllers for Beginners

With so many books and courses online that offer training in PLC programming, new learners/students, plant operators, technicians and engineers aspiring to learn PLCs may get confused where to get started. That is the reason why I came up with this book to help new PLC learners build good foundational knowledge before they embark on a serious PLC programming training. This book starts with a background into Relay control systems to help you appreciate why industries changed their control systems from Relays to PLCs. If you can understand how Relay systems was and is still used in industrial controls, it becomes easier for you to learn PLC systems.

EBlink — GDB сервер для ARM Cortex-M микроконтроллеров

Из песочницы

В сети не много информации о появившемся несколько лет назад GDB сервере EBlink. Этим постом постараюсь исправить ситуацию.

EBlink поддерживает большинство моделей микроконтроллеров STM32 (серии F0, F1, F2, F3, F4, F7, H7, L0, L1, L4, G0 и G4), а также EFR32.

Он интересен тем что поддерживает скрипты на Си-подобном языке Squirrel которые участвуют в процессе прошивки и отладки микроконтроллеров. Это позволяет отредактировав скрипты добавить новые микроконтроллеры или изменить работу с существующими не вмешиваясь в исходный код EBlink. Могу предположить таким образом возможно добавить микроконтроллеры с ядром ARM Cormex-M других производителей, например компании Миландр но это не было проверено.

Язык Си и гарвардская архитектура

8-битные микроконтроллеры AVR производства ранее Atmel, а ныне Microchip, популярные, в частности, из-за того, что они лежат в основе Arduino, построены по гарвардской архитектуре, то есть код и данные расположены в разных адресных пространствах. Официальная документация содержит примеры кода на двух языках: ассемблере и Си. Ранее производитель предлагал бесплатную интегрированную среду разработки, поддерживающую только ассемблер. А как же те, кто хотел бы программировать на Си, а то и Си++? Существовали платные решения, например, IAR AVR и CodeVisionAVR. Лично я им никогда не пользовался, ведь, когда я начал программировать AVR в 2008-м году, уже был бесплатный WinAVR с возможностью интеграции с AVR Studio 4, а в нынешнюю Atmel Studio 7 он просто включён.

Проект WinAVR основан на компиляторе GNU GCC, который разрабатывался для архитектуры фон Неймана, подразумевающей единое адресное пространство для кода и данных. При адаптации GCC к AVR был применён следующий костыль: под код (ПЗУ, flash) отводятся адреса с 0 по 0x007fffff, а под данные (ОЗУ, SRAM) — с 0x00800100 по 0x0080ffff. Были и всякие другие хитрости, например, адреса с 0x00800000 по 0x008000ff представляли регистры, к которым можно обращаться теми же опкодами, что и к ОЗУ. В принципе, если вы простой программист, наподобие начинающего ардуинщика, а не хакер, смешивающий в одной прошивке ассемблер и Си/Си++, вам не нужно всё это знать.

Помимо собственно компилятора WinAVR включает различные библиотеки (часть стандартной библиотеки языка Си и специфичные для AVR модули) в виде проекта AVR Libc. Последняя версия, 2.0.0, выпущена почти три года назад, а документация доступна не только на сайте самого проекта, но и на сайте производителя микроконтроллеров. Есть и неофициальные русские переводы.

Программирование игры для embedded-устройства на ESP32: накопитель, аккумулятор, звук

Перевод

Начало: система сборки, ввод, дисплей.

Часть 4: накопитель

Odroid Go имеет слот карты MicroSD, который будет полезен для загрузки ресурсов (спрайтов, звуковых файлов, шрифтов), а возможно, даже для сохранения состояния игры.
Устройство чтения карт подключено по SPI, но IDF упрощает взаимодействие с SD-картой благодаря абстрагированию вызовов SPI и использованию стандартных функций POSIX наподобие fopen, fread и fwrite. В основе всего этого лежит библиотека FatFs, поэтому SD-карта должна быть отформатированной в стандартом формате FAT.
Она подключена к той же шине SPI, что и ЖК-дисплей, но использует другую линию выбора чипа. Когда нам нужно выполнить чтение или запись на SD-карту (а такое случается не очень часто), драйвер SPI будет переключать сигнал CS с дисплея на устройство чтения SD-карты, а затем выполнять операцию. Это значит, что во время отправки данных на дисплей мы не можем выполнять никаких операций с SD-картой, и наоборот.
На данный момент мы выполняем всё в одном потоке и используем блокирующую передачу по SPI на дисплей, поэтому одновременных транзакций с SD-картой и с ЖК-дисплеем быть не может. В любом случае, есть большая вероятность того, мы будем загружать все ресурсы во время запуска.

Уязвимости real-time операционок

Перевод

В июле 2019 года в операционной системе реального времени VxWorks, на которой работают более 2 миллиардов устройств, найдены критические уязвимости. На Хабре про это не написали ни слова, хотя это важная новость в области промышленного программирования, RTOS и automotive.

Wind River VxWorks используется для ежедневной работы множества устройств интернета вещей, таких как веб-камеры, сетевые коммутаторы, роутеры, файрволлы, VOIP телефоны, принтеры и устройства видеосвязи, а также в светофорах.
Кроме того VxWorks используется в safety-critical системах, включая SCADA-системы, поезда, лифты, промышленные контроллеры, мониторы состояния пациентов, полетные Wi-Fi системы и даже марсоходы.
Специалисты по безопасности обнаружили почти дюжину уязвимостей нулевого дня в VxWorks, одной из наиболее широко используемых операционных систем реального времени для встроенных устройств. На VxWorks работают более двух миллиардов устройств в аэрокосмической, оборонной, промышленной, медицинской, бытовой, сетевой и других критически важных областях.
Согласно новому отчету Armis, совокупность уязвимостей называют URGENT/11, так как в данной группе 11 элементов, 6 из которых критически важны и уязвимы к разрушительным кибератакам.

1.1. Среда разработки

При выборе среды разработки можно натолкнутся на «не пробиваемую стену» множества программных оболочек для программирования на разных языках программирования. Но учитывая направление на микроконтроллеры круг поиска сужается до сред разработки адаптированных под конкретный вид микроконтроллеров семейства AVR фирмы Atmel. Кроме того среда разработки язык программирования C.

Из множества вариантов рассмотрим среду разработки СodeBlocks. Будем использовать оригинальную версию СodeBlocks с сайта разработчиков www.codeblocks.org последней версии, на момент написания это версия 16.01. Данная среда разработки интересна наличием версий под популярные операционные системы Linux, Windows и Mac OS.

Вкратце рассмотрим установку под Windows. Скачав файл codeblocks-16.01-setup.exe запускаем его.

Ознакомимся с лицензией и принимаем ее.

Устанавливаем все компоненты без изменений

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

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

Получаем установленную среду разработки Code::Blocks.

Просто о NModbus (RTU)

Tutorial

Данная статья рассчитана на новичков.

Теория

Modbus — коммуникационный протокол, основанный на архитектуре ведущий-ведомый (master-slave). Использует для передачи данных интерфейсы RS-485, RS-422, RS-232, а также Ethernet сети TCP/IP. NModbus – большая библиотека на C#, включающая в себя реализацию всех режимов работы с протоколом. Модель реализации классов этой библиотеки позволяет работать с любым Modbus-устройством, но только с одним, поскольку классы библиотеки инкапсулируют в себе порт, не позволяя реализовать синхронизацию между несколькими Modbus-объектами. Данный протокол достаточно популярен при разработке разной периферии для умного дома, а так же интернета вещей.
Итак, для того, чтобы управлять чем-либо, нам необходимо знать, что и куда отправлять. Значит нам нужна карта регистра.
Уточню, что ячейки регистра бывают:
1. Только для чтения
2. Для чтения и записи
3. Только для записи(подтверждение записи допустимо выдавать кодом ошибки)
Самая простая карта, выглядит примерно таким образом:
Так же, там присутствуют разные пояснения, о том например, какое максимальное/минимальное значение может быть передано по адресу и тд.

Уличные часы изнутри, а если посложнее?

Невзирая на «прекрасные» отзывы «теоретиков» — продолжаю «цикл» о внутреннем устройстве часов светодиодных уличных, со стороны «практики».
В случае, когда корпус прямоугольной формы и дисплей представляет собою, по сути, всего-то четыре цифры = то что там может быть сложного? Всегда имеется стремление «к чему-то большему». Но вот если корпус более сложной формы, то тут не только более трудоёмкий процесс непосредственно изготовления циферблата и корпуса, нужнА «изюминка»!
Некоторое время тому назад возникла возможность изготовить часы с многогранной кромкой, напоминающей по форме «орден». Для ещё большей «необычности» — добавил такую «хитрость», как секундные метки, набегающие вкруговую по кромке. Выглядит очень необычно и эффектно!

Отладка и программирование микроконтроллеров stm32f303, atmega328 через любой интерфейс, как через jtag

Данная статья посвящена моему первому open source проекту “repl”(ссылка на репозиторий внизу). Идея данного проекта заключается в том, чтоб позволить программисту микроконтроллеров отлаживать программу в микроконтроллере через любой его интерфейс, при этом чтобы отладка не сильно отличалась от отладки через jtag интерфейс. Была возможность остановки программы, установки точек останова, просмотра регистров, памяти, по инструкционной отладки программы.
Первое что приходит на ум это создать 2х приложение, один из потоков которого отвечает за интерфейс отладки, другой за программу пользователя, что я и сделал. Переключение между потоками осуществляется по таймеру, каждый поток имеет свой стек. Кучу я решил не использовать для написания интерфейса отладки т.к. их необходимо использовать 2 разных, либо при работе с кучей постоянно переключаться на один поток.
Первая идея для реализации по инструкционной отладки, была сократить время между прерываниями таймера ровно настолько чтоб могла исполниться только 1 инструкция. Данный вариант показал свою идеальную работу на микроконтроллере Atmega328p, дело в том, что минимальное время между прерываниями для Atmega составляет 1 такт процессора, любая инструкция независимо от количества тактов нужного для ее выполнения всегда завершиться если ее выполнение началось.

Buck-boost преобразователь с цифровым управлением на STM32F334 в режиме CC/CV

Наиболее популярные топологии dc/dc преобразователей buck и boost имеют существенное ограничение: топология buck может лишь понижать входное напряжение, а топология boost только повышает его. Однако бывают задачи, когда диапазон входного напряжения требует одновременно работы и на повышение и на понижение, например, мы имеем вход 3…15В, а на выходе необходимо получить стабилизированные 12В. Знакомая ситуация?

Тут возможны 2 решения:

  • С помощью преобразователя boost повысить входное напряжение из 3…15В до стабильных 15В на выходе, а затем уже с помощью топологии buck понизить напряжение до требуемых 12В;
  • Применить топологию buck-boost, которая позволяет оптимально решить данную задачу.

Очевидным минусом первого способа является необходимость применять 2 дросселя, увеличенное количество конденсаторов и не самый оптимальный режим работы, а значит более низкий КПД. Buck-boost топология лишена данных недостатков, поэтому сегодня рассказ пойдет о ней. Чтобы было интересно, я решил не брать какой-то готовый контроллер и реализовал dc/dc преобразователь с цифровым управлением на базе STM32F334C8T6.

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

Микроконтроллеры для начинающих + CD

Микроконтроллеры для начинающих. Рассмотрено программирование микроконтроллеров на примере PIC16F876A компании Microchip. Подробно описаны основные команды языка ассемблер, а также среда разработки MPLAB. Показано программирование с помощью отладчика-программатора ICD 2, а также через последовательный интерфейс. На практических примерах рассмотрено управление светодиодами и дисплеем, представление аналоговых сигналов в цифровой форме, сохранение/запись данных во внешнюю EEPROM-память, управление выходами микроконтроллера с помощью ИК-пульта дистанционного управления и др. На компакт-диске приведены примеры программ, чертеж для изготовления монтажной платы, электрические схемы, техническая документация, справочная информация и программное обеспечение.

Заметки обо всем. Простые и опасные источники питания

О чем эта статья

В этой статье рассказано о принципах построения простейших бестрансформаторных источников питания.Тема не новая, но, как показал опыт, не всем известная и понятная. И даже, некоторым, интересная.
Прошу желающих и интересующихся читать, критиковать, уточнять и дополнять на почту shiotiny@yandex.ru или на мой сайт в раздел «Контакты».

Вступление

Не так давно один мой знакомый влез пальцами в некую схему, которую собирался починить (проводок отвалился — так что просто припаять его надо было на место). И его ударило током. Не сильно ударило, но ему хватило, чтобы удивиться: «как так — тут микроконтроллер стоит, что тут может стукнуть? Он же от 5 вольт питается!».
Его удивление быстро разъяснилось: схема оказалась с бестрансформаторным питанием и без гальванической развязки от сети.
Далее последовали вопросы уже в мою сторону. Сводились они к двум вещам: «А чё? Так можно делать?!» и «А как оно работает?».
Хотя я и не считаю себя экспертом в электронике, но делать подобные блоки питания мне приходилось. Так что пришлось взять ручку и листок и объяснить как оно работает. Благо это совсем не сложно.
Возможно, что и вам покажется интересной тема «бестрансформаторных» источников питания или, сокращённо, БИП. Кому-то для общего развития, а кому-то и для практического применения.

__________________синтаксис цикла while_____________________________

while(condition){             statement1;     statement2;     statement3;}while – имеет условие выполнения (condition), оно записано в скобках () и тело цикла, оно заключено между фигурными скобками {}. В качестве условия цикла может выступать переменная, константа, выражение или функция,  возвращающая значение. Перед каждым выполнением цикла происходит проверка условия, если условие истинно, цикл выполняется, если условие ложно, цикл не выполняется. Любое ненулевое значение в скобках оператор воспримет как истину, и цикл будет выполняться.            while(1){    //этот цикл будет выполняться бесконечно     statement1;     statement2;     statement3;}

_____________________________________________________________________

   Мы хотим, чтобы светодиод моргал с частотой видимой нашему глазу. Это единицы, десятки герц. Допустим, мы выбрали 1 Гц. Мой микроконтроллер работает на частоте 8 МГц, длительность одного такта =1/8000000 Гц = 125 нс. Сигнал частотой 1 Гц имеет период повторения 1 c. Светодиод будет гореть только половину периода — 0,5с. Делим 0,5 с на 125 нс и получаем искомое число тактов – 4000000. Это число укладывается в диапазон типа unsigned long int. Следующая строчка нашей программы – вызов функции:__delay_cycles(4000000);Далее – гасим светодиод и снова вызываем функцию задержки:PORTC = 255;__delay_cycles(4000000);5 шаг алгоритма – вернуться на шаг 2. По сути дела нам нужно повторить кусок программы, зациклить его. Для этих целей в Си существуют три типа циклов: for, while и do. Мы используем while.

Критические параметры

Следующим шагом является определение ваших наиболее важных и специфических требований. Многие виды функциональных возможностей обработки и периферийных устройств будут доступны практически в любом современном микроконтроллере. Например, вам не нужно будет искать MCU, который предлагает базовую последовательную связь, тактовые частоты выше 10 МГц, достаточное количество флеш-памяти и оперативной памяти, внутренний генератор, таймеры общего назначения или встроенный модуль отладки (они часто используют интерфейс JTAG).

В следующих подразделах приведены некоторые примеры «менее стандартных» функций, которые помогут вам сузить список микроконтроллеров, которые могут подходить для заданного проекта.

Цифро-аналоговый преобразователь (ЦАП)

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

Синусоида, сгенерированная 12-разрядным ЦАП, встроенным в микроконтроллер SAM4S от Atmel.

Аналого-цифровой преобразователь (АЦП)

Я только что сказал, что АЦП распространены, и это правда, но стоит отметить, что производительность многих микроконтроллерных АЦП находится в диапазоне от низкого до среднего уровня. Если вам нужен АЦП с необычно высоким разрешением или необычно высокой частотой дискретизации, вам придется сделать это приоритетом в процессе выбора. Несколько лет назад я оказался в подобной ситуации, и, если я правильно помню, ничто не могло сравниться с C8051F060 от Silicon Labs (у него есть два встроенных АЦП, которые могут выполнять 16-разрядное преобразование со скоростью один миллион выборок в секунду).

Тактовая частота

Если вам нужен микроконтроллер, который более совместим с интенсивными вычислительными функциями DSP (цифрового сигнального процессора), вам нужно отдать приоритет устройствам, которые поддерживают высокие частоты процессора. У Silicon Labs есть два 8-разрядных семейства, работающих на частоте 100 МГц, а у STMicroelectronics и Microchip есть высокопроизводительные 32-разрядные микроконтроллеры, работающие на частоте 120 МГц.

Универсальная последовательная шина (USB)

Интерфейс USB является доминирующей формой последовательной связи. Я обнаружил, что это очень эффективный способ передачи данных между встраиваемым устройством и компьютером, и в контексте бытовой электроники он незаменим. Если вы ищете компактный, простой метод включения USB соединения в вашу систему, я рекомендую вам сосредоточиться на микроконтроллерах, которые включают в себя USB модуль. Я использовал EFM8 Universal Bee от Silicon Labs, а Microchip предлагает 8-разрядные, 16-разрядные и 32-разрядные USB микроконтроллеры.

Емкостной датчик прикосновения

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

Интерфейс на емкостных датчиках на базе микроконтроллера MSP430 от Texas Instruments

Знания

От пустых слов перейдём к реальным требованиям. «MustKnow» в программировании микроконтроллеров — язык C/C++. Да, мировые тенденции сейчас указывают на переход на более совершенные или хотя бы простые языки (вспомните Arduino или D). Но это будущее довольно отдалённое, закладывать путь в него можно разве что сегодняшним школьникам младших классов.

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

В остальном довольно общая компьютерная наука: протоколы передачи, простейшее знание электроники и схемотехники (хотя бы принципы работы АЦП/ЦАП, работать с ключами, питанием и пр.), умение читать (и понимать) техническую документацию на английском языке. Но главное — не работать по принципу “научного тыка”, в противном случае ваши микроконтроллеры рискуют превратиться в “камни”.

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

Выбор языка программирования и среды разработки для программирования

Честно говоря, выбор языка программирования и среды разработки вопрос очень ответственный, навязывать кому-то свои предпочтения и что-то советовать дело довольно-таки трудное.
Давайте попробуем подойти к этому выбору не предвзято, чисто с практической стороны.
1. Существует два основных языка программирования микроконтроллеров — Ассемблер (язык низкого уровня) и Си (язык высокого уровня).
Если мы хотим программировать микроконтроллеры используя полностью все их возможности (а мы это хотим), то необходимо изучать эти два языка.
2. Среда разработки для программирования микроконтроллеров.
Тут выбор большой и очень много мнений. Поэтому можно сказать: «Каждая лягушка хвалит свое болото». Мне, к примеру, очень нравится малораспространенная графическая среда разработки «Algorithm Builder», и «квакать» о ее преимуществах перед другими программами я могу очень долго. Но будем делать выбор, как было сказано выше, не предвзято и практично.
Микроконтроллеры AVR выпускает фирма Atmel, она же предоставляет в наше распоряжение бесплатную среду программирования «Atmel Studio» (бывшая AVR Studio). На ней мы и остановимся.
Интегральная среда разработки (IDE — Integrated development environment) Atmel Studio позволит нам:
— писать программы как на Ассемблере, так и на Си (Почему на Си. Программа «Atmel Studio» позволяет писать программы на трех языках (О чем мы и погорим в первой статье), но есть одно но: программы на Си++ мы рассматривать не будем, по одной причине, и в следующей статье я расскажу об этом
— отладить программу
— перевести программу в машинный код (откомпилировать)
— записать программу в микроконтроллер

Все, выбор мы сделали:


Теперь осталось выполнить два пункта:
1. Обзавестись каким-нибудь стартовым набором (для начала хватит и микроконтроллера ATmega8, нескольких светодиодов, пары кнопок и сопротивлений к ним).
2. Установить (именно установить, а не скачать, и с регистрацией) с официального сайта Atmel (http://www.atmel.com/ru/) программу Atmel Studio.
Программировать микроконтроллеры мы будем с использованием программатора USBASP.
Отдельной статьи по Atmel Studio я писать не буду, будем изучать ее постепенно, по мере надобности и в связке со статьями по устройству и программированию микроконтроллеров.

3. Я добавил в набор очень нужную вещь, она Вам в дальнйшем очень пригодится — USB-TTL преобразователь (конвертер). Почему пригодится:
— русифицируя программу мы установили «Visual Studio-2015», кто не русифицировал программу — установите последнюю версию «Visual Studio», мы не только будем изучать базовую программу «Atmel Studio». К сожалению, на сегодняшний день только программа 2015 года позволяет перейти на русский язык в «Atmel Studio», но а мы с Вами, в «Visual Studio», будем создавать оболочки для работу с МК.

Следующие статьи

Основы программирования микроконтроллеров AVRУстройство и программирование микроконтроллеров AVR в среде Atmel Studio на языках Ассемблер и Си
Published by: Мир микроконтроллеров

Date Published: 10/01/2016

Магда Ю.С. Микроконтроллеры PIC: архитектура и программирование

Введение

Системы управления и контроля на однокристальных микроконтроллерах в настоящее время используются практически во всех сферах человеческой деятельности, причем каждый день появляются все новые и новые области применения таких систем. В последнее время, в связи с бурным развитием электроники расширились возможности и самих микроконтроллеров, позволяющих выполнять многие задачи, ранее недоступные для реализации, такие, например, как обработка и синтез аналоговых аудио- и видеосигналов. Одним из наиболее популярных семейств микроконтроллеров являются устройства, выпускаемые фирмой Microchip и известные под аббревиатурой PIC. В последние годы были разработаны и запущены в производство 16- и 32-битные модели, позволившие существенно расширить области применения систем на базе микроконтроллеров PIC. Для облегчения миграции от 8- к 16-битным устройствам фирма Microchip обеспечила максимальный уровень совместимости аппаратно-программных функций этих микроконтроллеров.

Эта книга посвящена практическим аспектам разработки систем на базе 16-битных микроконтроллеров PIC24F. В книге приводятся основные сведения по аппаратно-программной архитектуре микроконтроллеров PIC24F, а также многочисленные проекты систем обработки данных на базе микроконтроллеров этого семейства. Все примеры, приведенные в книге, разработаны и протестированы на плате «Explorer 16 Development Board» производства Microchip с установленным микроконтроллером PIC24FJ128GA010. Тем не менее, для тестирования приведенных примеров и разработки собственных проектов читатели могут использовать и более дешевую систему начального уровня «MPLAB Starter Kit for PIC24F» той же фирмы или отладочные платы других фирм. Для разработки программного обеспечения проектов, представленных в книге, использовалась интегрированная среда разработки MPLAB IDE версии 8.00 и бесплатная студенческая версия компилятора языка Си, известного под названием MPLAB C для PIC24. Кроме того, при изучении системы команд микроконтроллера PIC24F, а также при анализе процесса отладки некоторых программ на языке Си используется довольно эффективный симулятор/отладчик MPLAB SIM.

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

Должностные обязанности

В первую очередь программист микроконтроллеров обязан в совершенстве знать языки программирования С/С++ и ассемблер.

К ключевым функциям специалиста, работа которого связана с контроллерами, относят:

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

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

Вывод текста на OLED дисплей с контроллером SH1106 по шине SPI через библиотеку HAL

Из песочницы

Здравствуйте, уважаемые читатели. В своих разработках на микроконтроллерах STM32, для вывода осмысленной информации, я пользуюсь OLED дисплеями на чипе SSD1306. В последний раз пришел ко мне 1,3″ SPI модель по демократичной цене — около 200руб. Первое, что бросилось в глаза — надпись SH1106 вместо SSD1306, поиск в интернете прояснил, что это практически тоже самое, только оставлен единственный страничный режим адресации, да и тот ограничен одной строкой. Как с ним работать я и постараюсь объяснить вам в этой публикации.

Где-то с год назад мне стало не хватать возможностей синей пилюли (STM32F103) и была заказана китайская плата разработчика STM32F407VE. Для отладки, часто, двух светодиодов не хватает, поэтому в каждом проекте для вывода информации подключаю OLED SSD1306 по шине I2C, в который влюбился еще со времен Arduino. Так как графику я на него не вывожу, в основном числа и текст, а размер готовых библиотек и их содержание поражал мое воображение, была написана небольшая библиотечка, которую я немного адаптировал под SH1106 и хочу поделится с вами процессом ее написания. Дисплей приехал 7pin SPI:

Плата разработчика у меня такая, но ничего вам не помешает подключить к другой, хоть на STM3F103, для чего HAL и был придуман (разве не так ?):

Оцените статью:
Оставить комментарий