Arduino/CraftDuino и PROTEUS


Лично мне, в Arduino IDE очень не хватает отладчика – с этим обязательно нужно что-нибудь сделать 🙂

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

Например, замечательная программа – ISIS PROTEUS:
— PROTEUS может симулировать несколько МК в одном устройстве (AVR, PIC, Motorola, ARM)
— в поставку PROTEUS входит очень много моделей компонентов.
— можно симулировать любые электронные устройства и не содержащие МК
PROTEUS
Т.о. если нужно проверить какую-нибудь идею или вариант реализации – можно не искать детали, а просто «собрать» схему в PROTEUS-е и посмотреть как она будет работать 🙂
Симуляция PROTEUS-а очень реалистична — наглядно видна работа устройства,
напряжения и токи в нем.
Причём PROTEUS — это полная система проектирования — от идеи — до результатов работы устройства и файлов для платы.

Как всегда – об этой системе можно почитать ДиХальта.
Итак, попробуем смоделировать Arduino 🙂

Простейший вариант Arduino/CraftDuino представлен на рисунке выше 🙂
Да – никаких источников питания и стабилизаторов – просто микроконтроллер и светодиод, который подключён к 19 ножке МК, она же 5-й вывод порта B – она же, согласно Arduino Pin Mapping – digital pin 13 🙂
Atmega168 pinmapping
Можно чуть усложнить схему, подключив виртуальный терминал:
PROTEUS
— теперь мы сможем видеть данные, которые наша виртуальная ардуина шлёт в последовательный порт 🙂

Если на компоненте дважды щёлкнуть левой кнопкой мышки, то появится окошко, в котором можно установить различные параметры.
Например, для микроконтроллера:
PROTEUS
Чтобы загрузить в микроконтроллер программу – через поле “Program File” –указываем путь к .hex-файлу.
Укажем МК частоту 16MHz и загрузим стандартный Blink.

Запускаем симуляцию и видим, как меняется напряжение на светодиоде:

Для наглядности – можно в библиотеке компонентов выбрать светодиод с анимацией:

Теперь можно проверить работу других обучающих скетчей.
Например, светодиод с кнопкой:
— добавляем нужные элементы, загружаем в виртуальный МК .hex со скетчем и вуаля:
Кнопка не нажата:

Нажмём кнопку – и виртуальный светодиод загорается 🙂

Посмотрим – как работает виртуальный терминал; загрузим в МК скетч Blink_HL

Работает! Сообщения терминала отображаются в маленьком окошке 🙂

А осциллограф? Грузим в МК скетч шестиканалоного осциллографа 🙂
Хм… какой-то мусор… ааа я забыл изменить скорость COM-порта!
Дважды щёлкаем на терминале и устанавливаем скорость (Baud Rate) в 38400

Теперь всё работает!

Только симуляция не учитывает наводки, которые были в реальной схеме – поэтому тут одни нули 🙂

Теперь можно запускать свои скетчи вдали от Arduino, используя всю мощь симуляции PROTEUS-а (от виртуальных инструментов до отладки)!

UPD
Проект Протеуса + hex скетча осциллографа

Ссылки
Система моделирования ISIS Proteus. Быстрый старт.


