Вольтметр-приставка к ПК за доллар (первое знакомство с ATtiny85 microUSB)
В группе разработчиков DSP Robotics Flowstone искали дешевый цифровой вольтметр с возможностью передачи данных в Flowstone. В качестве недорогого варианта я присмотрел платку ATtiny85 microUSB от Digispark. Ее цена, в зависимости от продавца, колеблется в районе доллара.
Итак, плата куплена, гребенки запаяны (для удобства установки платы в беспаечную макетку вход VIN я не впаивал). Далее следуют две новости: хорошая и плохая.
Начну, традиционно, с хорошей - эта малышка содержит:
-Микроконтроллер: ATTINY85
-Внутренний генератор: 8МГц (в некоторых моделях разогнан до 16.5МГц)
-Объем памяти программ: 8Кбайт
-Аппаратные интерфейсы: SPI, I2C
-ШИМ: 3 канала
-АЦП: 4 канала
-Индикаторы: Питание, Состояние (Pin0)
А теперь плохая - ввиду малого количества пинов у МК ATTINY85 и отсутствии аппаратной поддержки USB создатели платы скомбинировали ряд пинов, что сильно урезает функционал устройства:
-Вывод P5 совмещен с Reset МК, при достижении логического 0 МК перезагружается. Можно использовать разве что для измерения напряжения батареи питания.
-Выводы P3,P4 используются в роли D+/D- USB-порта, одновременная работа порта и этих пинов недоступна.
-Бутлоадер для поддержки среды Arduino и USB-порта занимает немало памяти МК (6Кбайт доступно).
Итого, платка может считывать значения только одного аналогового порта и отправлять их по шине USB, чего для конкретной задачи достаточно.
Для начала работы необходимо подключить поддержку плат от Digispark в среде Arduino:
В открывшемся окне ищем Digistump AVR Boards и жмем кнопку "Установить" (на скрине уже установлен):
Естественно, необходимо установить драйвера: https://github.com/digistump/DigistumpArduino/raw/master/too...
Теперь зальем прошивку. Плату пока не подключаем!
Пишем простенький скетч (обратите внимание, что вместо delay используется SerialUSB.delay - иначе порт будет "отваливаться" ):
#include <DigiCDC.h>
void setup() {
SerialUSB.begin();
}
void loop() {
SerialUSB.println(analogRead(A1));
SerialUSB.delay(10);
}
Выбираем плату Digispark (Default) и жмем кнопку "Загрузка". После компиляции скетча появится надпись "Подключите плату, таймаут 60 сек". Подключаем плату к microUSB и она проливается. После прошивки и загрузки контроллера появляется виртуальный COM-порт (в моем случае COM10).
С аппаратной частью все просто - подтягиваем пин P2 к "земле" резистором 10кОм, исследуемое напряжение 0-5В подаем на землю и пин P2. Плата передает значения напряжения в диапазоне 0-1023 о чем можно убедиться в "Мониторе порта".
Теперь поговорим о компьютерной части нашего вольтметра. Она была выполнена в среде DSP Robotics Flowstone 3.0 (тестировалась именно совместимость платы с этой средой) и выглядит достаточно просто - понадобилось всего пару строк кода на Ruby для сканирования доступных COM-портов и автовыбора первого из списка, остальное же собрано, как конструктор, из стандартных модулей:
Итак, подключаем нашу Tiny85 к ПК, запускаем Voltmeter.exe, выбираем порт (если не выбран) и жмем кнопку Start.
Все файлы проекта можно скачать по ссылке: https://drive.google.com/open?id=14NiW4UvG6gQ3YYs9rnUgmnX_wy...
Спасибо за внимание!