Сид катцен. pic микроконтроллеры. все что вам необходимо знать

Где применяется

Благодаря своей универсальности PIC-контроллер может быть применён практически где угодно. Сами микроконтроллеры можно встретить в холодильниках, телевизорах, стиральных машинках. Но линейка продукции РІС имеет ту особенность, что схемы на PIC-контроллерах популярны среди радиолюбителей и робототехников-самоучек. С их помощью можно легко настроить работу узла или всего приспособления. Способствует такой популярности разумная цена, легкость программирования и значительное количество учебного материала.

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

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

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

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

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

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

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

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

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

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

32-битные микроконтроллеры

Отличительные черты семейства 32-разрядных микроконтроллеров PIC32:

  • разрядность: 32 бита;
  • ядро: MIPS32 M4K;
  • частота тактирования ядра: до 120 МГц (для серии MX) и до 200 МГц (для серии MZ);
  • выполнение большинства команд за 1 такт генератора;
  • производительность: 1.53 Dhrystone MIPS/МГц;
  • порты ввода-вывода относятся к основному частотному диапазону, таким образом, к примеру, можно дёргать портами с тактовой частотой;
  • дополнительный частотный диапазон организуется для периферии из основного посредством программно настраиваемого делителя, таким образом, частота тактирования периферии может быть снижена для снижения энергопотребления;
  • количество выводов: 28, 44, 64 и 100;
  • объём SRAM: до 128 кБ;
  • объём flash-памяти: 512 кБ с кэшем предвыборки;
  • совместимость по выводам и отладочным средствам с 16-битными контроллерами фирмы Microchip;
  • аппаратный умножитель-делитель с независимым от основного ядра конвейером, оптимизированным по скорости выполнения;
  • набор расширенных 16-битных команд MIPS16e, позволяющий уменьшить размер кода некоторых программ на 40 %;
  • независимый от основного ядра контроллер USB.

Семейство 32-разрядных микроконтроллеров PIC32 выделяется значительно увеличенной производительностью и объёмом памяти на кристалле в сравнении с 16-разрядными микроконтроллерами и контроллерами цифровой обработки сигналов PIC24/dsPIC. Контроллеры PIC32 также оснащены большим количеством периферийных модулей, включая различные коммуникационные интерфейсы — те же, что у PIC24, и 16-битный параллельный порт, что можно использовать, например, для обслуживания внешних микросхем памяти и жидкокристаллических TFT-индикаторов.
Семейство PIC32 построено на ядре MIPS32, отличающегося низким потреблением энергии, быстрой реакцией на прерывания, функциональностью средств разработки и лидирующим в своём классе быстродействием 1.53 Dhrystone MIPS/МГц. Такое быстродействие достигнуто благодаря эффективному набору команд, 5-ступенчатому конвейеру, аппаратному умножителю с накоплением и несколькими (до 8) наборами 32-разрядных регистров ядра.

Только теорию нельзя практику

Из всех авторов материалов, которые я видел, только Константин Чижов (он же neiver, автор статьи Работа с портами ввода-вывода микроконтроллеров на Си++ на ресурсе easyelectronics.ru) поставил запятую после слова «нельзя». В его репозитории на github представлена библиотека «Mcucpp», которая реализует идеи метапрограммирования в микроконтроллерах. На мой взгляд, как это нередко бывает, у проекта есть ряд недостатков, главным из которых считаю невозможность использовать ее из коробки, что отталкивает потенциальных пользователей, особенно новичков (типа меня, который начал заниматься контроллерами в середине 2019, в виде хобби). Так как конкретных проектов и задач у меня нет, я решил начать собирать все наработки Константина, пытаться, насколько это возможно, адаптировать код под разные семейства, писать Doxy-документацию, примеры для добавленного кода, проверять его работоспособность. В результате медленно развивается проект Zhele, в котором я на основе библиотеки Чижова создаю полностью шаблонный фреймворк для контроллеров Stm32. Сразу отмечу, что автором файлов проекта, где изменений немного, пишу Константина Чижова.

