
При использовании отладочных плат Arduino в Proteus-е для запуска симуляции нам необходимо указать файл прошивки для микроконтроллера. Если программа пишется в среде Arduino IDE, то HEX-файл мы можем найти следующим образом.
Настройка Arduino IDE
В программе Arduino IDE переходим в меню Файл -> Настройки. Откроется окно с настройками. Нас интересует настройка под именем «Показывать подробный вывод». И там где чекбокс «Компиляция» установить галочку . Нажимаем OK для сохранения настроек.
Компиляция программы и поиск HEX-файла
Теперь если мы нажнем на кнопку проверить (она же скомпилировать), то снизу увидим бегущие строки. Вот в одной из строк мы и найдем путь к нашему HEX-файлу:
C:\Users\2DCD9~1\AppData\Local\Temp\arduino_build_957490/dht11.ino.hex
Использование HEX-файла в Proteus
Ссылки на библиотеки Arduino для Proteus можете найти в этой статье.
Добавим плату Arduino Nano, подключим к ней датчик влажности и температуры DHT11 и виртуальный терминал, укажем скомпилированный HEX-файл и посмотрим, как все работает.
Далее подключим контакты. Для датчика DHT11:
- VDD — подключаем к питанию +5В;
- DATA — контакт данных, подключим к D2 Arduino Nano;
- GND — подключаем к земле GROUND.
Про контакты питания и земли можно прочитать вот в этой статье.
Для терминала подключим только контакт RXD — к контакту D1/TX платы Ардуино, так как нам нужно только принимать и выводить данные в терминале. Получилось вот такая схема.
Теперь можно указать наш файл прошивки. Для этого нажимаем два раза левой кнопкой мыши на Ардуино (или один раз правой и выбрать пункт меню Edit Properties), чтобы открыть окно свойств платы:
И в поле Program File вставляем путь к файлу, который нашли выше в статье в программе Arduino IDE. Либо нажимаем на иконку папки и идем по пути вручную. Если все готово и мы нашли нужный файл, жмем OK и запускаем симуляцию. Результат можно увидеть ниже на картинке.
И вот код, который использовал в примере:
#include "DHT.h" #define DHTPIN 2 // Цифровой контакт, подключенный к датчику DHT #define DHTTYPE DHT11 // Тип датчика DHT 11 DHT dht(DHTPIN, DHTTYPE); // Инициализация датчик DHT. void setup() { Serial.begin(9600); Serial.println(F("DHT11 test!")); dht.begin(); } void loop() { delay(2000); // Подождем две секунды между измерениями. // Считываем влажность float h = dht.readHumidity(); // Считываем температуру (по умолчанию в градусах Цельсия) float t = dht.readTemperature(); // Проверка, не завершилась ли операции чтения с ошибкой if (isnan(h) || isnan(t)) { Serial.println(F("Failed to read from DHT sensor!")); return; } // Выводим на терминал Serial.print(F("Humidity: ")); Serial.print(h); Serial.print(F("% Temperature: ")); Serial.print(t); Serial.println(F(" C ")); }