Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Звільняємо пін P5 від RESET на клонах DIGISPARK

2020-04-02

Всі статті →

Переклад статті Fixing Pin P5 or 6 on Digispark Clones автора TheToivonen

http://thetoivonen.blogspot.com/2015/12/fixing-pin-p5-or-6-on-digispark-clones.html

Від автора перекладу: в одному своєму проекті мене задавила жаба використати ARDUINO Pro Mini, бо проект потребував всього шість пінів і в мене було кілька плат від DIGISPARK. Швидко виявилася проблема з піном P5, який «з коробки» з’єднаний з RESET мікроконтролера. На щастя, цю проблему можна вирішити.

DIGISPARK ATTINY85 – гарний вибір для простий проектів. Оригінальний пристрій, доступний за посиланням http://digistump.com/products/1, випускається з прошитим бутлоадером і шістьма GPIO-пінами.

За приблизно 1,5$ на eBay можна придбати китайські клони, сумісні з оригінальною платою і прошитим бутлоадером. Особливість полягає в тому, що пін P5 (останній, шостий за рахунком, ADC0) може бути налаштований як RESET-пін. Якщо вам потрібно лише п’ять пінів або вам потрібен RESET-пін, можете припинити читати. Якщо вам потрібні шість пінів, то продовжуйте.

Із заводу ATTINY85 виходить налаштованим під ISP (In System Programming), саме для нього і потрібен RESET-пін. Бутлоадер дозволяє користувачу програмувати ATTINY85 через з’єднання по USB. Це добре описано в документації на сайті DIGISTUMP.

Якщо в контролері вже є бутлоадер, то RESET-пін непотрібен, і на оригінальних платах виробник враховує цей момент і налаштовує фьюзи на ATTINY85 таким чином, що RESET більше не зв’язаний з піном P5 і останній може бути використаний як звичайний GPIO-пін. Проблема в тому, що на клонах таке налаштування можуть не зробити.

Існують прості способи зрозуміти, чи працює P5 як звичайний пін вводу-виводу. Можна завантажити скетч, який вмикає/вимикає світлодіод на P5, і якщо все працює, то все добре. Вам не потрібно нічого налаштовувати. Якщо ж ні, то поки що ви не можете застосовувати цей пін як звичайний.

