Site Loader

Содержание

Программатор AVR микроконтроллеров для СОМ порта

радио, самоделки

By vlabo

Данный програматор служит мне верой и правдой уже много лет. Схема его довольно проста и надежна.
Для программирования основных типов микроконтроллеров Atmega сделал универсальную плату программатора


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


Снимок более крупным планом


ВНИМАНИЕ! Данный программатор НЕ РАБОТАЕТ с виртуальными СОМ-портами переходников USB-COM !

 

Если у вас старая материнка, то на ней может быть два СОМ-порта. Можно работать с любым из них, для этого в программе Pony Prog необходимо будет указать с каким портом СОМ1 или СОМ2 работает программатор.

Для работы с программатором необходимо установить программу Pony Prog (ссылка для скачивания внизу поста)
Подключаем программатор.

Запускаем программу. В меню Настройки выбираем Калибровка и производим её.

После этого, идём в меню Настройки, и выбираем Настройка оборудования.
В открывшемя окошке выставляем Последовательный, СОМ1 и SI Prog API. Остальные окошечки — пустые. Жмём Проверка, затем ОК.

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

Как прошить микроконтроллер

Для примера запрограммируем микроконтроллер ATiny 13. Вставляем микроконтроллер в соответствующую панель на программаторе. В окне вверху программы выбираем AVR Micro, в соседнем — ATtiny13 , и кнопкой на плате программатора подаем на него питание 5в от USB порта.


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

После этого загружаем в программатор дамп самой прошивки. В меню нажимаем Файл — Открыть содержимое устройства из файла и в открывшемся проводнике выбираем нужный вам файл с расширением .hex.


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


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

Вот и вся процедура прошивки микроконтроллера.

Схему, плату и программу Pony Prog можно скачать по ссылке ниже:

Скачать “Программатор микроконтроллеров AVR” Programmer. zip – Загружено 224 раза – 2 МБ

avrpony progпайкапрограммапрограмматор

Прошивка микроконтроллера в ЦАП-ах серии AH-Dх. — audiohobby.ru

Для прошивки микроконтроллера нам понадобится USBasp программатор с переходником 10-pin to 6pin.

Для прошивки микроконтроллеров AVR мной обычно используется программа AVRDUDE.  Отличается она широким спектром поддерживаемых программаторов и микроконтроллеров. Кроме «родных» устройств от Atmel она поддерживает и любительские устройства, не поддерживаемые самой AVR Studio, к примеру используемый нами программатор USBAsp.

Сначала подключим наш программатор к ЦАП-у (в примере AH-D5). Будьте внимательны, подключаем, как показано  на картинке.

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

Далее я рекомендую установить фьюз биты в наш микроконтроллер. Обычно по умолчанию ATmega48/88 сконфигурированы на работу на частоте 1 или 8 Мгц от внутреннего генератора. Я рекомендую снизить частоту до 1Мгц, для снижения лишних помех и наводок. Конфигурация фьюзов представлена ниже.

Далее выбираем файл прошивки и нажимаем кнопку «Программирование».

При прошивке микроконтроллера работающего на частоте <= 1Мгц иногда возникает ошибка. Появляется она из-за того, программатор не может автоматически перейти в режим медленного программирования. Для перевода в медленный режим необходимо замкнуть на программаторе перемычку JP3.

Во вложении вы можете скачать архив с AVRDUDE и драйвера к программатору.

Включение BOD (Brown-out detection)

Также можно отказаться от внешнего супервизора, так как ATmega48/88 имеют встроенную схему обнаружения пониженного напряжения (BOD), которая контролирует уровень напряжения питания. Для установки уровня 2.7в установите «Fuse Hight Byte» как показано на изображении ниже:

Возможные проблемы

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

Если вы все таки решили шить с подачей внешнего питания, то убедитесь, что выбрана опция 3.3в.

Кроме этого на многих программаторах с ali китайцы сэкономили на входной и выходных емкостях бортового стабилизатора 3.3в, поэтому для стабильной прошивки потребуется напаять навесом выходную емкость номиналом 0.1-1мкф, аналогично предлагаю запаять емкость прямо на переходнике 10-pin to 6pin (VCC to GND).

2) Если при прошивке получаете ошибку 