На момент написания этой статьи большая часть возможностей контроллеров еще не покрыта библиотекой, однако уже есть и проверены тактирование, gpio, таймеры, интерфейсы i2c/spi/uart/one-wire, драйверы устройств, которые у меня есть.

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

Попытка использовать современный C++ и паттерны проектирования для программирования микроконтроллеров

Всем привет!
Проблема использования С++ в микроконтроллерах терзала меня довольно долгое время. Дело было в том, что я искренне не понимал, как этот объектно ориентированный язык может быть применим к встраиваем системам. Я имею ввиду, как выделять классы и на базе чего составлять объекты, то есть как именно применять этот язык правильно. Спустя некоторое время и прочтения n-ого количества литературы, я пришёл к кое каким результатам, о чем и хочу поведать в этой статье. Имеют ли какую либо ценность эти результаты или нет — остается на суд читателя. Мне будет очень интересно почитать критику к моему подходу, чтобы наконец ответить себе на вопрос: «Как же правильно использовать C++ при программировании микроконтроллеров?».
Предупреждаю, в статье будет много исходного кода.

STM32F429 + IL9341 = LVGL, DOOM1

Tutorial

Продолжил поднимать элементы на своей плате и тестировать. Первым делом после того как запустился дисплей провел тест Lvgl графической библиотеки. Результаты показались удовлетворительным. Около 20 FPF. Иногда были просадки но в целом, без использования DMA и контроллера Chrom-ART, который есть на борту, получилось неплохо. ART использовать не получится, потомучто мой дисплей подключен по SPI интерфейсу. Это было не первое ограничение с которым я столкнулся на пути оптимизации с целью увеличения FPS.

Статья скорее надо рассматривать в образовательных или исследовательских целях. Я пришел к выводу, что если разрабатывать устройство то надо использовать все фичи. Получился такой испытательный стенд. На котором не работает Chrom-ART.

История создания языка C (Си)

Язык программирования C (Си) появился «стихийно» – ни одна компания не заказывала создания подобного языка. Его первая версия появилась на свет в 1972 г. в фирме Bell Laboratories, написал ее теперь уже всемирно известный программист Деннис Ритчи (Dennis MacAlistair Ritchie).

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

Название C (Си) появилось так же стихийно, как и сам язык. Фактически, он стал преемником ранее созданного языка В (Би), разработанного автором операционной системы UNIX Кеном Томпсоном. В свою очередь, язык Би во многом был похож на языке BCPL, разработанный в Кембриджском университете. А язык BCPL основывался на идеях «старого как мир» Алгола-60.

Первым неформальным стандартом языка Си стало издание в 1978 г. книги Брайана Кернигана и Денниса Ритчи с названием «The ‘C’ Programming Language». Первоначально книга была издана в США, но потом была переведена и многократно переиздавалась во многих других странах мира. В 1989 г. язык Си был стандартизован ANSI (American National Standards Institute – американский национальный институт стандартов) и ISO (International Standard Organization — международная организация по стандартизации).

Но время шло и у пользователей языка Си появилась потребность в реализации новых функций, не поддерживавшихся языком. Учитывая все это, Бьерн Страуструп в начале 80-х (работавший все в той же самой Bell Laboratories) принял решение о расширении возможностей языка Си, который первоначально назвали как «Си с классами». Но в дальнейшем за его модификацией языка закрепилось другое название — Си++. Это название сохранилось за ним вплоть до настоящего времени.

Embox на плате EFM32ZG_STK3200. Как уместить RTOS в 4кБ ОЗУ

Embox является сильно конфигурируемой RTOS. Основная идея Embox — прозрачный запуск Linux программного обеспечения везде, в том числе и на микроконтроллерах. Из достижений стоит привести OpenCV, Qt, PJSIP, запущенные на микроконтроллерах STM32F7. Конечно, запуск подразумевает, что в данные проекты не вносились изменения и использовались только опции при конфигурации оригинальных проектов и параметры задаваемые в самой конфигурации Embox. Но возникает естественный вопрос насколько Embox позволяет экономить ресурсы по сравнению с тем же Linux? Ведь последний также достаточно хорошо конфигурируется.

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

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

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

