Конфигурируемые логические ячейки в pic микроконтроллерах
Содержание
- 1 Плавное изменение яркости светодиода (мерцание)
- 2 Медленная работа SD карточек — кто виноват и что делать?
- 3 Издатель/подписчик для распределённых отказоустойчивых бортовых систем реального времени в 1500 строк кода
- 4 Конъюнктура
- 5 Студенты пишут Uart драйвер для STM32F411
- 6 10 советов схемотехнику
- 7 Распределенный LED Контроллер управления светом (12V 6A)
- 8 Предисловие
- 9 Обратноходовой импульсный источник питания
- 10 Наилегчайший старт в STM через «одно место»
- 11 Генерация звука на микроконтроллерах AVR методом волновых таблиц с поддержкой полифонии
- 12 Динамическая память в системах жёсткого реального времени
- 13 Использование Astra Linux на встраиваемом компьютере с архитектурой ARM
- 14 Драйвер шагового двигателя
- 15 Buck-boost преобразователь с цифровым управлением на STM32F334 в режиме CC/CV
- 16 консоль в микроконтроллере с micro readline
- 17 Датчики Холла для бесколлекторного двигателя: возвращение квадратурных энкодеров
- 18 Ликбез: принцип работы бесколлекторного двигателя
- 19 STM32 Часть 3: Первый Проект
- 20 Как проектируют ненастоящие программисты
- 21 Доступ к шинам комплекса Redd, реализованным на мостах FTDI
- 22 USB-звуковая карта на YM3812
- 23 Сид Катцен. PIC микроконтроллеры. Все что вам необходимо знать
- 24 STM32 и USB-HID — это просто
- 25 Отладка и программирование микроконтроллеров stm32f303, atmega328 через любой интерфейс, как через jtag
- 26 Работа с китайской микросхемой АЦП Hx711 (заключение)
Плавное изменение яркости светодиода (мерцание)
Если сигналы двух ШИМ с близкими частотами подключить к входам CLC сконфигурированной как элемент XOR (исключающее ИЛИ), то можно организовать «мерцание» светодиода (периодическое изменение скважности). При этом решение полностью аппаратное и не требует участия ядра МК (программы)
Рис. 3a. Схема «ШИМ модулятора»
Рис. 3b
Диаграммы демонстрирующие принцип изменения скважности
Если под такую простую задачу жалко использовать два ШИМ-модуля, то возможны варианты реализации без ШИМ:
А) Используем сигналы переполнения двух таймеров (события), плюс три ячейки CLC.
На два JK- триггера в счетном режиме подаем сигналы с таймеров (postscaled out) – получаем на выходе меандры, которые затем подаем на элемент XOR.
Рис. 3c. Реализация ШИМ модулятора без входных ШИМ сигналов
Б) Используем сигналы переполнения двух таймеров и одну CLC.
На входы RS триггера подаем сигналы с Таймера (postscaled out) – получаем на выходе «пилообразный ШИМ» (рис. 3e).
Рис. 3d.
Рис. 3e.
Медленная работа SD карточек — кто виноват и что делать?
Давно думал написать статью на Хабр, но все как-то не решался. Хотя и кажется, что есть мысли, которые были бы небезинтересны сообществу, но останавливает предположение, что это «кажется» проистекает от завышенной самооценки. Тем не менее попробую. Поскольку я профессионально занимаюсь электроникой, в частности, программированием микроконтроллеров, довольно-таки длительное время (как я подозреваю, дольше, чем живет большАя а может даже и бОльшая часть читателей Хабра), то за это время накопилось изрядное количество интересных случаев. Представляю на суд сообщества рассказ об одном из них.
Итак, в одной разработке мне потребовалось сохранять значительные объемы информации с целью последующей передачи через сеть в обрабатывающий центр. Поскольку полученное устройство предполагало серийное производство, был выбран вариант с применением относительно недорогих компонентов, и, в частности, микроконтроллера как центрального элемента системы. Поскольку в тот момент (середина 2012 года) предложение микроконтроллеров с Ethernet PHY на борту не отличалось разнообразием (да и сейчас положение не намного лучше), был выбран МК фирмы TI семейства Stellaris, конкретно LM3S8962, тем более что отладочная плата для него у меня уже имелась. МК на тот момент относительно новый, активно продвигаемый фирмой TI (это в конце 2013 года она ВНЕЗАПНО перевела всю серию в разряд NRND), и обладающий вполне достаточными для решения данной задачи параметрами. Для хранения информациии был выбран вариант с SD карточкой, в первую очередь из за их доступности и дешевизны, а также потому, что на отладочной плате наличествовало контактное устройство для них, а на поставляемом с платой отладки CD имелись многочисленные примеры, в том числе и для SD карт. Интерфейс к карточке был реализован простейший — SPI, предложенные примеры сходу заработали, принятое решение позволяло обрабатывать полученные данные до написания интерфейса при помощи элементарного переноса карточки из устройства в кард-ридер ПК, так что первоначальная отладка алгоритмов взаимодействия с объектом управления проблем не вызвало, по крайней мере в этой части проекта. Как все понимают, проблемы возникли несколько позже…
Издатель/подписчик для распределённых отказоустойчивых бортовых систем реального времени в 1500 строк кода
Сап, котятки.
Я пришёл рассказать о проекте UAVCAN — новом сетевом стандарте для организации взаимодействия узлов и компонентов современных транспортных средств с высоким уровнем автономности/автоматизации. Название является акронимом от Uncomplicated Application-level Vehicular Communication And Networking (несложные бортовые сети и коммуникации уровня приложения).
В этой публикации объясняется текущее положение дел и тренды в области сложных бортовых систем, существующие и грядущие проблемы, как мы их решаем и каких успехов добились. Во второй части наши коллеги из Университета Иннополис подробно осветят практическую сторону внедрения UAVCAN на примере конкретных проектов.
Конъюнктура
Мы наблюдаем быстрый рост сложности бортовых систем, связанный с развитием функциональных возможностей транспортных средств (особенно беспилотных) в целом, и систем автоматического управления в частности.
Студенты пишут Uart драйвер для STM32F411
Доброго здравия всем!
Сегодня я хочу вам рассказать, как постепенно студенты учатся разрабатывать ПО для микроконтроллера на примере драйвера UART на STM32F411. Код и архитектуру с небольшими моими изменениями и доработками я попытаюсь привести здесь.
Сразу отмечу, что все сделано статикой, как я учил :) (статические классы, статическая подписка, статический странно-рекурсивный шаблон, статический контейнер для команд и так далее), но можно реализовать то же самое с помощью обычных объектов и обычного подхода. В обычном подходе архитектура была бы такая же, но кода немного больше, как по объему так и по количеству строк кода.
Данная статья не претендует на истину, а лишь показывает подход к реализации некоторых задач, в данном случае реализацию Uart драйвера на С++.
10 советов схемотехнику
Недавно один мой знакомый, начавший интересоваться электроникой и схемотехникой, обратился ко мне с просьбой дать ему какие-то практические советы по разработке электронных устройств. Поначалу этот вопрос немного озадачил меня: как-то так получилось, что для себя я никогда не выделял какие-то перечни обязательных правил проектирования, всё это было у меня где-то на уровне подсознания. Но этот вопрос послужил хорошим толчком для того, чтобы сесть и сформулировать хотя бы небольшой список таких рекомендаций. Когда все было готово, я подумал, что, возможно, это будет интересно почитать кому-то еще, таким образом и получилась данная статья.
Распределенный LED Контроллер управления светом (12V 6A)
Предисловие
Светодиодное освещение появилось достаточно давно. Китайцы, конечно, определённо «подпортили» его восприятие низкокачественными «поделками«, редко выхаживающими больше года. Но — если «правильно приготовить», то светодиодные светильники не только могут работать годами, но и — вполне заменить «обычные» источники освещения, «чуть более, чем — полностью» (С)
Поэтому в течение нескольких лет сложилось, что практически ВСЕ освещение у меня дома (и — в мастерской) — светодиодное. И не надо говорить — что это мол, «ненадежно» = некоторые светильники уж семь лет как работают. А когда светильник — тонкий, лёгкий и практически не нагревается — можно такого «наворотить» с так называемым «зонированием»…
Спрятать RGBW за книжную полку, сделать индивидуальное освещение «читальной зоны» у журнального столика, даже пространство под кроватью подсветить. На кухне — вообще «пространство вариантов». Особенно удобной оказалась подсветка пола, спрятанная под кромкой рабочей поверхности.
Самый «цимес» при правильном подходе — источник света не «бьёт в глаза», а спрятан, и даёт мягкий рассеянный свет. А это очень удобно. Быстро привыкаешь!
Единственный минус — когда светильников становится много — ими уже неудобно управлять!
Обратноходовой импульсный источник питания
Это одна из разновидностей импульсных источников питания, имеющих гальваническую развязку как первичных, так и вторичных цепей. Сразу был изобретён именно этот вид преобразователей, который был запатентован ещё в далёком 1851 году, а его усовершенствованный вариант применялся в системах зажигания и в строчной развертке телевизоров и мониторов, для подачи высоковольтной энергии на вторичный анод кинескопа.
Основная часть этого блока питания тоже трансформатор или может быть дроссель. В его работе есть два этапа:
- Накопление электрической энергии от сети или от другого источника;
- Вывод накопленной энергии на вторичные цепи полумоста.
Во время размыкания и замыкания первичной цепи во вторичной появляется ток. Роль размыкающего ключа выполнял чаще всего транзистор. Узнать параметры которого нужно обязательно использовать справочник. управление же этим транзистором чаще всего полевым выполняется за счёт ШИМ-контроллера.
Управление ШИМ-контроллером
Преобразование сетевого напряжения, которое уже прошло этап выпрямления, в импульсы прямоугольной формы выполняется с какой-то периодичностью. Период выключения и включения этого транзистора выполняется с помощью микросхем. ШИМ-контроллеры этих ключей являются основным активным управляющим элементом схемы. В данном случае как прямоходовой, так и обратноходовой источник питания имеет трансформатор, после которого происходит повторное выпрямление.
Для того чтобы с увеличением нагрузки не падало выходное напряжение в ИИП была разработана обратная связь которая была заведена непосредственно в ШИМ-контроллеры
Такое подключение даёт возможность полной стабилизации управляемым выходным напряжения путём изменения скважности импульсов. Контроллеры, работающие на ШИМ модуляции, дают большой диапазон изменения выходного напряжения
Микросхемы для импульсных источников питания могут быть отечественного или зарубежного производства. Например, NCP 1252 – ШИМ-контроллеры, которые имеют управление по току, и предназначены для создания обоих видов импульсных преобразователей. Задающие генераторы импульсных сигналов этой марки показали себя как надёжные устройства. Контроллеры NCP 1252 обладают всеми качественными характеристиками для создания экономически выгодных и надежных блоков питания. Импульсные источники питания на базе этой микросхемы применяются во многих марках компьютеров, телевизоров, усилителей, стереосистем и т. д. Заглянув в справочник можно найти всю нужную и подробную информацию обо всех её рабочих параметрах.
Наилегчайший старт в STM через «одно место»
Уже, наверное, прошло время религиозных войн AVR против STM, но нет-нет да наблюдаются вспышки столкновений двух лагерей. Практически у любой публикации на тему поделок на AVR обязательно будет каммент вроде «Да сколько уже можно лохматить бабушку, давно пора перейти на STM», дальше вариации на тему цены, количества ног и таймеров. Если STMщик более продвинут, обязательно будет указание, что DMA в AVR нет и не будет, по этому AVR должна умереть. Зачем простому блинку-вольтметру-градуснику DMA, гора 16 разрядных таймеров, 100 ног и 12 битный АЦП никто как правило не объясняет. Зачем нужен такой комбайн в устройстве, которое легко вывозит Tiny13, которая при этом не загружена даже на треть своих ресурсов никто не будет разбираться. Просто надо переходить на STM32, и баста. Ибо вот.
И надо сказать, есть у людей тяга к новизне. А действительно, может попробовать? А вдруг понравится? Вот только Референс Мануал на популярный STM32F103C8T6, на котором основана самая массовая Голубая таблетка в 1126 страниц что-то как-то не очень располагает к «быстрому старту». Даже отдельную утилиту, так ненавидимый аксакалами «калокуб», и ту надо изучать, что там к чему. Да и вникнув в Cube, стартовать за 5 минут вряд ли получится, генерируемая им портянка не самое доступное чтиво на ночь, просто «в лоб» врубиться, о чём там речь получится не у каждого.
Генерация звука на микроконтроллерах AVR методом волновых таблиц с поддержкой полифонии
Из песочницы
Микроконтроллеры AVR довольно дешевы и широко распространены. Наверно, с них начинает почти любой embedded разработчик. А среди любителей правит балом Arduino, сердцем которого обычно является ATmega328p. Наверняка многие задумывались: как можно заставить их звучать?
Если посмотреть на существующие проекты, то они бывают нескольких типов:
- Генераторы квадратных импульсов. Генерация с помощью ШИМ или дергать пины в прерываниях. В любом случае, получается очень характерный пищащий звук.
- Использование внешнего оборудования типа MP3 декодера.
- Использование ШИМ для вывода 8 битного (иногда 16 битного) звука в формате PCM или ADPCM. Поскольку памяти в микроконтроллерах для этого явно не достаточно, то обычно используют SD карту.
- Использование ШИМ для генерации звука на основе волновых таблиц, подобных MIDI.
Последний тип для меня был особенно интересен, т.к. почти не требует дополнительного оборудования. Представляю сообществу свой вариант. Для начала небольшое демо:
Заинтересовавшихся прошу под кат.
Динамическая память в системах жёсткого реального времени
Существует класс приложений реального времени, для которых тяжело предсказать потребности в распределении памяти во время выполнения статически. В этот класс входят, например, встраиваемые реализации стеков некоторых коммуникационных протоколов, где поведение и распределение ресурсов определяется отчасти активностью других агентов в сети. Классический подход в таких случаях заключается в использовании блочных менеджеров памяти, выделяющих фрагменты фиксированного размера (как это сделано, например, в LwIP). Этот подход накладывает нежелательные функциональные и качественные ограничения на реализацию
В этой заметке я предлагаю точку зрения, что традиционные (не блочные) аллокаторы незаслуженно обделены вниманием разработчиков систем реального времени, делюсь соображениями по релевантным вопросам, жалуюсь на жизнь, и предлагаю улучшить положение дел
(КДПВ – см. аннотацию к диаграмме в конце)
Использование Astra Linux на встраиваемом компьютере с архитектурой ARM
Новые тенденции с сфере импортозамещения заставляют российские компании переходить на отечественные операционные системы. Одной из таких систем является российская ОС на базе Debian – Astra Linux. В сфере государственных закупок все чаще встречаются требования по использованию отечественного программного обеспечения с сертификатами ФСТЭК, а также его вхождения в реестр отечественного ПО. Хотя стоить отметить, что по закону наличие сертификата ФСТЭК не является обязательным.
Большинство российских операционных систем созданы для использования в режиме «Рабочая станция», то есть фактически это аналоги решений архитектуры x86 для рабочего места сотрудника. Мы же решили установить ОС Astra Linux на архитектуру ARM, с целью использовать ОС российского производства в промышленной сфере, а именно во встраиваемом компьютере AntexGate (не будем сейчас углубляться в преимущества ARM архитектуры над x86).
Драйвер шагового двигателя
Один из самых простых вариантов управления Шаговым Двигателем (ШД) это полношаговое управление (full step). В этом варианте сигналы управления сдвинуты на 90°. Поэтому можно взять периодический сигнал, на один делитель частоты подать его в прямом виде, на другой – в инверсном.
Рис. 5a. Формирователь сигналов управления шаговым двигателем.
Рис. 5b. Диаграмма на выходе формирователя.
Изменение частоты на входе CLC будет изменять частоту управляющих сигналов шагового двигателя
Входную частоту можно брать с входа микроконтроллера (внешний сигнал), либо от внутреннего источника – ШИМ или NCO генератора.
При управлении ШИМ-ом нужно менять 2 параметра: регистр периода (частота) и регистр скважности, так как управляющий сигнал должен быть с 50% скважностью.
Применение NCO (Numerically Controlled Oscillator, управляемый генератор) выглядит более привлекательным, так как это генератор может автоматически формировать меандр, поэтому для изменения частоты нужно менять значения только в одном регистре.
Для смены направления нужно инвертировать сигналы на одной из фаз
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.
В рамках данной статьи я кратко расскажу про аппаратную реализацию преобразователя и о том, как реализовать систему управления для различных режимов работы. Интересно? Тогда поехали…
консоль в микроконтроллере с micro readline
Представляю вашему вниманию библиотеку microrl (on github), предназначенную для организации консольного интерфейса в разного рода встраиваемых железках на микроконтроллерах.
Зачем нам консоль в МК?
Текстовый консольный интерфейс обладает рядом преимуществ для встраиваемых систем, при всей своей мощи и простоте (ведь текст, в отличие от светодиода, говорит сам за себя!):
- Требует относительно мало ресурсов МК, и минимум аппаратных затрат — последовательный интерфейс типа UART или любой другой имеющийся в МК, это может быть встроенный USB или внешний USB-Com адаптер или даже TCP если ваше микроконтроллер достаточно серьезный.
- Удобно подключаться — достаточно терминала поддерживающего Com-port (putty для Windows или minicom для linux).
- Удобно использовать — цветной вывод в терминал, поддержка авто-дополнений, горячих клавиш и истории ввода.
Датчики Холла для бесколлекторного двигателя: возвращение квадратурных энкодеров
Tutorial
Это уже третья статья, рассказывающая о квадратурных декодерах, на сей раз с применением к управлению бесколлекторными двигателями.
- Статья первая: принцип работы квадратурного декодера + код для ардуино.
- Статья вторая: квадратурный декодер на stm32.
Задача: есть обычный китайский бесколлекторник, нужно его подключить к контроллеру Copley Controls 503. В отличие от копеечных коптерных контроллеров, 503й хочет сигнал с датчиков холла, которых на движке нет. Давайте разбираться, для чего нужны датчики и как их ставить.
Ликбез: принцип работы бесколлекторного двигателя
В качестве иллюстрации я возьму очень распространённый двигатель с двенадцатью катушками в статоре и четырнадцатью магнитами в роторе. Вариантов намотки и количества катушек/магнитов довольно много, но суть всегда остаётся одной и той же. Вот фотография моего экземпляра с двух сторон, отлично видны и катушки, и магниты в роторе:
STM32 Часть 3: Первый Проект
Эта фраза должна служить мотивацией для каждого программиста. Ведь именно вы решаете как машина использует свои ресурсы. Но как и с начала времен, человек вверяет свое право решать третьим лицам взамен легкого пути. Перед тем как спрашивать меня о пользе моих статей, когда есть «Куб», задайте вопрос себе, почему «куб» решает за меня.STM32 Часть 1: Основы STM32 Чаcть 2: Инициализация
Итак, продолжим наше приключение. Мы уже написали скрипт инициализации, разобрались с линкером и компилятором. Настало время мигнуть светодиодом. В этой статье мы бегло пробежимся по основам блока RCC и GPIO, а также добавим парочку хедеров, которые мы будем использовать в следующих проектах. Поехали.
Как проектируют ненастоящие программисты
Recovery Mode
Настоящие программисты — это облака, big data, high load… А у нас — практически DIY. 2 установки — уже тиражирование, 100 штук — производство… Но зато атомные ледоколы, маневровые локомотивы, трактора, шлюзы, мосты, опускающиеся вниз от лишнего асфальта, беспилотники размером в дом, 50 человек персонала на цех длиной больше двух километров… и надежность, надежность, надежность… И пяток гендиректоров в костюмах прямо на поле при демонстрации системы на тракторе…Обычное окончание отладки — убираем антенны с путеправильной машины
Итак… пришла просьба от коллег — написать ТКП (технико-коммерческое предложение) на хитрый GPS-трекер. И комментарии, что большие и настоящие делать отказались.
Доступ к шинам комплекса Redd, реализованным на мостах FTDI
Мы закончили большой теоретический блок, показывающий, как можно строить ПЛИС-подсистему для комплекса Redd; как организовывать связь между ПЛИС и центральным процессором комплекса; как легко сохранять скоростные потоки данных в ОЗУ, имеющем прямую связь с ПЛИС, для последующей их неспешной перекачки к центральному процессору (или наоборот, помещать данные в это ОЗУ для последующей быстрой выдачи в канал). Мы рассмотрели методики трассировки работы процессора Nios II. Мы умеем оптимизировать быстродействие процессорной системы на базе Nios II, чтобы работа шла максимально эффективно. В общем, мы изучили весь необходимый минимум теории, и пора бы перейти к практике, спроектировав не очень сложное, но практически полезное устройство… Но имеется одно НО.
Из комментариев к статьям я заметил, что некоторые читатели полагают, что Redd и ПЛИС — как Ленин и Партия. Что они неразрывно связаны. На самом деле всё совсем не так. Просто начать разговор о комплексе Redd хотелось с чего-то интересного, а что может быть интереснее, чем ПЛИС? Ну, а начав разговор, прерываться на полуслове глупо. И вот, наконец, большой логический блок завершён. И чтобы показать, что ПЛИС — это далеко не весь Redd, предлагаю сделать ориентировочно три статьи о вещах, не связанных с ними. Ну, а завершив этот блок, уже перейти к ПЛИСовой практике.
USB-звуковая карта на YM3812
Из песочницы
Я люблю старые компьютерные игры. Люблю старое железо, но не настолько, чтобы коллекционировать его дома. Другое дело – поковырять какой-нибудь старый чип и попробовать самому что-нибудь воспроизвести, совместить старое с новым. В данной статье история о том, как я подключил AVR-микроконтроллер к YM3812, применявшуюся в таких звуковых картах как Adlib, Sound Blaster и Pro AudioSpectrum. Я не создал что-то принципиально новое, просто объединил разные идеи. Возможно кому-то будет интересна моя реализация. А может мой опыт подтолкнет кого-нибудь на создание свого ретро-проекта.
Сид Катцен. PIC микроконтроллеры. Все что вам необходимо знать
Предисловие
Микропроцессоры и производные от них — микроконтроллеры — являются широко распространенным и при этом незаметным элементом инфраструктуры современного общества, основанного на электронике и коммуникациях. Исследования, проведенные в 1998 году, показали, что в каждом доме незаметно для нас «живет» около 100 микроконтроллеров и микропроцессоров. Они присутствуют буквально всюду: в звуковых открытках, стиральных машинах, микроволновых печах, телевизорах, телефонах, персональных компьютерах и разных других устройствах. Даже в самом обыкновенном автомобиле скрывается более двадцати таких элементов, где они, в частности, контролируют состояние беспроводных датчиков давления в шинах и отображают критичные данные, получаемые по сети CAN.
Каждый год продается около четырех миллиардов подобных изделий, предназначенных для реализации мозгов» разнообразных «умных» устройств, начиная от интеллектуальных таймеров для яйцеварок и заканчивая системами управления самолетом. Эволюция микропроцессоров, первые из которых были выпущены компанией Inte1 в далеком 1971 году, привела к коренному изменению структуры общества, спровоцировав в начале XXI века вторую промышленную революцию. Несмотря на то что микропроцессоры, являясь основным компонентом вездесущих ПК, известны лучше, объем продаж различных микропроцессоров, таких как Intel Pentium, составляет всего около 2% от общего объема продаж подобных устройств. Подавляющее же большинство продаж приходится на дешевые микроконтроллеры, встраиваемые в специализированные электронные устройства, такие как смарт-карты. Причем если основной задачей микропроцессоров является обеспечение собственно вычислительной мощности, то во втором случае акцент смещается в сторону объединения на одном кристалле центрального процессора, памяти и устройств ввода/вывода. Такая интегрированная вычислительная система называется микроконтроллером.
Задумывая книгу по этой тематике, автор ставил перед собой задачу дать читателю базовые знания в области разработки небольших встроенных систем на базе микроконтроллеров, а не просто рассказать об архитектуре ЭВМ в традиционном понимании этого слова на примере микроконтроллеров. Будем надеяться, что подобный подход даст читателю уверенность в том, что даже на таком начальном уровне он сможет разработать, изготовить и запрограммировать полностью готовую рабочую встроенную систему.
Учитывая практический характер излагаемого материала, для его иллюстрации используется реально существующее аппаратное и программное обеспечение. Основную долю на рынке занимают устройства, оперирующие 8-битными данными (хотя имеются как 4-, так и 16-битные устройства), во многом схожие с первыми микропроцессорами и кардинальным образом отличающиеся от современной «тяжелой артиллерии» в лице микропроцессоров lntel Pentium и Power РС. В отличие от последних, сущностью микроконтроллера является высокая степень системной интеграции при низкой стоимости. Суммарная вычислительная мощность системы может быть увеличена путем распределения процессоров по системе. Так, в каждом сочленении манипулятора робота может использоваться свой микроконтроллер, выполняющий простые локальные операции и обменивающийся данными с более мощным процессором; определяющим функционирование всего робота.
STM32 и USB-HID — это просто
На дворе 2014 год, а для связи микроконтроллеров с ПК самым популярным средством является обычный последовательный порт. С ним легко начать работать, он до примитивности прост в понимании — просто поток байт.
Однако все современные стандарты исключили COM порт из состава ПК и приходится использовать USB-UART переходники, чтобы получить доступ к своему проекту на МК. Не всегда он есть под рукой. Не всегда такой переходник работает стабильно из-за проблем с драйверами. Есть и другие недостатки.
Но каждый раз, когда заходит разговор о том, применять USB или последовательный порт, находится множество поклонников логической простоты UART. И у них есть на то основания. Однако, хорошо ведь иметь альтернативу?
Меня давно просили рассказать как организовать пакетный обмен данными между ПК и МК на примере STM32F103. Я дам готовый рабочий проект и расскажу как его адаптировать для своих нужд. А уж вы сами решите — нужно оно вам или нет.
У нас есть плата с современным недорогим микроконтроллером STM32F103C8 со встроенной аппаратной поддержкой USB, я рассказывал о ней ранее
Отладка и программирование микроконтроллеров stm32f303, atmega328 через любой интерфейс, как через jtag
Данная статья посвящена моему первому open source проекту “repl”(ссылка на репозиторий внизу). Идея данного проекта заключается в том, чтоб позволить программисту микроконтроллеров отлаживать программу в микроконтроллере через любой его интерфейс, при этом чтобы отладка не сильно отличалась от отладки через jtag интерфейс. Была возможность остановки программы, установки точек останова, просмотра регистров, памяти, по инструкционной отладки программы.
Первое что приходит на ум это создать 2х приложение, один из потоков которого отвечает за интерфейс отладки, другой за программу пользователя, что я и сделал. Переключение между потоками осуществляется по таймеру, каждый поток имеет свой стек. Кучу я решил не использовать для написания интерфейса отладки т.к. их необходимо использовать 2 разных, либо при работе с кучей постоянно переключаться на один поток.
Первая идея для реализации по инструкционной отладки, была сократить время между прерываниями таймера ровно настолько чтоб могла исполниться только 1 инструкция. Данный вариант показал свою идеальную работу на микроконтроллере Atmega328p, дело в том, что минимальное время между прерываниями для Atmega составляет 1 такт процессора, любая инструкция независимо от количества тактов нужного для ее выполнения всегда завершиться если ее выполнение началось.
Работа с китайской микросхемой АЦП Hx711 (заключение)
По прошествии некоторого времени, повторное ознакомление с начальной статьей вызвало чувство незаконченности в вопросе использовании данного АЦП. Да, были проведены определенные исследования данного изделия, были нащупаны слабые стороны и предложены пути обхода этих слабых сторон, но вопрос об ЭКСПЕРИМЕНТАЛЬНОМ, практическом применении отсутствовал.
Работа Андрея Герасименко («АЦП НХ711 от 3,3V- не верьте китайской документации и не только…» (https//habr.com/ru/post/438772)), не требовала абсолютного учета веса улья. Условие относительности взвешенных ульев, нивелировало ошибку взвешивания, ибо технические ошибки, возникающие из за изменения внешних условий, действовали на все объекты слежения и автоматически исключались из анализа за состоянием ульев. Иначе обстоят дела при простом взвешивании.
Найденные Nikopol_86 ( «…не верьте китайской документации» Nikopol_86 февраля 2019 в 09:27) слабые места преобразователя в виде распределение ошибки измерения отличной от случайного распределения и отмеченные мною, тоже являлись теоретическими изысканиями.
Применение мною метода скользящего среднего для «успокоения» дрожания последних разрядов 24 битного преобразования показал свою эффективность, но готового экземпляра измерительного устройства, с учетом всех вышеперечисленных находок не было. Для окончательного заключения о пригодности Нх711 к использованию в весах была разработана программа для взвешивания, основанная на принципиальной схеме:
Питание схемы, осуществляется от обычного стандартного блока питания на постоянные 5 вольт, 1 ампер.
При разработке программы, учитывались все, ранее отмеченные недостатки АЦП. А теперь о самой программе, заложенной в контроллер ATMega16.