«avrdude.exe: ошибка: включение программы: цель не отвечает. 1 avrdude.exe

: ошибка инициализации, rc=-1»

а) Обновляем прошивку вашего программатора. 

или

б) Также хочу отметить, что в последнее время в ЧИП-ДИП-е продаются микроконтроллеры Atmega88PA с конфигурацией фьюзов для работы с внешним тактовым генератором. Это противоречит документации производителя для значений по умолчанию. Если закупались в указанном магазине, пытаемся подцепить внешний клок и поменять конфигурацию фьюзов.

Вложение:

avrdudeprog33.zip 1 Мбскачан 518 раз

USB — USB-драйвер только для встроенного ПО для микроконтроллеров Atmel AVR

V-USB — это программная реализация низкоскоростного USB-устройства для микроконтроллеров Atmel AVR®, позволяющая создавать USB-оборудование практически с любым микроконтроллером AVR®, не требуя дополнительного чипа.

Характеристики

  • Низкоскоростное устройство, полностью совместимое с USB 1.1, за исключением обработки ошибок связи и электрических характеристик.
  • Примеры проектов демонстрируют реализацию драйверов устройств и хостов в Linux, Mac OS X и Windows.
  • Поддерживает несколько конечных точек: одну конечную точку управления, две конечные точки прерывания/массового ввода и до 7 конечных точек прерывания/массового вывода. (Обратите внимание, что спецификация USB запрещает массовые конечные точки для низкоскоростных устройств, но V-USB в некоторой степени их поддерживает.)
  • Размер передачи до 254 байт по умолчанию, больше в качестве параметра конфигурации.
  • Поставляется со свободно используемыми USB-идентификаторами (пары Vendor-ID и Product-ID).
  • Работает на любом микроконтроллере AVR с не менее 2 КБ флэш-памяти, 128 байт ОЗУ и тактовой частотой не менее 12 МГц.
  • Не требуется UART, таймер, устройство захвата ввода или другое специальное оборудование (кроме одного прерывания, запускаемого фронтом).
  • Может работать с кварцем 12 МГц, 15 МГц, 16 МГц, 18 МГц или 20 МГц или от внутреннего RC-генератора 12,8 МГц или 16,5 МГц.
  • Функциональность высокого уровня написана на C и хорошо прокомментирована.
  • Только размер кода от 1150 до 1400 байт.
  • Вы можете выбрать Лицензию: Open Source или коммерческую. Нажмите здесь, чтобы узнать подробности.

Аппаратное обеспечение

На этой схеме показана типичная схема устройства с питанием от шины.

D1 и D2 являются недорогой заменой микросхемы регулятора напряжения 3,3 В с малым падением напряжения, такой как LE33. Работа AVR при более высоких напряжениях выходит за пределы синфазного режима многих микросхем USB. Если вам нужно, чтобы АРН работал при напряжении 5 В, добавьте стабилитроны на 3,6 В на D+ и D- для ограничения напряжения.

Макетную плату см. в метаборде.

Ресурсы документации

  • Загрузите пакет V-USB, содержащий краткое описание и несколько простых примеров кода.
  • Git-репозиторий
  • V-USB находится на github.com.
  • Форум V-USB. Обсуждайте идеи или получайте помощь от других пользователей.
  • V-USB Wiki — общедоступная вики с большим количеством дополнительной информации.
  • Также есть отличное пошаговое руководство от Code and Life.
  • Другой сторонний учебник можно найти на workinprogress.ca.
  • Статья разработчика Objective Development: Внедрение USB 1.1 в прошивку
Преимущества

по сравнению с альтернативными решениями

