Как в proteus загрузить hex файл
В прошлой статье мы с вами рассмотрели, чем Ардуино отличается от МК AVR, какие бывают типы Ардуино, а также научились устанавливать драйвер последовательного порта CH340G на Ардуино. Как я уже говорил, в наших статьях мы будем рассматривать китайские варианты Ардуино, собранные на микросхеме CH340G.
На оригинальных Ардуино используются уже совсем другие микросхемы последовательного порта.
Конечно можно! Для этого на Ардуинке есть специальные выводы для прошивки МК, на которой она собрана:
Распиновка выглядит вот так:
Ну а далее действуем как обычно: шьем наш МК. Как это сделать, можно прочитать в этой статье.
В одной из предыдущих статей, посвященных МК AVR, мы рассмотрели, как можно провести эмуляцию схемы на МК AVR в программе Proteus, но можно ли это провести с платой Ардуино? Да, можно. Для этого нужно просто установить в папку с библиотеками программы Proteus, библиотеку для работы с Ардуино. Его надо вставить в вашу библиотеку Proteus.
Получение HEX-файла в Arduiono-среде.
Предположим, у нас уже есть код программки, которую будем лить в Ардуинку. Я же воспользуюсь готовым кодом. Для этого беру готовую программку Blink.
Вот она открылась в новом окошке:
Затем нам нужно откомпилировать наш код.
В результате у нас появятся вместе с сохраненным проектом еще два файла. Берем для загрузки в Proteus самый длинный по названию файл
Открываем Proteus. Находим 4 элементы для построения схемы. Резистор на 300 Ом, желтый светодиод, землю и саму плату Ардуино.
Нажимаем на Play внизу слева рабочего окна Proteus и наслаждаемся морганием светодиода)
В следующей статье мы будем зашивать уже саму Ардуину в реале. Не пропустите! ;-)
Proteus – это универсальная программа, с помощью которой можно создавать различные виртуальные электронные устройства и выполнять их симуляцию. Она содержит огромную библиотеку аналоговых и цифровых микросхем, датчиков, дискретных элементов: резисторов, конденсаторов, диодов, транзисторов и т.п. Также имеется широкий набор компонентов оптоэлектроники: дисплеи, светодиоды, оптопары и др.
Как и в любом другом аналогичном софте, предназначенном для симуляции работы электрических цепей, данный софт имеет ряд виртуальных измерительных приборов: амперметры, вольтметры, ваттметр, осциллограф, логический анализатор, счетчик и т.п.
Также в Протеусе встроены инструменты для автоматизированной разработки печатных плат и для создания их 3D моделей.
Для симуляции нашей первой программы, из библиотеки нам понадобится только микроконтроллер ATmega8, резистор и светодиод.
Настройка Proteus 8.4
Любая настройка начинается с запуска. В появившемся окне кликаем по значку диода с конденсатором Schematic Capture (Схемотехника).
После этого откроется окно с пустым полем.
Теперь добавим микроконтроллер ATmega8, резистор и светодиод.
По умолчанию установлен подходящий режим Component Mode поэтому, чтобы попасть в меню выбора электронных и других элементов, достаточно кликнуть по кнопке P, расположенной на панели DEVICE (устройство). После этого откроется окно, в котором необходимо выбрать в меню Category (Категории) Microprocessors ICs (микропроцессоры), в Sub-Category (Подкатегории) – AVR Family. Далее в окне Results находим и выделяем МК ATMEGA8. Кликаем по кнопке OK.
После этого он появится в меню окна DEVICE и его уже можно перетягивать мышкой в рабочую область.
Аналогичным образом добавляем резистор и светодиод.
Светодиоды находятся в категории Optoelectronics (Оптоэлектроника) и далее в подкатегории LEDs. В данном примере он выбран зеленого цвета LED-GREEN.
Теперь собираем схему, как показано на рисунке ниже. К выводу МК PC0 подсоединяем резистор R1, который соединяем с анодом светодиода D1. Катод светодиода соединяем с «землей». Элемент «земля» находится в меню вкладки Terminals Mode.
Чтобы изменить значение сопротивления резистора R1 нужно дважды кликнуть мышкой по нему. В открывшемся окне устанавливаем 300 Ом в строке Resistance (сопротивление).
Обратите внимание, что выводы микроконтроллера в Proteuse для удобства объединены в отдельные группы по портам. Однако это не соответствует расположению их в реальном МК. Кроме того отсутствуют выводы, к которым подается напряжение для питания МК. Эта функция установлена по умолчанию.
Запись программы в память микроконтроллера
Теперь осталось записать наш код в виртуальный МК. Дважды кликаем по нему мышкой и в появившемся новом указываем путь к файлу с кодом. Место расположения файла находим кликнув по значку в виде открытой папки в строке Program File.
В папке с проектом находим папку Debug и в ней выбираем файл с расширением HEX. После этого нажимаем кнопку Открыть.
Теперь все готово. Для начала симуляции нажимаем кнопку Run the simulation треугольной формы в левом нижнем углу окна программы. Светодиод засветился, значить мы написали верный код.
Маленький красный квадратик возле 23-вывода микроконтроллера, указывает на то, что на выводе присутствует высокий потенциал, т. е. + 5В. Обратите внимание, высокий потенциал всегда имеет 29-й вывод RESET. Поэтому, в случае необходимости, для сброса или перезапуска программы, вывод RESET нужно кратковременно соединить с землей.
На этом симуляцию в Proteus мы закончим. И теперь нам осталось записать код в реальный микроконтроллер ATmega8.
Еще статьи по данной теме
у меня сразу все заработало, хотелось бы увидеть продолжение уроков
Протеус и обвязка MCU
Протеус, как мне кажется, создан для макетирования и тестирования работы софта в первую очередь. Возможно именно поэтому он допускает множественные упрощения в создании схем. Ниже приведен абсолютно достаточный набор для тестирования общения с ПК по UART/USB. Хочу снова обратить внимание, что такая схема работать будет только в Proteus'е.
Все проекты приложены к статье, так что установив программу, можно сразу все попробовать.
U(S)ART
Тема избита, но все же позволю себе описать ее еще раз.
Чтобы подключить к нашему виртуальному микроконтроллеру putty или любую другю произвольную программу, нам нужно сделать несколько действий.
Модуль COMPIM использует виртуальный порт, чтобы к нему подключиться, нужно создать ещё один и соединить их как нуль модем.
Хорошим помощником тут будет бесплатная утилита com0com.
Там создаем два виртуальных порта, в моем случае это COM 3 и 4. Один подключаем к Proteus'овскому COMPIM, второй уже используем «снаружи»
Окно программы
А вот так это будет выглядеть в devmgmt.msc (Диспетчере устройств)
Теперь все готово к тесту.
Настроим COMPIM устройство (правый клик — Edit properties).
Напомню, что у меня com0com эмулирует порты COM3/COM4
На всякий случай, приложу картинку с настройками микроконтроллера
Включаем Putty, переводим его в режим Serial и подключаем к COM4. Теперь… нажми на кнопку — получишь результат
Печатаем текст в окне терминала и микроконтроллер делает echo нам назад. По нажатию enter переводим каретку + новая строка.
Backspace так же работает. Сразу вспомнилось как чатился с друзьями по Hyper Terminal, часами занимая телефонную линию…
Теперь можно изменяя код поиграться с микроконтроллером.
USB HID
Сделать свое USB устройство оказалось делом непростым для меня тогда. Тестировать мы будем HID устройства, то есть, в большинстве случаев — устройства ввода.
Очень хотелось мне сделать автоматический ввод пароля, а так же блокировку компьютера, когда я отошел, и разблокировку, когда я подошел. Ну и кучу чего еще, что можно было реализовать посредством виртуальной клавиатуры.
Кучу полезной информации по HID можно найти тут. Читать — не перечитать.
Вкратце: каждое USB HID устройство имеет специальное описание, дескриптор. Которое описывает что это за устройство, как им можно управлять, сколько оно потребляет от шины или же имеет самостоятельное питание и кучу другой информации. Поэтому нам нужно сделать правильное описание, чтобы ОС могла понять, что это клавиатура и могла с ней работать.
Но сначала, чтобы Proteus мог пробросить свой виртуальный USB хост в наш реальный ПК, необходимо поставить виртуальный драйвер, он идет в комплекте
Чтобы устройство работало как полноценное FullSpeed USB 2.0, необходимо включить PLL и настроить его соответствующим образом.
В Proteus'е так же надо выставить частоту процессора как 96МГц.
Все подробно описано тут
Дескриптор
В нашем случае от «стандартного» декриптора изменений немного:
Мы изменили VID/PID, указали, что у нас буфер ввода/вывода на 8 байт каждый и, собственно, указали, что у нас устройство класса «клавиатура» и использовать его нужно именно так.
Все названия переменных говорят сами за себя.
Этот дескриптор добавляется в проект, и будет автоматически использован при сборке.
По сути вся работа заключается в заполнении соответствующего буфера и в отравке его в ПК. Не сложнее, чем с UART. Вся работа выполняется в подпрограмме прерывания. В комплекте с IDE уже идут готовые библиотеки работы с HID.
Тут следует пояснить, что scan коды клавиатуры отличаются от ASCII, но чтобы не перегружать код (у нас же hello world), я обошел сие неудобство примитивным образом. Работать будет только для букв в нижнем регистре. Желающие могут сами сделать преобразование. Подобный девайс я использую для KVM На работе, беспроводной удлинитель клавиатуры — наши D-Linkовские KVM не хотят понимать USB донглы беспроводные.
Теперь открываем Notepad, запускаем Proteus (предварительно кликаем по виртуальному штекеру — USB разъем «вставится»), сразу переводим фокус мышкой на Notepad и наблюдаем, как наше творение печатает слово habrahabr.
А в диспетчере появилось наше устройство
Теперь можно на основе этого добавлять что-то свое.
Пару слов про то, как это работает.
Для ввода-вывода с клавиатуры зарезервировано 8 байт:
0 Модификатор
1 Не используется
2 Клавиша 1
3 Клавиша 2
4 Клавиша 3
5 Клавиша 4
6 Клавиша 5
7 Клавиша 6
Модификаторы, это спец клавиши Ctrl, Shift, Alt. Их можно объединять. Например, для комбинации Ctrl Alt Del:
Modifier: 0b00000101 Ctrl, Shift, Alt
Key code: 0x4c (клавиша Delete)
Следует помнить, что сразу после передачи данных, необходимо стирать буфер USB, иначе получится эффект залипшей клавиши. То есть отправлять на ПК восемь нуль байт. В примере это делает подпрограмма clearUSB
Подробнее про сканкоды описано в appnote от microchip
Точно так же можно создать обычное HID устройство и передавать/принимать байты с ПК и по логике работы это почти ничем не отличается от того же UART. Но это уже требует отдельной работы, например, с libusb со стороны ПК.
Ethernet
Не отражено в заголовке, но про это тоже стоит сказать.
К сожалению, данный пример не будет завершенным, поскольку это тема отдельного разговора.
Но, по крайней мере, я опишу как настроить сам симулятор, и кое-что попробовать все же получится.
Тут как раз пример того, что работает в железе, но не всегда работает в симуляторе. В Proteus реализованы VSM модели для микросхем ENC28J60 и RTL8019. Да-да, тот самый чип, который всем нам был знаком по бюджетным сетевым картам. Использование ENC описано достаточно широко и проблем тут быть не должно. Например, уважаемый Lifelover aka Redsh все давно и преподробнейше описал. Поэтому, чтобы не было скучно, возьмем 8019, тем более я пишу под неё софт для использования совместно с Z80.
Как и в случае с USB, нам надо установить драйверы, но теперь WinPCAP. Они лежат в папке Virtual Network, рядом с драйверами USB. Или скачать с сайта самую свежую версию
После этого у нас появится новая виртуальный сетевой интерфейс с адресом 192.168.95.1, который, разумеется, можно поменять.
Cделаем на UART отладочный интерфейс по уже известной нам схеме.
HINT: Если вас раздражают надписи TEXT — в Description компонента поставьте пробел
В свойствах микросхемы пропишем номер или IP нашей виртуальной сетевухи и можно поменять кое-какие настройки.
В моем случае это 192.168.50.1 (я изменил)
Далее дело за софтом. Полноценный драйвер для 8019 у меня пока не готов, да и это тема отдельной большой статьи, хотя вряд ли такой анахронизм кому-то интересен. Но даже без настройки протоколов (IP адрес у нас сейчас 0.0.0.0), так как я разрешил ICMP/Broadcast в регистрах, мы можем попинговать какой-нибудь левый адрес в нашей подсети, и сетевая карта микросхема радостно помигает нам светодиодом при получении пакета. После каждой попытки, используйте новый адрес, а то ARP таблица же кэшируется.
Вместе с проектами приложены готовые HEX, так что компилятор можно даже не качать, если нужно просто проверить, что все работает.
Чтобы симуляция работала — не забывайте указать микроконтроллеру где лежит ваш HEX файл.
Proteus VSM это пакет сквозного проектирования электрических схем, в котором можно построить принципиальную — электрическую схему, просимулировать ее работу (ProSpice), если она содержит микроконтроллер — тут-же написать программу для него, отладить программу (козырь Протеуса), после всех этапов отладки схемы/программы (при помощи модуля ISIS), можно переходить (не отходя от кассы) к созданию печатной платы, при помощи модуля ARES.
Кстати Proteus, в греческой мифологии, царь обладающий даром предсказания и перевоплощения.
Что подрозумевается под словами пошаговая отладка: определение состояния ключевых параметров системы, в определенный момент времени.
Если говорить о схемотехнике это: ток, напряжение, емкость, потребляемая мощность
и другие параметры, если же это код: состояния регистров, последовотельность выполнения алгоритма, промежуточные результаты и прочие данные.
Здесь я бы хотел подчеркнуть что, реализуя отладку (электрическую/программную) при помощи виртуальных устройств (буть то Протеус, Матлаб и пр.) желательно разделить схему/программу на самостоятельные части, и стремится получать при этом минимально необходимое количество информации — почему:
во первых — большие объемы информации еще надо обработать
во вторых — большой проект потребляет много ресурсов ПК
в третьих — не забывайте что это всего-лишь симуляция
Другими словами сконцентрировать внимание на определенной неопределенности неполадке.
Но обо всем по порядку.
В Интернете можно найти кучу туториалов по Протеусу: как установить, создать проект, печатную плату и т.д. На EasyElectronics уже есть статья DI HALT'а по данной программе.
В чем же отличие этой статьи?
Здесь я попытаюсь перечислить некоторые не столь известные инструменты и их применение, очень даже удобные в отладке разнообразных девайсов.
Breakpoint generators
В Протеусе есть набор виртуальных инструментов (так сказать домашняя лаборатория) которые не заменят реальные, но, позволят понять сам процесс, и причины происходящего. В этот перечень входят всякие вольтметры, амперметры, осцилограф, виртуальный RS232 терминал и прочие полезные приборы, при помощи которых можно следить за исполнением задуманного в режиме реального времени. Также имеются разные источники напряжения (что в реальности не всегда так), графы (Graphs: ANALOGUE, DIGITAL, FREQUENCY, FOURIER, ..), токовый щуп и щуп напряжения, и разные записывающие устройства (для off-line обработки, но с ними я не имел дела).
Все вышеупомянутые устройства являются самыми востребованными а значит хорошо известными, поэтому особо останавливаться на них не буду. Вашему вниманию я бы хотел представить, другие (надеюсь) малоизвестные инструменты, найти которые можно в библиотеке компонент, категории Debugging Tools
Real time digital breakpoint generator (RTDBREAK)
Real time analog current breakpoint generator (RTIBREAK)
Real time voltage breakpoint generator (RTVBREAK)
RTDBREAK — в Протеусе имеються несколько видов сего инструмента, которые между собой отличаються лишь количеством пинов (1, 2, 3, 4, 8 и 16 пин). Принцип их действия заключается в генерации прерывания (breakpoint) при появлении на данной линии или группе линий, определенного логического состояния, которое можно задать в его свойствах.
RTIBREAK — генерирует прерывание при превышении током определенного уровня (который естественно можно задать). Примеров применения можно привести уйму: при отладке устройств с малым потреблением, разных токовых зеркалах, датчиках и прочих схемах где требуется повышенное внимание за током.
RTVBREAK — генерирует прерывание при превышении напряжением определенного уровня (задается).
Также полезен при отладке устройств с малым потреблением, разных аналоговых схемах и т.д.
Как показано на рис. справа, PD7 подлючен к базе транзистора напрямую (RTI не в счет), без токоограничивающего резистора. Если учесть что из одного пина максимум разрешается выкачать 40мА, то в этом случае (RTI сработал при 41.7мА) — пину, а может и порту кирдык.
Эти генераторы, как и все остальные приборы можно подключать к проводам, ножкам разных МК, задав при этом пороги срабатывания.
При появлении прерывания — симуляция останавливаеться, и в окне Simulation Log можно посмотреть кто нас побеспокоел. В этот момент времени, путем простого клика мышкой по устройству (транзистор, диод, операционный усилитель, микроконтроллер… да на все что угодно), или правый клик по устройству и выбрать Operating Point Info, можно проверить все интересующие параметры: токи, напряжения, потребляемая мощность, уровни входных/выходных сигналов, поковырятся в регистрах и прочем фарше микроконтроллеров, при помощи разных окон из категории Debug.
На случай если вдруг у вас в библиотеке не окажуться эти инструменты, можно воспользоваться щупом напряжения. В свойствах щупа можно указать уровень напряжения при котором щуп сгенерит прерывание, логический уровень срабатывания (всего два 1 и 0) а также время после истечения которого он сообщит о прерывании (breakpoint). Токовый щуп, к сожалению, не обладает сией опцией. Если хотим моментально узнать о прерывании, задержку устанавливаем равной нулю.
Можно посмотреть маленький видео-урок с оффсайта (раздел Hardware Breakpoints)
Диагностика
Думаю со мной все согласяться, самым большим преимуществом Протеуса перед остальными софтварами, является возможность просимулировать/отладить МК разных производителей (да еще увешанный кучей побрикушек), чье количество от версии к версии возрастает.
Существует ряд методов позволяющих, без применения Протеуса довольно неплохо отладить МК код.
IDE производителя
Имхо, преимущество Протеуса, к примеру перед AVRStudio, является тот факт что имея аналогичные инструменты (кроме поддержки JTAG), он позволяет визуально (при помощи тех-же СИД-ов), в режиме реального времени (не всегда конечно), отладить всю конструкцию целиком (схема может содержать несколько микроконтроллеров разных производителей, главное чтобы ресурсов ПК хватило).
ПК компилятор
Большинство кода (не ассемблерного) написанного под микроконтроллеры, можно отлаживать при помощи аналогичных ПК компиляторов (Си — он и в Африке Си). У этого метода есть один большой плюс, если код не будет работать на ПК, то почти всегда тоже самое можно говорить и о микроконтроллере.
printf()
Как кто-то подметил: "… еще не придумали отладчик лучше чем printf()", с чем я полностью согласен: удобно проверять точки прохождения алгоритма, выполнение тех или иных условий, вывод вычислений и т.д. Но к сожалению printf() не всегда применим к микроконтроллерам.
Для отладки кода, я предпочитаю использовать файлы с расширением *.hex и *.cof, потому-что их генерят большинство IDE (как минимум для AVR).
Кстати, Labcenter Electronics выпустила VSMStudio, которая характеризуеться как: Универсальная ИДЕ для Протеуса (все тоже самое что и в остальных IDE, но отладочные файлы заточены специально под Протеус, что повышает качество отладки), но насколько я понял она еще очень сырая.
Как вы уже знаете в категории Debug главного меню находятся основные инструменты предназначенные для отладки кода. В нижней части (см. рис. выше) находятся куча окон при помощи которых можно заглянуть во внутренности микроконтроллеров. Наиболее востребованным является Watch Window, в нем можно указать регистры, за содержимым которых мы хотим наблюдать. Также там можно найти окна предоставляющие информацию о содержимом Flash, RAM, EEPROM памяти, I/O регистров и РОН. Примерно такие-же окна есть практически в любой IDE.
Тогда в чем же отличие спросите вы?
В данной категории есть еще одна строчка: Configure Diagnostics . , напротив нее еще нарисован жук, которая представляет особый интерес, так как сей жук выдает довольно ценную (тчательную) информацию о всех выполняемых операциях выбранного нами модуля, будь-то самостоятельный чип или периферия какого-нибудь МК.
Чтобы узнать какая микруха может воспользоваться услугами жука, нужно щелкнуть по ней правой кнопкой мыши. Кстати там-же есть еще одна функция: Display Model Help (Вывесть справку о модели), где можно узнать: о свойствах модели, ее ограничения и еще разную инфу.
Информация выдаваемая данной утилитой (Diagnostics), сводится примерно к следующему:
— перечисление всех ресурсов устройства
— вывод параметров инициализации устройства
— вывод информации об начале какой нибудь операции (время начало, если это АЦП то номер канала, референс и т.д.)
— вывод информации об окончании операции (время окончания, результат операции — если это АЦП то полученное значение, затраченное время и т.д.)
Не знаю как вам, но мне это напоминает все тот-же printf().
Настройка Диагностики
Выбираем в категории Debug->Configure Diagnostics . (или индивидуально по каждой микрухе жмем на жука). Открываеться окно в котором выбираем желаемую ИС, а уже в ней ту функцию/периферию за которой хотим понаблюдать.
затем можно поставить галочку Suspend simulation whenever an event is logged?,
если не хотим пропустить ни одного прерывания/события. В конце указываем (в секундах) когда начать и когда окончить диагностику и жмем OK.
Советую не ставить длительные промежутки времени, если намечаеться большое число событий, так как комп начнет ни хило тормозить.
Далее, запускаем симуляцию и ждем пока не произойдет какое нибудь событие.
Когда событие происходит, загораеться кнопка Pause, а счетчик Message(s) окна Simulation Log увеличиваеться. Далее, приступаем к снятию показаний со всяких устройств, просмотр регистров, проверки правельного исполнения задуманного и т.д.
Эти инструменты, плюс все перечисленные (но не описаные), позволяют с большой вероятностью быстро локализовать, отладить большинство повседневных багов встречающиеся в различных приборах, тем самым экономя уйму времени.
Читайте также: