Отладка программ для AVR через виртуальный COM порт Proteus

Всем привет. Заранее боясь прослыть некромантом, представляю краткую заметку о способе отладки программ для микроконтроллеров avr, использующих связь с компьютером или другим мк через uart. Предназначен для тех, кто о нем не знает, на революционность не претендую.

Преимущество способа в том, что не придется тратить время и ресурс флеша на бесконечные перепрошивки настоящего контроллера в поисках ошибок в программе. Почти все знают про Proteus а многие еще знают о том, что в числе его компонентов имеется COMPIM — механизм получения доступа к реальному COM порту компьютера из симулируемой схемы. Он позволяет прицепиться к ногам uart виртуального микроконтроллера и отправлять/получать данные физического порта. У современных компьютеров железных портов почти не встречается, в лучшем случае это PLS-10 на мат. плате. Однако, для этого способа хляютподходят и USB-UART преобразователи.
Смысл манипуляций заключается в том, чтобы отправлять в модель данные не из внешнего мира а из программы на компьютере. Это позволяет оперативно составлять запросы для отсылки в мк в любой форме, благо полно терминальных программ, некоторые умеют добавлять CRC и выполнять пользовательские макросы. Второй случай — у вас уже готово приложение, отсылающее данные в мк, поэтому удобно посылать данные в модель а не в реальный мк. Это значительно ускоряет отладку.
Есть как минимум два способа осуществить этот механизм.
1 — скачиваем программу com0com. Эмулятор портов, соединенных нульмодемным кабелем. Создает пару портов в системе. То что передается на один порт, принимается вторым и наоборот. Первый порт выбирается программой передатчиком (терминал, спецпрограмма и т.д.), второй присваивается в Proteus порту COMPIM в настройках. Следует учесть, что COMPIM работает с портами 1-4. Этим способом я пользуюсь не работе.
2 — вытекает из того, что я пользуюсь дома 64 разрядной версией Windows, на которой мне не удалось добиться работоспособности программы com0com. Решение выглядит так

Мы берем два преобразователя и соединяем их rx1-tx2 rx2-tx1. В нашей программе открываем порт 1 а в Proteus порт 2. USB-UART позволяет назначить ему любой номер порта, в данном случае я назначил 4.
Такой способ имеет дополнительное преимущество — учитываются задержки в преобразователях.
Кусок схемы с сабжем:

Ну и видос как это работает: программа на мк просто принимает пакет из Terminal by Bray и печатает его в виртуальный терминал Proteus и заодно обратно в терминал. Видно, что терминал успешно получает данные из модели
youtu.be/yOVPX4JmQpA
Метод ограничен моделями микроконтроллеров которые присутствуют в Proteus. С другой стороны, при определенном уровне абстракции можно отладить алгоритм и портировать на нужный контроллер но это изврат.
Разумеется, следует учитывать возможные глюки моделей.
  • +3
  • 06 июня 2015, 02:42
  • XOR

Комментарии (11)

RSS свернуть / развернуть
www.eterlogic.com/Products.VSPE.html
для 64 бит надо кряк, хотя вроде подпись подлинности лицензий можно отключить
не знаю, чего они там бабло просят и обвиняют мс
0
Отличная программа. Тоже пользуюсь ей. В x64 купить себя просит только при запуске, но потом работает без ограничений.
0
не придется тратить время и ресурс флеша на бесконечные перепрошивки настоящего контроллера
Разве 10000 так мало?
0
Много. Но надо подключить отключить программатор, выбрать файл прошивки, дождаться готовности программатора, в конце концов. А в данном случае нажать F7 в студии после правки, перейти в Proteus и остановить-запустить.
0
Здесь лежит подписанный com0com, на win7 x64 работает. Забирайте, пока google code не закрыли.
+3
Благодарю, надо попробовать.
0
Извиняюсь, может у вас найдется еще и здоровый comport toolkit?
0
хляют
??? =0
Земляной провод между преобразователями в этом случае очевидно лишний.
+1
Спорить не буду. Избыток не так страшен как недостаток.
0
С другой стороны, при определенном уровне абстракции можно отладить алгоритм и портировать на нужный контроллер но это изврат.
Проиграл вслух. Вообще-то, нормальная практика — написать протокол и симулировать его работу в чем-нибудь гораздо более удобном, а потом просто заменить функции отправки и принятия сообщения. Там даже ком порт не нужен, если уж на то пошло.
0
здесь видимо весь интерес как раз в том, чтобы адекватно настроить порты USARTа на правильную работу, ну и чтобы душу грело от вида, что все мерцает и прыгает.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.