(Якщо P5 все ж працює як GPIO-пін, але ви бажаєте «повісити» на нього RESET, це можливо. Вам потрібен високовольтний програматор , який доволі просто зібрати і застосувати, але це виходить за рамки цієї статті. Для початку, можна подивитись тут: http://www.rickety.us/2010/03/arduino-avr-high-voltage-serial-programmer/)

Добре, тепер ви знаєте, що P5 з’єднаний з RESET, але ви бажаєте, щоб він працював як звичайний пін вводу-виводу.

Перше і найважливіше, переконайтеся, що в ATTINY85 прошитий і правильно працює бутлоадер.

Після того, як ми змінимо фьюзи, у вас не буде можливості прошити його без високовольтного програматора! Перевірте, чи є бутлоадер, чи працює він. Якщо ви можете програмувати ATTINY85 через з’єднання USB, бутлоадер в наявності та працює.

Після налаштування фьюзів ви зможете завантажувати свої програми через USB як і до того.

Наступне, що нам потрібно, це якась інша плата ARDUINO, я використав Duemilanove, але ви можете використати також Uno. В середовищі ARDUINO (я користувався версією 1.6.6) оберіть File > Examples > ArduinoISP і завантажте його в Duemilanove (або Uno). Якщо ви до того працювали з DIGISPARK, переконайтеся, що бутлоадер і плата в середовищі ARDUINO вибрані правильно і відповідають платі, яку ви збираєтеся програмувати.

Після завершення завантаження, оберіть Tools > Port запам’ятайте порт, до якого під’єднана плата ARDUINO. У мене це був «/dev/ttyUSB0» (Для Windows це COM5, COM6 і т.д. – прим. перекл.). Це знадобиться нам трохи пізніше.

Якщо ви використовуєте Duemilanove, додайте 120-омний резистор між RESET і 5В на платі. Не використовуйте резистор нижче 110 Ом або вище 124Ом. Будь ласка, не пропускайте цей крок. Прочитайте коментарі для більш детальної інформації (Переклад коментаря автора з цього приводу під цією статею – прим. перекл.).

Для Uno слід підкючати не резистор, а конденсатор на 10мкФ між RESET і «землею» на платі. Будь ласка, не пропускайте цей крок. Прочитайте коментарі для більш детальної інформації (Переклад коментаря автора з цього приводу під цією статею – прим. перекл.).

Далі підключаємо плати наступним чином:

 

Duemilanove > Digispark ATTINY85 USB Clone

GND --> GND

5v > 5v

10 > P5

11 > P0

12 > P1

13 > P2

 

Це з’єднання для Duemilanove і ATTINY85, для інших плат виберіть правильні піни, вам потрібні SS, MOSI, MISO і SCK на іншій платі ARDUINO і RESET (P5), MOSI (P0), MISO (P1) і SCK (P2) на платі DIGISPARK.

Має виглядати на кшталт зображеного на фото внизу…

Далі відкрийте термінал і введіть (замість «/dev/ttyUSB0» вкажіть порт, через який підключено плату ARDUINO):

 

avrdude -P /dev/ttyUSB0 -b 19200 -c avrisp -p attiny85 -n

 

(Через термінал автор працює з програмою AVRDUDE. Завантажте і розпакуйте AVRDUDE перед виконанням команди  – прим. перекл.)

Після виконання команди ви побачите щось таке:

 

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e930b

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

 

Я використовую Linux, якщо ж ви використовуєте Windows, думаю, те ж саме спрацює в командному рядку, якщо ввести (замість «/dev/ttyUSB0» вкажіть порт, через який підключено плату ARDUINO):

 

avrdude.exe -P /dev/ttyUSB0 -b 19200 -c avrisp -p attiny85 -n

 

(Для Windows: відкрийте командний рядок (можливо з правами адміністратора), за допомогою команди cd перейдіть в папку з програмою і виконайте наведену вище команду  – прим. перекл.)

Якщо все добре, то наступна команда (замість «/dev/ttyUSB0» вкажіть порт, через який підключено плату ARDUINO):

avrdude -P /dev/ttyUSB0 -b 19200 -p attiny85 -c avrisp  -U hfuse:w:0x5F:m

(Цією командою міняємо фьюзи – прим. перекл.)

Після успішного виконання команди ви побачите таке:

 

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e930b
avrdude: reading input file "0x5F"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0x5F:
avrdude: load data hfuse data from input file 0x5F:
avrdude: input file 0x5F contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

 

Це все, тепер P5 на вашому клоні DIGISPARK можна застосовувати як звичайний GPIO-пін. Також ви маєте можливість програмувати плату через з’єднання USB. Якщо ви бажаєте повернути RESET-пін або можливість ICSP-програмування, вам потрібен високовольтний програматор. Дивись посилання вище.

 

Коментар автора TheToivonen (20/4/16 16:06)  з приводу резистора і конденсатора:

Резистор необхідний для запобігання перезавантаження плати ARDUINO, яку ми використовуємо як програматор, яке відбувається, коли встановлюється з’єднання по послідовному порту.

Для зручності, плати ARDUINO налаштовані так, що при встановленні такого з’єднання ATMEGA перезавантажується. Це добре, тому що тоді ATMEGA запускає бутлоадер, що дозволяє нам завантажувати програми по USB. Якщо такої програми немає, ATMEGA починає виконувати раніше прошиту програму. Загалом, це поведінка контролера, яка використовується найбільше. В іншому випадку вам довелося б вручну натискати кнопку RESET у визначений момент часу при завантаженні скетчу. Це не є проблемою, але викликає незручності.

Ланцюг, що використовується для автоматичного RESET, являє собою RC-ланцюг, під’єднаний до FTDI DTR-піна. Коли DTR-пін переходить в низький рівень, RESET-пін ARDUINO переходить в низький рівень на приблизно 1 мс. В цьому ланцюгу встановлений резистор на 10 кОм.

В нашому випадку, ми не хочемо, щоб ATMEGA перезавантажувався при встановленні з’єднання по послідовному порту. Коли AVRDUDE встановлює з’єднання, необхідно, щоб програма могла відправляти команди ATMEGA, який відправить їх ATTINY. Якщо ми не деактивуємо автоматичне перезавантаження, ATMEGA не буде готова вчасно.  

Додавши 150-омний резистор паралельно до 10-кілоомного, ми можемо змінити тривалість перебування RESET в низькому рівні до кількох мікросекунд, що буде проігноровано ATMEGA.

Я пробував обійтися без резистора або використати резистори дещо більшого номіналу (220 кОм), але це не спрацювало. В «офіційній» документації встановлений діапазон 110…124 Ом, але виявилося, шо резистор  у 150 Ом теж добре працює. До цього часу я не пошкодив жодного ATTINY…

* На завершення, RESET-ланцюг в Uno має інший вигляд, і для запобігання автоматичного перезавантаження замість резистора слід підключати конденсатор у 10мкФ між RESET і «землею».

 

Ще один коментар, від Stevo(12/6/17 05:10), завдяки якому я наважився зробити все без резисторів і конденсаторів через ARDUINO Nano:

Привіт.

Спрацювало з моїм клоном ARDUINO Nano (в якості програматора) і клоном DIGISPARK. Потрібні тільки проводи! Я перевірив роботу на прикладі класичного скетча Blink, все працює на P5 після зміни фьюзів. Windows 7.

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Звільняємо пін P5 від RESET на клонах DIGISPARK"
4 з 5
зроблена на основі 1 оцінки 1 клієнтських відгуку.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
MaksYann
12.02.2021 11:24:03
Очень познавательная статья.Но можно все это сделать гораздо быстрее и проще.https://www.youtube.com/watch?v=vhWCv87TnJw
оплата картами Visa і MasterCard