Почему бы не выбрать микроконтроллер со встроенным оборудованием USB? Доступно несколько из них (см. http://janaxelson.com). Или скомбинировать выбранный вами микроконтроллер с USB-чипом?

Преимущества перед микроконтроллерами с аппаратным обеспечением USB

  • Стандартные контроллеры AVR обычно легче приобрести.
  • Большинство контроллеров с поддержкой USB доступны только в SMD, что практически невозможно для любителей.
  • V-USB поставляется с бесплатной общей парой Vendor-/Product-ID.
  • Для AVR доступны хороший бесплатный компилятор ANSI-C (GNU gcc) и бесплатная система разработки для Windows (WinAVR).
  • Контроллеры
  • AVR работают быстрее, чем большинство контроллеров со встроенным USB, и стоят дешевле.
  • Автономная работа: Некоторые USB-контроллеры загружают свою прошивку с главного компьютера в ОЗУ. Они не работают без подключения к хосту.
  • Контроллеры
  • AVR имеют встроенную EEPROM.

Преимущества по сравнению с отдельным периферийным устройством USB

  • Без дополнительной оплаты.
  • Нет дополнительной аппаратной сложности: проще печатная плата, меньше отказов.
  • Нет дополнительного энергопотребления при отключении USB. Это может быть актуально для устройств с батарейным питанием.
  • Больше свободы в выборе дескрипторов USB.
  • V-USB поставляется с бесплатной общей парой Vendor-/Product-ID.
  • Используются небольшие аппаратные ресурсы: всего два-три контакта ввода/вывода.

Преимущества по сравнению с другими программно-аппаратными реализациями

Аналогичный драйвер для микроконтроллеров серии AVR можно получить у Игоря Чешко. Наш USB-драйвер имеет следующие преимущества по сравнению с драйвером Игоря:

  • Весь настраиваемый код написан на ANSI-C, поэтому его легче поддерживать.
  • Модульная концепция: проще интегрировать в существующие конструкции.
  • Немного меньший размер кода, несмотря на языковые модули высокого уровня.
  • Быстрее: все кодирование/декодирование (для USB требуется кодирование NRZI и вставка битов) выполняется в реальном времени, а не в основном цикле после сохранения потока необработанных данных.
  • Больше конечных точек, дескрипторы USB могут быть лучше настроены.
  • V-USB поставляется с бесплатной общей парой Vendor-/Product-ID.
  • Уровень соответствия стандартам задокументирован (описание ограничений и потенциальных проблем).
  • Лицензируется на условиях Стандартной общественной лицензии GNU или, в качестве альтернативы, на условиях коммерческой лицензии.

Дик Стрифленд сократил старую версию V-USB до основ. Его код легче читать и понимать, но в нем отсутствуют некоторые функции V-USB:

  • V-USB поддерживает до 4 конечных точек. Это позволяет реализовать устройства, соответствующие классу устройств HID или CDC.
  • V-USB проходит тесты в тестовой утилите usb.org.
  • V-USB поддерживает множество различных тактовых частот, некоторые даже с внутренним RC-генератором.

Как писать тесты и симуляторы для микроконтроллеров AVR

Всем привет!

В этой статье мы рассмотрим основные методы моделирования и тестирования прошивки для микроконтроллеров AVR.

Зачем нужно тестировать микроконтроллеры AVR?

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

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

Цена ошибки в аппаратном проекте

В этой статье мы рассмотрим распространенные ошибки при проектировании электронных устройств и пути их решения. Посмотрим, как рассчитать стоимость отката партии устройств, ознакомимся с основным циклом прототипирования.

Сравнение тестирования программных и аппаратных проектов

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

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

Какие виды тестирования можно использовать в зависимости от задачи?

Существует три основных варианта запуска тестов на встроенных системах. Перечислим их все:

  1. Локальное тестирование (на хост-компьютере).
    Преимущества: тесты запускаются и работают быстро, нет необходимости доступа к устройству. Недостатки: ограниченная область тестирования. Он не будет работать с внешней периферией. Хорошим примером использования этого метода является тестирование независимого от платформы вычислительного алгоритма, для которого требуется набор данных с датчиков. Тестирование такого алгоритма на реальном источнике данных было бы очень неудобным. Набор данных лучше подготовить заранее. Вы можете сделать это, используя небольшую программу регистрации необработанных данных датчика.
  2. Тестирование MCU в моделировании.
    Преимущества
    : для тестирования не требуется устройство. Вы можете запрограммировать свою собственную среду для MCU.
    Недостатки:  ограниченная точность моделирования MCU и окружающей среды, сложность создания и настройки такого эмулятора.
  3. Тестирование прошивки на реальном MCU.
    Достоинства:
    есть возможность работы с периферией МК, прошивка получится так же как и в продакшене.
    Недостатки : нужно иметь готовое устройство со всей периферией и электронными компонентами. Циклы тестирования займут много времени, так как вам придется постоянно перепрошивать MCU. Автоматизировать тестирование с помощью этого метода очень сложно.

В этой статье мы разберем первые два метода как наиболее перспективные для автоматизации.

Локальное тестирование

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

Рассмотрим пример для микроконтроллеров AVR с возможностью локального тестирования платформонезависимой части прошивки.

Тестирование прошивки, совместимой с микроконтроллером AVR

Для микроконтроллера AVR наиболее удобной и производительной средой разработки является Atmel Studio . К сожалению, эта среда не является кроссплатформенной и доступна только для Windows.

Для ясного понимания примеров в этом проекте я использую инструменты с открытым исходным кодом. я полагаюсь на VSCode в Ubuntu для исходного кода, AVR GNU Toolchain для компиляции и компоновки прошивки, gcc для компиляции тестов и симулятора.

Процесс сборки проекта (компиляция, компоновка, прошивка) выполняется с помощью утилиты  make  . Этот подход позволяет мне автоматизировать выполнение тестов и загрузку прошивки в целевую систему.

Для примера рассмотрим прошивку для микроконтроллера Atmega1284 , реализующую функционал простого термометра.

Измерение температуры выполняется путем считывания напряжения с делителя напряжения (который включает в себя термистор), преобразования значения АЦП в значения температуры и отображения его на ЖК-экране 1602 ( hd44780 ).

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

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

Рассмотрим пример нативного тестирования функционала прошивки.

Ссылка на репозиторий здесь.

Для компиляции вам потребуется AVR GNU Toolchain.

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

В локальном тестировании есть два раздела main.c :
1. Для тестирования функциональности.

2. Для реализации основного цикла программы.
Рассмотрим тестирование преобразования значений АЦП в температуру (файл src/tests/test.c):

При реализации такого теста необходимо разделить Makefile на две секции: в первой секции будет использоваться компилятор из AVR Toolchain — avr-gcc (компилятор для микроконтроллеров AVR), а второй раздел будет использовать gcc для компиляции платформо-независимых исполняемых файлов.

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

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

После успешной компиляции исполняемый тестовый файл появится в каталоге AVR_Testing/builds/tests/ .

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

Тестирование с помощью среды Unity

Давайте проведем те же тесты с помощью Unity, простой среды для тестирования встроенных систем.

В том же репозитории проекта (ветка unity-framework) вы найдете пример использования фреймворка.

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

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

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

Еще одно замечание: чтобы использовать unity в своем проекте, нужно указать абсолютный путь к нему в переменной $(UNITY_ROOT) вашего Makefile .

Пример исходника testcase:

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

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

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

После того, как вы нажмете make test , Ruby сгенерирует файлы тестовых точек входа, они будут скомпилированы и запущены.

Симулятор с использованием тестирования

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

Для микроконтроллеров с архитектурой AVR существует несколько систем моделирования, перечисленных ниже:

  • Atmel Studio — среда разработки для микроконтроллеров AVR, о которой я упоминал ранее. (Тот, который работает только для Windows.) Он включает в себя встроенный симулятор практически для всех моделей микроконтроллеров AVR и удобный набор инструментов для создания и управления как внутренними, так и внешними периферийными устройствами. Недостатком является отсутствие кроссплатформенности и громоздкость — сложно автоматизировать симуляцию.
  • Simulavr — это кроссплатформенный проект C/C++ с открытым исходным кодом, предлагающий собственные системы моделирования микроконтроллеров AVR. Есть несколько моделей микроконтроллеров, возможность писать отладочные скрипты на Tcl/Tk и Python. К недостаткам можно отнести сложный механизм добавления новых моделей МК в симулятор, сложную документацию и то, что проект несколько лет не поддерживается.
  • simavr  — относительно новый (и в то же время достаточно гибкий) кроссплатформенный проект для написания симуляторов AVR MCU на C/C++. Из-за схожего названия его можно спутать с предыдущим инструментом, однако это совершенно разные проекты. Simavr имеет большое количество моделей микроконтроллеров AVR, архитектура позволяет легко добавлять новые устройства и модели. Он также имеет интеграцию с PlatformIO (расширение vscode для разработки встроенных систем) и наглядные примеры того, как использовать инструмент с различными видами периферийных устройств. Недостатки: отсутствие описания сборки проекта и довольно непонятная документация.

Выбрал симавр как наиболее перспективный вариант.

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

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

Вот символическая ссылка для создания исполняемого файла:

В папке simavr/examples вы найдете папки с исходниками симуляций, а в папке parts   находятся исходники обычных периферийных устройств.

Для большего эффекта присутствия можно запускать примеры с графикой, например board_hd44780, board_ssd1306.

Simavr предоставляет широкий набор инструментов для следующих типов задач:

  • Разработка пользовательских виртуальных плат с микроконтроллерами и периферийными устройствами.
  • Разработка виртуальных электронных компонентов.
  • Управление поведением симуляции на временных сегментах до такта микроконтроллера.
  • Подключение отладчика avr-gdb.

Полное описание возможностей симулятора можно найти в репозитории проекта.

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

Для примера тестирования рассмотрим тесты того же термометра на симуляторе (см. ветку simavr-testing).

Структура каталога src/tests/sim следующая:

Схема виртуальной платы:

Simavr имеет очень простую, хотя и не совсем очевидную структуру проекта.

Рассмотрим самые важные моменты реализации платы:

main_wrapper.c — накрутка точки входа для прошивки. Он предоставляет компилятору и симулятору дополнительную информацию о прошивке, напряжении питания и других параметрах (полное описание всех параметров можно найти в  simavr/simavr/sim/avr/avr_mcu_section. h ).

adcToLcd.c содержит исходники платы, а также описание манипуляций с периферией, портами данных и временными интервалами работы между действиями периферии.

При инициализации прошивки плата ищет указанный elf-файл прошивки, затем создает MCU и заливает в него прошивку.

Для инициализации и работы с дисплеем в каталоге запчастей найдите исходники ЖК-экрана на hd44780 контроллер (для проекта я просто взял их из simavr/examples/parts и переделал функцию вывода данных на экран для парсинга и возврата двойного значения).

Далее применяется функция подключения периферийных частей к контроллеру setConnections , который использует такие методы как:

— возвращает указатель на уникальный идентификатор PIN порта ввода/вывода. Аргументы: идентификатор контроллера, порт, PIN.

(подробности см. в simavr/simavr/sim/sim_io.h).

— это функция подключения одного PIN I/O (периферийного или микроконтроллерного) к другому.

Пример использования этой функции:

— подключение PORTD PIN 4 MCU к RS PIN LCD.

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

— принимает идентификатор порта и требуемое значение. Значение может быть равно 1 или 0 для цифровых входов или хранить значение в милливольтах для аналоговых входов.

Simavr имеет удобный механизм установки времени для внешних событий путем регистрации таймеров. При срабатывании таймера выполняется функция обратного вызова.

Есть функция для регистрации таймера:

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

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

Для выполнения каждого тика MCU используйте:

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

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

Чтобы не перегружать код двумя методами тестирования, было принято решение вынести тест-кейс в отдельный файл adc-temp_test.c  , который подключается к проекту как при компиляции тестов на Unity, так и при использовании симулятора.

Чтобы скомпилировать и запустить симуляцию, просто укажите абсолютный путь к simavr в src/tests/sim/Makefile , в переменной $(SIMAVR) и выполните его в каталоге src:

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

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

Для более крупных проектов вы можете легко интегрировать симулятор с платформой Unity и автоматизировать процесс тестирования с помощью CI/CD.

Тестирование прошивки на реальном оборудовании

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

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

Заключение

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

Как начать разработку для Raspberry Pi с помощью Qt

Как начать разработку для Raspberry…

Как начать разработку для Raspberry Pi с помощью Qt

Итак, мы выбрали Raspberry Pi 3B+. Это отличный одноплатный компьютер размером с банковскую карту. Имеет 4 порта USB, модуль WiFi, 1 Гб оперативной памяти,…

Аппаратное обеспечение

Кирилл Авдеев Инженер-программист

13 мая 2021 г. 14 мин чтения

Прототипирование с помощью EasyEDA ► Часть II: Простая схема

Прототипирование с помощью EasyEDA ► Часть II:…

Прототипирование с помощью EasyEDA ► Часть II: Простая схема

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

Аппаратное обеспечение

Антон Козлов Инженер по оборудованию

14 декабря 2021 г.

alexxlab

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

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