На самом деле, можно использовать практически любые языки программирования микроконтроллеров. Но популярнее всех С/С++. Это язык высокого уровня, позволяющий работать с максимальным комфортом. Более того, в разработке архитектуры AVR принимали участие создатели Си. Поэтому микросхемы производства «Атмел» адаптированы именно к этому языку.

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

Нужно отметить, что выбор оптимального языка программирования зависит также от аппаратного обеспечения. При малом количестве оперативной памяти использовать высокоуровневый Си нецелесообразно. В данном случае больше подойдет Ассемблер. Он обеспечивает максимальное быстродействие за счет короткого кода программы. Универсальной среды программирования не существует, но в большинстве бесплатных и коммерческих приложений можно использовать как Ассемблер, так и С/С++.

8-битные микроконтроллеры

8-битные микроконтроллеры имеют модифицированную гарвардскую архитектуру и делятся на два больших семейства: PIC10/12/16 и PIC18.

8-битные микроконтроллеры PIC10/12/16

Ядра 8-битных микроконтроллеров PIC10/12/16 могут быть построены одной из двух архитектур: BASELINE и MID-RANGE.

Архитектура базового (BASELINE) семейства

Архитектуру BASELINE имеют ядра контроллеров семейства PIC10 и часть контроллеров семейств PIC12 и PIC16. Отличительные черты:

  • разрядность: 12 бит;
  • количество поддерживаемых машинных команд: 35;
  • количество выводов (контактов): от 6 до 28;
  • дешевизна (по сравнению с другими решениями фирмы Microchip);
  • поддержка широкого диапазона напряжений питания;
  • возможность работы при низких напряжениях (применимо, например, в батарейных устройствах);
  • низкое потребление тока;
  • малые габаритные размеры корпуса;
  • наличие встроенной flash-памяти для программ.

Архитектура среднего (MID-RANGE) семейства

Архитектуру MID-RANGE имеют ядра микроконтроллеров серий PIC12 и PIC16. Отличительные черты:

  • разрядность: 14 бит;
  • количество поддерживаемых машинных команд: 35;
  • количество выводов: от 6 до 64;
  • работа в диапазоне напряжений питания от 2.0 до 5,5 В;
  • малый ток потребления;
  • поддержка системных прерываний;
  • аппаратная поддержка стека;
  • наличие встроенной flash-памяти для программ;
  • наличие энергонезависимой памяти типа EEPROM для данных;
  • поддержка периферии (USB, SPI, I²C, USART, LCD, компараторов, АЦП и т. п.);
  • производительность: 5 MIPS.

Расширенную архитектуру MID-RANGE имеют ядра новых микроконтроллеров семейств PIC12 и PIC16. Отличительные черты:

  • разрядность: 8 бит;
  • количество поддерживаемых машинных команд: 35 основных и 14 дополнительных (оптимизированных под компилятор языка C);
  • увеличенный объём памяти программ и данных;
  • более глубокий и улучшенный аппаратный стек;
  • дополнительные источники сброса;
  • поддержка периферийных устройств с модулем mTouch (используется для создания сенсорных пользовательских интерфейсов);
  • уменьшенное время входа в прерывание;
  • производительность увеличена на 50 %;
  • размер кода снижен на 40 %.
  • разрядность: 8 бит;
  • возможность подключения следующей периферии: 10-битных АЦП, компараторов, ШИМ, захват/сравнение, драйверов, ЖКИ, периферии с интерфейсами USB, CAN, I²C, SPI, USART, Ethernet, TCP/IP, ZigBee и др.;
  • производительность: до 16 MIPS;
  • объём памяти программ: до 128 кБ;
  • количество выводов: от 18 до 100;
  • поддержка технологии NanoWatt;
  • наличие программируемого генератора;
  • поддерживаемые напряжения питания: 3 и 5 В;
  • совместимость (программная, по выводам, по периферийным модулям) с другими контроллерами этого семейства и с 16-битными контроллерами других семейств.

Микроконтроллеры ARM

