суббота, 8 декабря 2018 г.

Что такое Digispark

Плата Digispark

Digispark - это плата, подобная Ардуино, только на базе микроконтроллера ATtiny85. Она не так наворочена в плане периферии как Ардуино, но зато компактная и дешевая. Особенной эту плату делает то, что для ее программирования не требуется программатор, достаточно просто подключить Digispark к компьютеру и можно заливать в нее новый скетч. При этом плата не содержит специализированных USB контроллеров или преобразователей, все необходимые функции для программирования через USB реализованы в загрузчике. О том, что нужно для программирования Digispark в среде Ардуино - под катом.

Характеристики Digispark

  • Память программ (FLASH) - 8КБ, из них около 2КБ занимает загрузчик
  • ОЗУ (SRAM) - 512 байт
  • Энергонезависимая память (EEPROM) - 512 байт
  • Тактовая частота 16МГц/16,5МГц
  • USI (Universal Serial Interface) - универсальный последовательный интерфейс. Может использоваться в двухпроводном (I2C/TWI) и трехпроводном (SPI) режиме
  • 4-х канальный 10-разрядный АЦП
  • Аналоговый компаратор
  • 2 8-битных таймера-счетчика
  • Сторожевой таймер
  • 8 выводов, 6 из которых доступны как линии ввода-вывода
  • Питание Digispark возможно от USB, либо от внешнего источника 5В или 7-35В (рекомендуется не более 12В)
Помимо микроконтроллера на плате установлен линейный регулятор напряжения 5В 500мА, небольшая обвязка для USB и пара светодиодов, один из которых подключен к выводу PB1 или PB0 в зависимости от модификации, другой служит индикатором питания. Плата оснащена USB разъемом типа А, что позволяет подключать ее к компьютеру без использования дополнительных проводов.

Платы Digispark работают на частоте 16 или 16,5МГц. Ее источником служит PLL генератор: тактовый сигнал от внутреннего калиброванного RC-генератора (~8МГц) подается на вход умножителя на 8, в результате получается частота 64МГц, затем она делится на 4, что дает системную частоту 16МГц. При подключении Digispark к компьютеру загрузчик калибрует RC-генератор для получения системной частоты 16,5МГц. Начиная с версии загрузчика 1.0.6 калибровочная информация сохраняется внутри микроконтроллера. Предыдущие версии загрузчика этого не делали, поэтому при работе от внешнего источника питания (не от шины USB) такие платы работают на частоте 16МГц.

Также следует упомянуть об одной особенности официальных плат Digispark. Первый вывод микроконтроллера ATtiny85 может использоваться как обычный пин ввода-вывода или как вход внешнего сброса - Reset. Назначение данного вывода определяется фьюзом RSTDISBL (External Reset Disable). Так вот в официальных платах Digispark фьюз RSTDISBL запрограммирован, то есть первый вывод является обычным пином ввода-вывода. В результате нам доступны все 6 линий ввода-вывода ATtiny85, но с другой стороны у нас больше нет входа внешнего сброса, а значит нет возможности что-либо сделать с микроконтроллером, используя ISP программатор. Что касается китайских клонов, то в них данных фьюз может быть как запрограммирован, так и нет.

Добавление Digispark в список плат IDE Arduino

Программирование Digispark осуществляется из среды IDE Arduino, для этого в нее должен быть добавлен пакет Digistump. Это делается через Менеджер плат, который появился в версии IDE 1.6.4. Для начала скопируйте в буфер обмена следующую строку:
http://digistump.com/package_digistump_index.json

Теперь в IDE открываем меню Файл > Настройки и в появившемся окне нажимаем кнопку рядом с полем ввода дополнительных ссылок для Менеджера плат. В открывшемся окне вставляем скопированную ранее ссылку новой строкой. Нажимаем OK для сохранения изменений и выхода из настроек:

Добавление Digispark в список плат IDE Arduino

Следующий шаг - установка файлов для поддержки Digispark. Переходим в меню Инструменты > Плата > Менеджер плат... Чтобы не искать в списке интересующий нас пакет, отфильтруем его, введя в текстовом поле слово digispark. Выбираем пакет Digistump AVR Boards и нажимаем установить. После выполнения установки закрываем окно Менеджера плат:

Добавление Digispark в список плат IDE Arduino

Установка драйверов для Digispark

Пользователям Windows для работы с платами Digispark необходимо установить драйвера. Скачать их можно по ссылке https://github.com/digistump/DigistumpArduino/releases/download/1.6.7/Digistump.Drivers.zip. Распакуйте архив и запустите Install Drivers.exe для установки драйверов. Подтвердите установку при запросе разрешения.

Программирование Digispark из IDE Arduino

Теперь у нас все готово для программирования плат Digispark. Для примера попробуем залить в нее скетч, мигающий светодиодом на плате. Скопируйте и вставьте в редактор следующий код:
void setup() {                
  pinMode(0, OUTPUT);    //Светодиод модель B
  pinMode(1, OUTPUT);    //Светодиод модель A
}

void loop() {
  digitalWrite(0, HIGH); // Зажигаем светодиод
  digitalWrite(1, HIGH);
  delay(1000);           // Ждем 1 секунду
  digitalWrite(0, LOW);  // Гасим светодиод
  digitalWrite(1, LOW); 
  delay(1000);           // Ждем 1 секунду
}

Как уже было сказано, в зависимости от модели платы Digispark светодиод на ней подключен либо к выводу 0 (модель B), либо к выводу 1 (модель A). Поэтому в приведенном скетче меняется состояние обоих выводов.

В меню Инструменты > Плата выберите значение Digispark (Default - 16.5mhz).  COM порт и программатор указывать не нужно.

Выбираем плату Digispark (Default - 16.5mhz) в среде Ардуино

В отличие от плат Ардуино Digispark не нужно заранее подключать к компьютеру. Поэтому нажмите кнопку для загрузки скетча и дождитесь сообщения "Plug in device now... (will timeout in 60 seconds)":

Подключаем Digispark к компьютеру после появления сообщения Plug in device now...

Вот теперь подключаем Digispark и дожидаемся сообщения "Micronucleus done. Thank you!". Светодиод на плате должен начать мигать с интервалом в 1 секунду.

Библиотеки и примеры для Digispark

Различные библиотеки для плат Digispark и примеры их использования вы можете найти на странице https://github.com/digistump/DigistumpArduino/tree/master/digistump-avr/libraries. Также, думаю, стоит упомянуть о IDE Arduino, заточенной специально под Digispark. Скачать ее можно отсюда: https://sourceforge.net/projects/digistump/files/DigisparkArduino-Win32-1.0.4-May19.zip/download. В ней уже установлены некоторые библиотеки и есть примеры скетчей.

10 комментариев:

  1. Спасибо огромное! Заработало!

    ОтветитьУдалить
  2. Прошу помочь разобраться. Digispark загружаю с DigisparkArduino-Win32-1.0.4-May19 простой блинк, все работает. Но более сложные скетчи с поддержкой oneWire в ней не Возможно компилировать. Выдает море ошибок. В версии 1.6.13 компилирование проходит без проблем то простой блинк и любые другие программы после загрузки не работают, хотя процесс заливки проходит нормально. В чем может быть проблема?

    ОтветитьУдалить
    Ответы
    1. Добрый день!
      Какую библиотеку используете для работы с oneWire?

      Удалить
  3. Добрый день. При попытке установки пакета плат Digistump AVR Boards, процесс зависает на полпути с надписью "загрузка инструментов (2/2)" либо(1/2) как повезет. После этого arduino IDE виснет намертво. Другие пакеты загружаются нормально, от того-же Digistump и других. Подскажите в чем может быть проблема. Заранее спасибо.

    ОтветитьУдалить
    Ответы
    1. Спустя какое-то время пакет установился. Возможно были проблемы на сайте.

      Удалить
  4. Есть проблема. Драйвера установил, но при подключении тишина и через секунды 3-4 он сам отключается и подключается обратно. Так может быть и до бесконечности. В чём проблема?

    ОтветитьУдалить
    Ответы
    1. У меня было такое с одной из плат. При подключении к компьютеру она появлялась в списке устройств, после чего отваливалась и так бесконечно. Соответственно, скетчи не грузились. Помогла перезапись загрузчика. Не знаю в чем именно тогда была проблема, в загрузчике или неправильно выставленных фьюзах. Но и то, и другое решается записью загрузчика из IDE Arduino.

      Удалить
  5. Спасибо, оч четко, помогло. Вообще-то мне бы надо на ней поднять простенький серво..

    ОтветитьУдалить