В одній з попередніх статей я міркував як можна здешевити виріб на Arduino.
І згадав версію, яка називається Arduino Pro mini. Купив я її на ebay за 120р, зараз вже можна знайти дешевше 100р. Виглядає вона так, з рукою для масштабу:
Дешевизна її обумовлена тим, що на ній горазда менше деталей, ніж на простий Arduino Uno. Відразу кидається в очі відсутність USB порту і виникає питання, як її прошити?
Прошивати потрібно программатором. У минулій статті я використовував програматор USBASP
Можна використовувати його, але я хочу в цій статті показати, як можна використовувати іншу Arduino як програматора. Для цього не знадобиться взагалі нічого крім самої ардуінкі. Розробники вже все продумали і написали потрібний софт. Беремо будь-яку іншу Arduino з USB портом
Підключаємо його до комп'ютера і завантажуємо в нього програму, яка зробить з нього програматор ArduinoISP.
Для цього в середовищі розробки Arduino вибираємо Файл-Приклади-ArduinoISP.
І завантажуємо цю програму в нашу Arduino звичайним способом (налаштувавши в меню "Інструменти" пункти "Плата" і "Порт"
Тепер можна використовувати цю ардуінку як програматор, що б запрограмувати нашу Arduino Pro mini. Для прошивки нам потрібно підключити 6 висновків MISI, MOSI, SCK, RESET, VCC і GND. Подивимося що написано ззаду нашої Arduino Pro mini:
Зліва ми бачимо потрібні нам висновки. Відповідні висновки на нашому программаторе ми можемо підглянути в тексті тільки що прошитої програми:
Тобто MOSI - 11 цифровий висновок, MISO - 12, SCK - 13, RESET - 10.
VCC - це харчування, GND - земля.
Підключаємо наш програматор до Arduino Pro mini
Тепер спробуємо прошити в Pro mini програму моргання світлодіодом.
Відкриємо стандартний приклад Blink
Відкрився текст програми, приведу його тут:
void setup () <
// initialize digital pin LED_BUILTIN as an output.
pinMode (LED_BUILTIN, OUTPUT);
>
// the loop function runs over and over again forever
void loop () <
digitalWrite (LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay (1000); // wait for a second
digitalWrite (LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay (1000); // wait for a second
>
Після останнього оновлення середовища розробки Arduino приклад Blink змінився! Ось як він виглядав раніше (у мене збереглося зображення з попередньої статті):
В чому різниця? Раніше ми підключали до Ардуіно світлодіод на потрібний нам цифровий висновок, який за замовчуванням був зазначений 13. Зараз замість виведення 13 коштує константа LED_BUILTIN, що говорить сама за себе. Більшість Arduino мають вбудований світлодіод. І ось збіг, він як раз і підключений до цифрового висновку 13. А константа LED_BUILTIN має значення 13 (по крайней мере для нашої Arduino UNO, за інші відповідати не буду). Так що по суті приклад моргання светодиодом не змінився, але зате ми дізналися про константу LED_BUILTIN.
Ми можемо підключити світлодіод до 13 цифровому висновку, а можемо не підключати і просто подивитися як буде моргати вбудований в Arduino Pro mini світлодіод.
Щоб завантажити програму в Arduino Pro mini необхідно в меню "Інструменти" вибрати пункт програматор - Arduino as ISP (не переплутайте з ArduinoISP)
І тепер завантажуємо програму в Ардуіно через меню "Скетч" - "Завантажити через програматор"
Програма скомпілюється і заллється на наш Arduino Pro mini. Після чого ми побачимо моргання вбудованого світлодіода.
Як бачите в прошивці Arduino Pro mini немає нічого складного. І точно таким же способом можна прошити голі чіпи Atmega.
У цій статті я покажу як управляти через Ардуіно ось таким ось дисплейчик:
Купив я його на ebay.com за 100р. Знайти подібний дисплей можна за запитом "tm1637". Я купив перший-ліпший мені на очі дисплей і пізніше, коли він прийшов і я спробував його запалити, я зрозумів, що дисплеї ці, виявляється, бувають різні. Різниця в тому, що вони управляються різними драйвером. Мій дисплей працює на двох чіпах TM74HC595, а є такий, який працює на одному чіпі TM1637. Виглядає він так:
У дисплея на TM1637 всього 4 ніжки: 2 харчування і 2 - управління. Так ось, якщо б мені попався цей дисплей, я б без зусиль знайшов на нього робочу бібліотеку для Arduino і легко навчився б їм управляти. Але мені прийшов на двох чіпах TM74HC595 і будь-якої бібліотеки під Arduino для нього я не знайшов. Зате знайшов на зарубіжних форумах пару робочих рядків коду, розібрався в їх суті і написав свою бібліотеку для роботи з цим дисплеєм на Arduino. Завантажити бібліотеку можна тут. Сподіваюся полегшив комусь життя.
Отже приступимо. Встановлюємо завантажену бібліотку в папку Arduino / libraries, запускаємо середу розробки і відкриваємо мій приклад.
У прикладі задані 3 виведення
Замість великої Arduino Uno, я буду використовувати мікроконтролер Atmega328.
Підключаю відповідні ніжки до дисплея і завантажую програму на мікроконтролер.
Програма спочатку виводить цифру "0" на перший індикатор.
Потім цифру "3" на 2й і 3й індикатор
Потім букву "А" на всі індикатори
Потім веде відлік 0-99 на перших двох індикаторах
Потім веде відлік 0-99 на 3м і 4м індикаторі
Потім веде відлік 0-100 з провідними нулями, тобто 0001 0002, 0003.
І в кінці веде відлік 0-9999 без ведущіз нулів, тобто 1, 2, 3.
В кінці виявив, що при від'єднанні від дисплея дроти живлення, він все одно продовжує працювати, отримуючи харчування від керуючих дротів.
Я покажу як прямо з середовища програмування Arduino прошити мікроконтролери Atmega328 і Atmega8. Перший у мене є в DIP корпусі, а другий в TQFP.
Для програмування я використовую програматор USBasp. Купив його на ebay.com. коштує він в межах 150р.
Перша проблема з якою зіткнуться користувачі Windows8 і Windows10 - установка драйвера для USBasp.
Проблема в тому, що ці операційні системи просять, щоб у драйвера була якась цифровий підпис, а у драйверів для USBasp на сьогоднішній день її немає. Проблема вирішується відключенням перевірки цих цифрових підписів. Для цього перезавантажуємо комп'ютер, натиснувши клавішу Shift. З'являється екран, на якому вибираємо "Діагностика"
Далі - "Додаткові параметри"
Тут варто пояснити значення цього резонатора.Скорее всього в купленому вами микроконтроллере виставлені настройки (fuses) на роботу від зовнішнього тактового генератора, тобто від кварцу. Тому, що б його прошити, потрібно що б він був підключений до цього самого кварцу. Для перепрошивки кварц можна взяти будь-який попався вам під руку. Я коли вперше перепрошивати просто випаяв його з якогось зламаного пристрої, ось він маленький на фото.
Його вистачило що б мікроконтролер перепрошити. Якщо ж ваш мікроконтролер спочатку налаштований на роботу від внутрішнього тактового генератора, то для прошивки кварц вам не потрібен, можна обійтися і без нього.
Для того, що б можна було прошивати мікрочіп прямо з середовища розробки Arduino, потрібно залити на чіп ардуіновскій завантажувач. Для цього скористаємося програмою avrdude і онлайн конструктором загрузчиков для Ардуіно. На сторінці онлайн конструктора загрузчиков переходимо до самого низу і бачимо конструктор
1. Вибираємо "Внутрішній генератор" якщо не хочемо використовувати кварцовий резонатор, або вибираємо "Зовнішній генератор" якщо хочемо збільшити швидкість роботи чіпа.
2. Вибираємо модель мікроконтролера (в нашому випадком Atmega328)
3. Натискаємо "Створити HEX"
З'являється таке вікно:
Перше що ми робимо - завантажуємо наш завантажувач у вигляді hex файлу. Якщо конструктор з якоїсь причини не працює, можна викачати завантажувач для atmega328 для внутрішнього генератора тут.
Нижче ми бачимо блок файлу boards.txt для Arduino IDE. Я довго намагався підключити цей блок, що б в середовищі Ардуіно з'явився вибір плати, але мені це чомусь не вдалося, в результаті обійшовся без цього.
Ще нижче ми бачимо підказку як залити завантажувач через програму avrdude і програматор USBasp. Я роблю так:
-Підключаю програматор до комп'ютера через USB.
-Копіюю HEX файл в папку avrdude
-Створюю bat файл в папці avrdude і копіюю в bat цей рядок
avrdude -c usbasp -p atmega328p -U flash: w: a328p_8MHz_e2_de_5.hex -U lfuse: w: 0xe2: m -U hfuse: w: 0xde: m -U efuse: w: 0x5: m
@echo This batch file
-Запускаю bat файл. Якщо ліньки створювати bat файл, можете завантажити його тут.
Якщо все зроблено правильно, ви побачите щось подібне
Це означає, що все пройшло добре і на наш мікроконтролер залився завантажувач Ардуіно. Тепер ми зможемо прошивати його прямо з середовища програмування Arduino.
Якщо ви десь накосячілі і щось зробили неправильно, можете побачити таке повідомлення:
Тут можуть бути різні причини:
-Можливо ви не правильно з'єднали програматор з мікрочіпом. Перевірте з'єднання.
-Можливо ви не підключили кварцовий резонатор, а ваш мікроконтролер налаштований на роботу від нього. Тоді підключіть будь кварцовий резонатор, хоч з китайських наручних годинників Випаяти.
-І третій варіант про який я не сказав, але з яким теж зіткнувся, коли порушували Atmega8. На якомусь форумі мені підказали, що мікрочіп працює на зниженій частоті і щоб прошити його, потрібно на программаторе замкнути перемичку JP3. Що власне мені і допомогло.
Якщо проблем у вас не виникло і завантажувач Arduino успішно записався на чіп, то переходимо до прошивці чіпа через середу програмування Arduino.
По-перше, якщо ви в онлайн конструкторі завантажувача вибирали "Внутрішній генератор", то кварцовий резонатор можна прибрати зі схеми.
Відкриємо середу розробки Arduino і запустимо класичний приклад моргання светодиодом:
Бачимо, що в прикладі вказано цифровий вихід 13. На мікрочіпі він відповідає ніжці 19
Оскільки цей висновок у нас зараз підключений до программатору під висновок SCK, то змінимо в програмі 13 висновок на 5.
І підключимо до нього світлодіод.
Вибираємо в Інструментах плату, чіп і програматор