Микроконтроллеры с ядром ARM также являются одним из семейств процессоров на базе архитектуры RISC, разработанным компанией Advanced RISC Machines (ARM).

Микроконтроллеры ARM основаны на 32-битных и 64-битных многоядерных процессорах RISC. Процессоры RISC предназначены для выполнения меньшего количества инструкций, чтобы они могли работать с большей скоростью, выполняя дополнительные миллионы инструкций в секунду (MIPS). Устраняя ненужные инструкции и оптимизируя обработку информации, RISC-процессоры обеспечивают большую производительность по сравнению с большинством рассмотренных выше микроконтроллеров.

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

Таблица: основное различия между микроконтроллерами AVR, ARM, 8051 и PIC

8051 PIC AVR ARM
Разрядность 8 бит 8/16/32 бит 8/32 бит 32 бит, иногда 64 бит
Интерфейсы UART, USART,SPI,I2C PIC, UART, USART, LIN, CAN, Ethernet, SPI, I2S UART, USART, SPI, I2C, иногда CAN, USB, Ethernet UART, USART, LIN, I2C, SPI, CAN, USB, Ethernet, I2S, DSP, SAI, IrDA
Скорость 12 тактов на инструкцию 4 такта на инструкцию 1 такт на инструкцию 1 такт на инструкцию
Память ROM, SRAM, FLASH SRAM, FLASH Flash, SRAM, EEPROM Flash, SDRAM, EEPROM
Шинная архитектура CLSC Частично RISC RISC RISC
Архитектура памяти Фон-неймановская Гарвардская Модифицированная Модифицированная гарвардская
Энергопотребление Среднее Низкое Низкое Низкое
Семейства Вариации 8051 PIC16,PIC17, PIC18, PIC24, PIC32 Tiny, Atmega, Xmega, спец. AVR ARMv4,5,6,7 …
Производители NXP, Atmel, Silicon Labs, Dallas, Cyprus, Infineon … Microchip Atmel (Microchip) Apple, Nvidia, Qualcomm, Samsung Electronics, TI …
Стоимость Низкая Средняя Средняя Низкая
Популярные микроконтроллеры AT89C51, P89v51 PIC18fXX8, PIC16f88X, PIC32MXX Atmega8, 16, 32; вариации для Arduino LPC2148, ARM Cortex-M0, ARM Cortex-M3, ARM Cortex-M7

digitrode.ru

Микроконтроллеры PIC

Первые микроконтроллеры PIC появились во второй половине прошлого века. Быстрые 8-разрядные микросхемы компании Microchip мгновенно завоевали популярность. Двухшинная гарвардская архитектура обеспечивает беспрецедентную скорость. Ее разрабатывали на основе набора регистров, для которого характерно разделение шин.

Выбирая язык программирования микроконтроллеров PIC, необходимо учитывать, что в основе микросхем семейства лежит уникальная конструкция RISC-процессора. Симметричная система команд позволяет произвольно выбирать метод адресации, выполнять операции в любом регистре. На данный момент компания «Микрочип» выпускает 5 разновидностей МК, которые совместимы по программному коду:

  1. PIC18CXXX (75 команд, встроенный аппаратный стек);
  2. PIC17CXXX (58 команд 16-разрядного формата);
  3. PIC16CXXX (35 команд, большой набор периферийных устройств);
  4. PIC16C5X (33 команды 12-разрядного формата, корпуса с 18–28 выводами);
  5. PIC12CXXX (версии с 35 и 33 командами, интегрированный генератор).

В большинстве случаев МК PIC имеют однократно программируемую память. Встречаются более дорогие модели с Flash или ультрафиолетовым стиранием. Ассортимент из 500 наименований позволяет подобрать изделие для любой задачи. Сейчас производитель концентрирует усилия на развитии 32-разрядных версий с увеличенным объемом памяти.

Языки программирования микроконтроллеров PIC — это Ассемблер и Си. Для кодирования подходят любые интегрированные среды разработки (IDE). Программировать с их помощью очень удобно. Они автоматически переводят текст программы в машинный код