39 комментариев на «“Arduino/CraftDuino и PROTEUS”»

    • в статье об этом упоминается — возможно забыли установить скорость COM-порта аналогичную той, которую инициализирует скетч.

    • Напротив, нули появляются именно когда скорости совпадают. При разных скоростях сыпятся какие-то символы. Вы не могли бы скинуть мне ваш проект под протеус и скетч под ардуино? плиз.

    • у меня протеус старый — там только atmega8 — для неё просто выставлял тактовую частоту в 16МГц.
      Для 328-й, по идее, должно быть так же.
      Вечером выложу пример для 8-й меги.

    • Проблема в том, что для atmega8 все работает, а вот для atmega328 — сколько не бьюсь, не могу оживить виртуальный терминал!!! Я пользуюсь протеус 7.6.

    • Прошу прощения за тормоза=\
      Тоже, кстати не сразу разобрался=)
      Итак настройки для Atmega328 в Proteus 7.6 такие… барабанная дробь:

      Удачи=)

    • поищите во временной директории, как то так Local Settings\Temp\build40910.tmp\

    • здесь об этом упоминается:

      во временной директории вида Local Settings\Temp\build40910.tmp\

      в версии IDE 0017 можно было настроить чтобы hex-файлы появлялись в каталоге скетча, но в последней 0018 — почему то это добиться не удалось

    • Спасибо, конечно, но у меня Linux 🙂
      И да я все-таки нашел где это в линуксе, IDE создает папку вида /tmp/buildXXXXXXXXXXXXXXXXXXX.tmp
      в ней можно и поискать.

  1. Хм… а как из ArduinoIDE 0018 получить asm файл в папке \local settings\temp\… или еще где? Она же создает только hex и elf файл, а для заливки программы в протеус нужен asm. Ради эксперимента переменовал hex и elf в asm, но, как я и предполагал, оно не заработало. Где достать asm?

    • для заливки в протеус нужен как раз .hex-файл 😉

    • Я могу ошибаться, но только прошивка в hex файле, а программа в менюшке «Source > Add\Remove Source Files…». В чем я ошибаюсь?

    • речь и была о прошивке. А вот с остальными файлами в 0018 действительно проблема 🙁

    • Как думаете с помощью дизассемблера можно будет сделать asm файл?

    • Нет… глупость говорю. Как бы так сделать asm..?

    • Да asm не нужен скорей всего. Кстати, вам сопственно зачем?
      Если просто проверить — то скармить протеусу можно и hex и rom.
      Если с отладкой — то к hex-у нужно ещё .cof приложить, его компилятор генерирует(естественно компилятор нужно соотвествующим образом настроить)

      ещё тут можно почитать

    • Мне, собственно, чтобы компилить файлы в ArduinoIDE и заливать их в Proteus. Прошивка то есть — хочу файлы проверять, хотя бы тот же блинк. Но у ардуиноиде же нет настроек компилятора, а под atmega168 больше у меня ничего не умеет компилить. Причем надо именно с прошивкой ардуины для атмеги, но не с любой другой, т.к мне кажется проекты из под ардуины работают только с ней

    • оО я ничего не путаю когда вижу что проект blink забивается в виде hex вместо прошивки? мне казалось его надо как раз в asm’е в «Source->Add»

    • Ничего не путаете, я ж картинку зачем рисовал-старался в предыдущем каменте, там тоже красным кружком обведён именно hex. И довольно подробно разрисованно как туда добратся 😉

    • Ну так и заливайте hex-ы=)
      А компилятор ручками настраивается, не через ИДЕ.
      Ошибаетесь, есть у вас компилятор=) Внимательно почитайте эту статью. Там всё написано, и где в папке ардуиныИДЕ компилятор живёт, и как его настроить.
      Правда чтоб генерить разные файлы, (cof, вчастности) придётся изучить ещё и эту статью.
      Но это всй нужно только для отладки, для ваших целей хватит и hex-а.

    • Вот нашел эмулятор ардуино VirtualBreadboard не нужно хекс генерить, работает напрямую со скетч кодом. До протеуса ему конечно еще далеко, но в нём уже есть приличная библиотека элементов.

    • Отвечать не надо уже нашёл. С левой стороны кнопка «виртуальные инструменты», нажав на неё появиться список меню, в нём и есть «виртуальный терминал».

  2. Здравствуйте, я так и не понял, как добиться полного марафета с исходником из arduino IDE ??? Так чтоб при дебагге в Proteus прямо по коду исходника шагать. Какой code generation tool выбирать? нужно ли конвертировать исходник из duinoIDE, и как это проще сделать?

  3. ISIS Proteus 7.2 SP2 в режиме эмуляции атмеги8 с настройками 328 со скетчем «blink» жалуется: pc=0020 is outside of rom space. И как интересно заставить ее оказаться в нужных границах ROM? в общем, долго думал, решения не нашел. на радиокоте говорят, что это бывает если занять больше половины флеша, ну извините блинк-то маленький, не думаю что он займет больше 1 кб.

    что характерно, обычная логика эмулируется на ура, нарисовал вот этот (http://lib.qrz.ru/files/images/usefulschemes/book1/chapter3/3-91.preview.jpg) светофор на ТТЛ, и свою выбиралку MP3 записи на FM модуляторе (нужное количество раз нажимет кнопку «next track» в зависимости от цифры в двоичной системе, установленной дипами S1-S8) — s019.radikal.ru/i609/1204/5b/81b3d17c1b5d.jpg (это уже кмоп) — обе схемы эмулируются на ура, да и чего бы не эмулировались, я их обе собирал когда-то.

    пробовал версию 7.6 SP4, не обадовала ибо падает постоянно. к тому же 7.2 у меня portable, очень удобно что не надо устанавливать.

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

    • А что означает «в режиме эмуляции атмеги8 с настройками 328»?
      На кой это?
      Почему нельзя сделать скетч под мегу8, если схема для неё?
      Или уж схему переделать под мегу328?
      Ругается Протеус, судя по всему, именно на разницу в размере памяти меги8 и 328.
      Возможно, он пытается залить весь объём флеша, со всеми нулями, на 32 кб, а оно не влазит.

      Кстати, был у мня Протеус7.6сп4, нормально работал, пока ключ не сдох

  4. У меня Протеус 7.1 секунд 5 тратит на то чтоб зажечь или потушить светодиод из стандартного Блинка. Иногда пишет, что симуляция запущена не рилтайм потому что процессор сильно загружен. Внизу в статусной строке пишет что CPU load 87%, при том, что диспетчер задач показывает только 24%. У меня core5, я не думаю что такая «мегазадача» как блинк может отжирать какие-то нереальные ресурсы. Кто-нибудь в курсе это лечится как-то?

  5. Никак не могу считать значение потенциометра в Proteus, каша какаято с портами получается.
    К примеру

    int sensorPin = 3;
    int ledPin = 13;
    int sensorValue = 0;
    
    void setup()
    {
      pinMode(ledPin, OUTPUT);
      Serial.begin(9600);
    }
    
    void loop()
    {
      sensorValue = analogRead(sensorPin);
      digitalWrite(ledPin, HIGH);
      delay(sensorValue);
      digitalWrite(ledPin, LOW);
      delay(sensorValue);
      Serial.println(sensorValue);
      analogWrite(5, sensorValue);
    }

    В терминале Proteus всегда sensorValue пишет = 1023, analogWrite(5, sensorValue)поднимает PD5(11-ю ногу)на HIGH(т.е. 5V)
    На схеме ATMEGA328P, переменный резистор 1К, диод и терминал.

    Подскажите где загвоздка? Это Proteus гонит или я? 🙂

    • О_о спасибо большое за ссылку, я тоже ошибочно полагал что питание берётся внутреннее, кстати странно что это не реализовано 🙂

    • Остался только один вопрос — analogWrite(5, sensorValue) почему значение передаётся на цифровой вывод PD5? Как указать что мне нужен вывод PC5?

    • Ну? AVcc(20 вывод) подключите к нижнему выводу потенциометра (к +)

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

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Arduino Bluetooth CraftDuino DIY Google IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение