Сам проект "народный", бабло на него собирали кажется на кикстартере. Суть сводится к тому, что в AVR микроконтроллер зашит загрузчик при загрузке изображающий из себя USB устройство. Это позволяет из стандартной среды Arduino IDE заливать скетчи (они же программы, они же прошивки) напрямую в AVR контроллер. На алиэкспрессе "аналоги" подобной платы стоят в районе 100 рублей за штутку:

Для работы с ним понадобится среда Arduino IDE, с сайта проекта нужно скачать драйвера, и выполнить небольшую настройку IDE. (на момент написания статьи сайт проекта не доступен, вероятно это результат спектакля роскомнадзор vs telegram) Расписывать тут не буду, так как если вы не сможете справиться с этим, то и читать дальше вам будет бессмысленно. Когда всё настроено, запускается прошивка скетча, при этом нужно отсоединить и подсоединить плату, загрузка при этом начнётся автоматически. Поскольку для передачи данных USB используются те же самые контакты, то при прошивке всё "лишнее" нужно отключать.
Теперь немного о возможностях контроллера ATtiny85 питание от 2.7 до 5 Вольт, в даташите ссылок на рабочую температуру не нашёл, но там есть несколько графиков зависимости от температуры, где график начинается с -40 градусов, отчего можно предположить, что с зимней эксплуатацией в России проблем быть не должно. Рабочая частота 16 Мгц, АЦП доступен на 4х выводах, при это сам АЦП 1, и соответственно одновременно может производится только один замер, ацп 10-битный. Из 6 выводов 5й использовать проблематично - при замыкании его на землю, контроллер перезагружается. К выводу 1 подключен светодиод. PWM доступен, но использовать его можно разве что для световых приборов - частота маленькая менее 1000 Гц, отчего механическая нагрузка неизбежно будет гудеть. Практически для каждого из выводов есть свои ограничения:
| Pin number | Output Voltage | Analogue Port Number analogRead()
| PWM | USB | Test LED | I2C | SPI* |
|---|---|---|---|---|---|---|---|
| 0 | 5 V | Y - 504 Hz | Rev 1 | SDA | MISO | ||
| 1 | 5 V | Y - 504 Hz | Rev 2 / 4 | MOSI | |||
| 2 | 5 V | 1 | SCL | SCK | |||
| 3 | 3.6 V | 3 | Y - 1.5 кОм к 5 В стабилитрон 3,6 В | ||||
| 4 | 3.6 V | 2 | Y - 1007 Hz | Y стабилитрон 3,6 В | |||
| 5 | 3 V | 0 |
Теперь немного расскажу о способах отладки прошивок. Простейший из способов - моргание светодиодом на выводе p1. Скажем, по умолчанию моргаем 1 раз в секунду, при условии 2 - 2 раза и т.д. Однако это случай довольно примитвный. Мне же довелось отлаживать проект, использующий ЦАП (ADC), а там уже 1024 значения. Моргать конечно можно, но как считать :) ? И тут я решил поподробнее изучить шину i2c, она использует 2 провода, одно устройство - мастер, и куча рабов, до 127. И этот способ мне показался довольно перспективным. Можно сделать головное устройство на Arduino Mega, и на общую шину посадить не один десяток устройств, как исполнительных механизмов, так и датчиков.
Отладочный скетч для мастера на Arduino Mega. Используется библиотека для работы с i2c wire. В цикле запрашивается информация с i2c раба с номером 11. Полученную информацию можно выводить в COM-порт, или на экран, подключенный к мастеру.
#include <Wire.h>
byte GetI2C(byte dev){
byte ret, ret2;
ret = Wire.requestFrom(dev, 1, true);
if( ret == 0 ){
return 255;
}
ret2 = 254;
while( Wire.available() > 0){
ret2 = Wire.read();
}
return ret2;
}
void setup() {
Wire.begin();
TWBR = 12; //400 kHz i2c
}
void loop(){
fromdigispark = GetI2C(11);
}
Отладочный скетч для раба Digispark. Поскольку аппаратной поддержки i2c в digispark нет, для эмуляции i2c используются библиотеки TineWireS и TineWireM для раба и мастера соответственно. Нужную библиотеку нужно скачать и положить в папку проекта. Здесь для входа аналогового сигнала используется ADC2, он же p4.
#define I2C_SLAVE_ADDRESS 11
#include "TinyWireS.h"
#ifndef TWI_RX_BUFFER_SIZE
#define TWI_RX_BUFFER_SIZE ( 16 )
#endif
#include <core_adc.h>
void requestEvent(){
int adc_val;
ADC_SetInputChannel( (adc_ic_t) 2);
ADC_StartConversion();
while( ADC_ConversionInProgress() );
adc_val = ADC_GetDataRegister();
adc_val = (adc_val >> 2);
TinyWireS.send((byte) adc_val);
}
void receiveEvent(uint8_t howMany)
{
...
}
void setup() {
pinMode(1, OUTPUT);
TinyWireS.begin(I2C_SLAVE_ADDRESS);
TinyWireS.onReceive(receiveEvent);
TinyWireS.onRequest(requestEvent);
digitalWrite(3, HIGH);
pinMode(3, INPUT); //adc
}
void loop() {
digitalWrite(1, HIGH);
tws_delay(50);
digitalWrite(1, LOW);
tws_delay(1000);
TinyWireS_stop_check();
}
Почти идеально для отладки подходит цифровой индикатор tm1637.
По итогу можно сказать, что преимущества данной платы - возможность использования части библиотек от ардуино, либо сторонних. В отличие от того же ассемблера. В сравнении с ардуино, digispark раза в полтора дешевле самой простой arduino nano.
Ну и на десерт напомню, никакой защиты в плате нет, и сами разработчики рекомендуют подключать плату к компьютеру через USB хаб, так как в случае замыкания линии питания, может выйти из строя компьютер.
Алгоритм борьбы с дребезгом контактов описан в статье PWM регулятор.
Сложности использования Pin 3 в качестве кнопки и организация питания от павербанка изложены в статье Пульт ИК ДУ на Digispark.
Решение с подключением нескольких кнопок на один вывод изложено в статье PWM регулятор семиуровневый с индикацией.
Решение проблем (не)запуска изложено в статье Термостат с PWM и индикацией.