Важной характеристикой IDE является возможность пошаговой симуляции работы готового ПО. Мы рекомендуем пользоваться средой разработки MPLAB

Ее созданием занималась компания Microchip.

Перед началом работы в MPLAB советуем каждый раз заводить отдельную папку. Это нужно, чтобы не запутаться в файлах проектов. Интерфейс программы интуитивно понятный, и трудностей с ним возникнуть не должно. Для отладки используются фирменные отладчики Pickit, ICD, REAL ICE, IC PROG. В них имеется возможность просмотра содержимого памяти, установки контрольных точек.

Сфера применения PIC-микроконтроллеров

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

Давайте рассмотрим несколько схем с применением микроконтроллеров семейства PIC.

Таймер для управления нагрузкой на PIC16f628

Простейшая автоматика на микроконтроллерах PIC – это стихия 8-битного семейства. Их объём памяти не позволяет делать сложных систем, но отлично подходит для самостоятельного выполнения пары поставленных задач. Так и эта схема трёхканального таймера на Pic16f628, поможет вам управлять нагрузкой любой мощности. Мощность нагрузки зависит только от установленного реле/пускателя/контактора и пропускной способности электросети.

Настраивается прибор с помощью набора из 4-х кнопок SB1-SB4, на HG1 выводятся параметры, это дисплей типа LCD на 2 строки по 16 символов. В схеме используется внешний кварцевый резонатор на 4 МГц, а KV1 – это реле, с питанием катушки в 24 В, вы можете использовать любое реле, лишь бы оно подходило по напряжению катушки к вашему БП. МК питается от 5 В стабилизированного источника.

Вы можете использовать от 1 до 3 каналов в управлении нагрузкой, стоит только продублировать схему, добавив реле к выводам RA3, RA4 микроконтроллера.

Часы-будильник на МК PIC16f628A

Такие часы, согласно заявлениям разработчика, получились весьма точными, их погрешность весьма мала – порядка 30 секунд в год.

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

Регулятор мощности паяльника на PIC16f628A

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

Схема довольно простая, в нижней части реализация светодиодной индикации. Главный силовой элемент – тиристор BT139, а MOC3041 – нужен для гальванической развязки МК от сети и управления тиристором с помощью логического уровня в 5 В.

Надежность, Самодиагностика

Допустим, на плате произошло короткое замыкание между двумя портами, настроенными на выход. Если один порт будет в состоянии лог.1, а второй в лог.0, то через порт будет протекать ток. При нагрузочной способности до 25мА (реально до 50мА) через порты будет протекать большой ток, что может привести к выходу порта или контроллера из строя.

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

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

Рис.2. Самотестирование порта МК.

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

Рис.3. Самотестирование с использованием ограничения тока порта.

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

тестирование цифровым входом тестирование вх.АЦП

Рис.4. Вывод в терминал информации тестирования порта RC7.

Общие сведения о языке C (Си)

В настоящие дни C (Си) является многофункциональным языком программирования высокого уровня, подобным таким языкам как Pascal или Python, но в отличие от них он имеет возможность работы с командами низкого уровня, подобно языку ассемблера. Программу на языке С можно скомпилировать в машинный код практически для любого известного микропроцессора. Не исключением стали и микроконтроллеры – сейчас по популярности использования (особенно для начинающих) язык Си обогнал в них доминировавший до этого язык ассемблера. Программирование на языке С поддерживает и самая популярная в настоящее время программная платформа Atmel Studio (!!!!!!) для микроконтроллеров семейства AVR.

Сейчас уже можно с уверенностью сказать, что язык С стал своеобразным фундаментом, на котором строится все современное программирование – чего стоят хотя бы «Visual C» и «C Sharp». Основанные на нем языки программирования сейчас занимают доминирующее положение в мире программирования. А все началось с удачной структуры языка, разработанной в 1972 г. Деннисом Ритчи.

Файлы программ на языке Си имеют расширение .C, а простейшая структура программы выглядит следующим образом.

#include <avr/io.h> /* заголовок */

int main(void) /* главная функция: начало программы */

