14.06.2022 21:34, автор DiEitch
Всем привет.
Сегодня я отвечу сразу на три актуальных вопроса, на которые любители ардуино хотели бы получить ответ, да вопрос задать стесняются:
Для начала, определимся, что же такое DigiSpark? Это серия миниатюрных плат на микроконтроллерах ATTiny, часть которых поддерживает хитрый бутлоадер USB, и со средой разработки работает аналогично платам Arduino (компиляция, прошивка и запуск программы, а также поддержка вывода в терминал). Для законченных устройств вовсе необязательно поддерживать прошивку на лету (также необязательно это и для симуляции в Proteus).
Типичная DigiSpark на ATTiny85 c ALI.
Начнём же отвечать на вопросы! Открываем среду Arduino 1.8.x, выбираем плату:
Такой выбор позволит нам в Протеусе использовать "чистую тиньку" (с внутренним RC генератором и, разумеется, без USB, там нужны более точные частоты).
Открываем и компилируем пример - я выбрал пример со шрифтами разного размера здесь. А теперь фокус, при попытке экспортировать бинарный файл (прошивка в народе) -
получим предупреждение:
и, естественно, в папке скетча файла с расширением HEX мы не обнаружим. Что же делать? Опытным путём я обнаружил, что среда Arduino на моём компьютере сохраняет после компиляции файлы в папке: C:\Users\%USERNAME%\AppData\Local\Temp\arduino_build_xxxxxx. Таким образом, для обнаружения файла в поиске введите NAME.HEX, где NAME - имя вашего скетча.
Кликаем правой клавишей по файлу и выбираем "расположение файла":
И попадаем в папку с искомым файлом:
Итак, прошивку мы откопали, переходим к следующему вопросу. К сожалению, рабочая модель дисплея с чипом SSD1306 (который и используется в дисплеях OLED) появилась только в Proteus 8.8 (теоретически, дисплеи с SSD1306 появились уже с 8 версии, но они были неработоспособны в режиме I2C). Для симуляции нам нужен дисплей UG-2864HSWEG01.
Создаём новый проект и рисуем вот такую схему.
Очень внимательно здесь надо отнестись к шинам (они синего цвета): если сделать не так как на этой картинке - работать не будет:
Рекомендации взяты отсюда, и всё действительно так, я для эксперимента удалял промежуточные шины (разрывал их), удалял имена, и оно переставало работать! Далее в настройках ATTiny85 выбираем следующие опции:
добавляем нашу добытую с большими трудами прошивку и всё.
Итак мы запустили симуляцию, но на экране ничего нет? Теперь придётся прочитать ответ и на третий вопрос. На схеме в Proteus не зря стоит сканнер I2C. Так вот, при первом запуске он показал, что на все запросы по шине приходит NACK (Not Ack), а это означает одно - посылка ушла в пустоту: либо устройств нет на шине, либо указан неверный адрес. Дело в том что дисплеи OLED при работе с I2C могут иметь разные адреса: 0x3C (как правило) и 0x3D. Наш дисплей в Proteus имеет адрес 0x3D, а библиотека обращается по адресу 0x3C. Как это исправить? - Следите за руками.
Начну с того, что библиотека Tiny4kOLED сама по себе не работает с I2C, а использует вызовы к функциям других библиотек (можно выбрать), я использовал в данном проекте:
А теперь поищем адрес I2C. Вбиваем в поиск имя файла: Tiny4kOLED.h.
Нас интересует файл Tiny4kOLED_common.h. Переходим (как и ранее) по правой кнопке меню "расположение файла":
Открываем в любом текстовом редакторе и исправляем в выделеной строке адрес 0x3C на 0x3D:
Компилируем скетч заново. Копируем полученный свежий HEX в Proteus (не забываем также в свойствах ATTiny85 поменять прошивку на свежую). Запускаем и наслаждаемся.
Удачных симуляций!