{ /* открывающая скобка в начале программы */

оператор программы;оператор программы;…оператор программы;

} /* закрывающая скобка в конце программы */

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

Генераторы

В предыдущей статье посвященной CLC мы уже рассматривали разного рода генераторы/мультивибраторы, рассмотрим как CCDM и PPS позволит упростить и до того простые схемы основанные на ПНЯ (CLC).

Рис 5. Мультивибратор на двух гейтах.

На рис.5 изображен ранее рассмотренный генератор на D триггере, инверторе и RC цепочке (в данном случае схема чуть перерисована для отображения внешних по отношению к микроконтроллеру подключений). Частота генератора определяется параметрами R и C. Резистор R задает ток заряда/разряда конденсатора C. Теперь, при наличии встроенного контроллера тока драйвера порта, мы можем убрать резистор и чуть упростить схему.

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

Рис.6. Мультивибратор с ограничением выходного тока порта CLC2

Следует отметить, что совсем не обязательно для CLC1 использовать D триггер, пойдет любой вариант реализации неинвертирующего гейта.

Рис. 7. Другой вариант мультивибратора на двух логических гейтах.

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

  • уменьшение используемого числа выводов МК (да, вы же помните что у нас есть часть ПНЯ в виде PPS), то есть для одного и того же корпуса можем иметь больше возможностей — впихнуть больше в меньшее.

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

Рис. 8. Управление током позволяет программно менять частоту мультивибратора.

В первоначальной схеме от микроконтроллера понадобилось бы 3 вывода, модифицированная схема с использованием PPS и CCDM требует только 2.

На самом деле мультивибратор можно сделать и на одном гейте (рис.9), тогда от микроконтроллера понадобится вообще один внешний выход. Выход CLC можно подключить внутри МК к другой периферии. На конденсаторе мы будем видеть треугольный сигнал, но мы можем убедиться в том, что на выходе CLC все же присутствует последовательность из “нулей” и “единиц”, если выход той же самой CLC вывести на другой “контрольный” вывод МК с помощью PPS.

Рис.9. Мультивибратор на одном гейте

Рис.10. Форма сигнала на конденсаторе мультивибратора и контрольный выход логического элемента.

Программирование микроконтроллеров для начинающих

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

  • встраиваемые;
  • 8-, 16- и 32-разрядные;
  • цифровые сигнальные процессоры.

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

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

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

SIP-телефон c GUI на STM32F7

Был один из короновирусных вечеров проводимых мной в самоизоляции. На столе лежала плата STM32F769I-Discovery. Я посмотрел на нее и подумал, ведь это же смартфон. Есть экран c тачскрином 800×480, есть аудио интерфейс, есть сетевой интерфейс, пусть даже и не беспроводной. Все это основано на микроконтроллере, поэтому более надежно с точки зрения температурных режимов. И имеет меньшее потребление. Не хватает только программного обеспечения. Конечно, никакой Android даже близко не встанет на данную плату. И я решил попробовать насколько быстро требуемый для телефона функционал может быть разработан под данную плату на Embox.

Плавное изменение яркости светодиода (мерцание)

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

Рис. 3a. Схема «ШИМ модулятора»

Рис. 3b

Диаграммы демонстрирующие принцип изменения скважности

Если под такую простую задачу жалко использовать два ШИМ-модуля, то возможны варианты реализации без ШИМ:

А) Используем сигналы переполнения двух таймеров (события), плюс три ячейки CLC.
На два JK- триггера в счетном режиме подаем сигналы с таймеров (postscaled out) – получаем на выходе меандры, которые затем подаем на элемент XOR.

Рис. 3c. Реализация ШИМ модулятора без входных ШИМ сигналов

Б) Используем сигналы переполнения двух таймеров и одну CLC.
На входы RS триггера подаем сигналы с Таймера (postscaled out) – получаем на выходе «пилообразный ШИМ» (рис. 3e).

Рис. 3d.

Рис. 3e.

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

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

1) Atmel Studio

2) CodeVisionAVR

3) WinAVR

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

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

Однако программа платная.

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

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий