Схеми на attiny2313 своїми руками. Підключаємо кнопку до мікроконтролера ATtiny2313, проста програма. Компіляція та прошивка програми в МК

Як зібрати найпростішу схему, як підключити програматор до мікроконтролера ATtiny2313, як написати найпростішу програмумовою Сі і як прошити нашою програмою мікроконтролер ATtiny2313, все це ви знайдете в цій статті.

Насамперед нам потрібен програматор, різновидів програматорів багато, який програматор вибрати?
Є звичайні програматори в який потрібно вставляти мікроконтролер, прошивати, виймати мікроконтролер і потім вставляти його в нашу плату, щоб побачити результат і цю послідовність доведеться робити спочатку сотні разів, цей варіант на мій погляд не зручний.
Наш мікроконтролер ATtiny2313підтримує функцію внутрішньосхемного програмування ISP (In-System Programming) через SPI порт, цей варіант використання внутрішньосхемного програмування ISPна мій погляд найзручніший і найшвидший, т.к. мікроконтролер з нашої плати виймати не потрібно після кожної прошивки, можна програмувати мікроконтроллер сотні разів і відразу ж не відключаючи програматор від комп'ютера та плати, бачити результат після прошивки мікроконтролера, процес налагодження програмного забезпеченнярадіоаматорського пристрою помітно спрощується і скорочується витрачається цей час.
Внутрішньосхемний програматор ISP можна зробити самому, в інтернеті є безліч простих схемяк це робиться через LPT, COM портнаприклад програматор PonyProgв інтернеті можна знайти схеми, як його зробити.

У цій статті розглядатиметься робота з внутрішньосхемним ISP програматором для мікроконтролерів AVR (PX-400)він працює через порт COM.
Якщо у вас немає COM порту в комп'ютері, потрібен буде ще перехідник з USB портуна COM порт, перехідників таких теж багато різновидів, я рекомендую перехідник з яким я працював: UCON-232S USB на Serial port converter board
Фото програматора PX-400, перехідника UCON-232S USB , Datasheet ATTiny2313

Розберемо докладніше всі деталі цієї схеми:
(Про всяк випадок, всі деталі, програматор, перехідник (з USB на COM порт) я купував у chipdip.ru)

1 - PBD-20 гніздо на плату 2.54мм 2х10 пряме– Це я зробив для зручності, щоб простіше було перевіряти сигнали з висновків мікроконтролера, цей пункт можна було не робити.
2 - SCS-20 DIP панель 20 контактів- панель припаюємо до плати, щоб була можливість замінити мікроконтролер у платі якщо потрібно,
ATtiny2313-20PU, DIP20, МCU, 5V, 1K-Flash, 12MHz- Мікроконтролер вставляємо у DIP панель.
3 - Кварцовий резонатор 4.000 МГц (усічений) HC-49S- Кварцовий резонатор 4 МГц
4 - Керамічний конденсатор К10-17Б імп. 22пФ NPO,5%,0805- Два керамічні конденсатори по 22пФ
5 - 78M05 (+5В, 0.5А) TO220- Стабілізатор напруги 5В, подає на мікроконтролер стабілізоване харчування не більше +5В, в даному випадку у мене вийшло 4,4В, цього цілком вистачає.
6 - NP-116 штекер живлення 1.3х3.4х9.5мм MP-331 (7-0026c)– Штекер харчування припаяв до старого зарядного пристроювід мобільного телефона DC 5.7V/800mA
7 - DS-213 гніздо живлення на плату- дездо живлення для штекера NP-116, для зручності підключення живлення
8 - IDC-10MS (BH-10), вилка пряма- Вилка для підключення внутрішньосхемного ISP програматора
9 - Резистор постійний 0,25Вт 150 Ом- Три резистори по 150 Ом на висновки MISO, SCK, MOSI
10 - Резистор постійний 0,25Вт 47 Ом- Один резистора 47 Ом на висновок RESET
11 - Кнопка тактова h=5мм, TC-0103 (TS-A2PS-130)- Кнопка скидання RESETПісля натискання на кнопку програма в мікроконтролері запускається з початку, кнопку можна було не робити.
12 – Світлодіод зелений d=3мм, 2.5В, 2мА – Виконує функцію індикатора, цей пункт можна було не робити.
13 - Резистор постійний 0,25Вт 110 Ом– Резистор для світлодіода, щоб на світлодіоді було 2В, цей пункт можна було не робити
14 - Два дроти підключені до світлодіоду, для перевірки сигналів з висновків мікроконтролера, цей пункт можна було не робити
15 - Дип-Рм друкована макетна плата 100х100мм

Пункти 3 і 4 Працюють як єдине ціле, як зовнішній тактовий генератор, ці пункти можна не робити, якщо ви не пред'являєте високих вимог до точності та стабільності внутрішнього RC-генератора, внутрішній RC-генератор має похибку близько 10% і на точність може впливати зміна температури.

Отже, ви завантажили та встановили Atmel Studio :
Запускаємо Atmel Studioі напишемо найпростішу програму мовою Си миготіння світлодіодом:
Натискаємо: New project... \ AVR GCC \ C \ C Executable Project
Вказуємо папку де зберегти проект та назву проекту наприклад Test1 та натискаємо ОК.
Зі списку вибираємо наш мікроконтролер ATtiny2313 і натискаємо ОК.
Стираємо все, що з'явилося у вікні і вставляємо наш код програми, який нижче:

#define F_CPU 4000000L //Вказуємо частоту нашого зовнішнього кварцу 4 МГц
#include
#include
int main(void)
{
//Встановлюємо всі висновки PORTB як виходи
DDRB=0xFF;//Регістр напряму передачі (1-вихід, 0-вхід)
while(1)
{
//Регістр даних PORTB (використовується для виведення інформації)
PORTB=0b00000001;//Подаємо 1 на 12 порт МК PB0 - включаємо світлодіод
PORTB=0b00000000;//Подаємо 0 на 12 порт МК PB0 - вимикаємо світлодіод
_delay_ms (1000); / / Затримка 1 сек.
}
}

Заходимо у меню Build \ Configuration manager \ Active solution configuration \
Вибираємо Release, натискаємо Close
Це ми зробили для того, щоб у нас з'явилась у проекті папка Release, Про яку я розповім нижче.

Натискаємо F7, готово, наш додаток відкомпілювався!
Для прошивки мікроконтролера ATtiny2313 нам потрібен лише один файл із розширенням HEX
Він знаходиться в папці нашого проекту: ...
Зверніть увагу, файл Test1.hexнуно взяти саме з папки Release !
Чи не переплутайте, т.к. папці Debugлежить також файл Test1.hex, але в цьому файлі ще міститься налагоджувальна інформаціяі через це ви прошити цим файлом не зможете. він зазвичай буває великого розміруі не поміститься у пам'яті МК.

Файл.hex знайшли, тепер потрібна програма для прошивки мікроконтролера ATtiny2313, таких програм багато, але ми скористаємося програмою: Avr-Osp II
Завантажити:

Підключаємо програматор до нашої схеми, на схему обов'язково подаємо харчування!

Запускаємо програму Avr-Osp II, вказуємо в розділі FLASH шлях до файлу... \Test1\Test1\Release\Test1.hex,встановлюємо галочки в програмі та натискаємо кнопку Programот і все, мікроконтролер ATtiny2313 прошить!

У чому перевага внутрішньосхемних програматорів ISP, тепер не відключаючи дроти від нашої схеми, можна робити зміни у програмі, і як описувалося вище прошивати мікроконтролер і відразу бачити результат.

Запитання та коментарі залишайте будь ласка на нашому форумі

AVR RISC архітектура:

RISC (Reduced Instruction Set Computer). Ця архітектура має великим наборомінструкцій, більшість яких виконуються в 1 машинний цикл. З цього випливає, що в порівнянні з попередніми мікроконтролерами на базі CISC архітектури (наприклад, MCS51), мікроконтролери на RISC швидкодія в 12 разів швидше.

Або якщо взяти за базу певний рівень швидкодії, то для виконання даної умовимікроконтролерам на базі RISC (Attiny2313) необхідна в 12 разів менша тактова частота генератора, що призводить до значного зниження енергоспоживання. У зв'язку з цим виникає можливість конструювання різних пристроїв Attiny2313, з використанням батарейного живлення.

Оперативно — запам'ятовуючий пристрій (ОЗП) та енергонезалежна пам'ять даних та програм:

  • 2 кБ програми, що самостійно програмується в режимі Flash, яка може забезпечити 10 000 повторів запису/стирання.
  • 128 Байт записуваної в режимі EEPROM пам'яті даних, яка може забезпечити 100 000 повторів запису/прання.
  • 128 Байт SRAM пам'яті (постійне ОЗП).
  • Є можливість використовувати функцію захисту даних програмного коду та EEPROM.

Властивості периферії:

  1. Мікроконтролер Attiny2313забезпечений восьми розрядним таймер-лічильником з окремо встановлюваним дільником з максимальним коефіцієнтом 256.
  2. Також є шістнадцяти розрядний таймер-лічильник з роздільним предделителем, схемою захоплення та порівняння. Тактуватися таймер - лічильник може як від зовнішнього джереласигналу, і від внутрішнього.
  3. Два канали. Існує режим роботи швидкий ШІМ-модуляції та ШІМ з фазовою корекцією.
  4. Внутрішній аналоговий компаратор
  5. Сторожовий таймер (програмований) із внутрішнім генератором.
  6. Послідовний універсальний інтерфейс (USI).

Особливі технічні показники Attiny2313:


  • Idle- Режим холостого ходу. У разі припиняє свою роботу лише центральний процесор. Idle не впливає на роботу SPI, аналоговий компаратор, аналого-цифровий перетворювач, таймер-лічильник, сторожовий таймер та систему переривання. Фактично, відбувається лише зупинка синхронізації ядра центрального процесората флеш-пам'яті. Повернення в нормальний режим роботи мікроконтролера Attiny2313 з режиму Idle відбувається за зовнішнім або внутрішнім перериванням.
  • Power-down— Найбільш економний режим, за якого мікроконтролер Attiny2313 фактично відключається від енергоспоживання. У цьому стані відбувається зупинка тактового генератора, вимикається вся периферія. Активним залишається лише модуль обробки переривань від зовнішнього джерела. При виявленні переривання мікроконтролер Attiny2313 виходить із Power-down і повертається в нормальний режим роботи.
  • Standby– у цей черговий режим енергоспоживання мікроконтролер переходить за командою SLEE. Це аналогічно виключенню з тією лише різницею, що тактовий генератор продовжує свою роботу.

Порти введення - виведення мікроконтролера Attiny2313:

Мікроконтролер наділений 18 висновками введення-виводу, які можна запрограмувати виходячи з потреб, що виникають при проектуванні конкретного пристрою. Вихідні буфери даних портів витримують відносно високе навантаження.

  • Port A (PA2 - PA0) - 3 біти. Двонаправлений порт вводу-виводу з програмованими резисторами, що підтягують.
  • Port B (PB7 - PB0) - 8 біт. Двонаправлений порт вводу-виводу з програмованими резисторами, що підтягують.
  • Port D (PD6 - PD0) - 7 біт. Двонаправлений порт вводу-виводу з програмованими резисторами, що підтягують.

Діапазон напруги живлення:

Мікроконтролер успішно працює при напрузі живлення від 18 до 55 вольт. Струм споживання залежить від режиму роботи контролера:

Активний режим:

  • 20 мкА при тактовій частоті 32 кГц та напрузі живлення 1,8 вольт.
  • 300 мкА при тактовій частоті 1 МГц та напрузі живлення 1,8 вольт.

Режим енергозбереження:

  • 0,5 мкА при напрузі живлення 1,8 вольт.

(3,6 Mb, завантажено: 5 934)

Пристрій цієї статті – робота з SD картами. Тема стара і порядно заїжджена, але застосування SD карток варто того, щоб про це написати ще раз.
Взагалі SD карти (SDC, SD Card) мають багато переваг і їх дуже просто і зручно застосовувати в невеликих проектах, що вбудовуються. Цьому сприяє низка факторів:
- дуже простий інтерфейс взаємодії з карткою (реалізується за допомогою SPI);
- велика швидкість роботи (мікроконтролер здатний переганяти дані з карти SD зі швидкістю близькою до 10 Мбіт/с);
- низьке енергоспоживання (буквально пару міліампер - не більше);
- невеликі розміри;
- доступність та дешевизна.
У SD карток практично немає недоліків (крім, хіба що, процедури їх ініціалізації:)).

1. Введення.

Пристрій, описаний у цій статті, назвав SD Card Talking Device. Трохи пафосно;), але за назвою зрозуміло, що це пристрій, що говорить. Воно призначене для озвучення ваших проектів. Якщо коротко, то воно працює таким чином: на SD карту записуються пронумеровані звукові файли, які пристрій програє за Вашою командою. Сфера застосування досить широка - системи оповіщення, іграшки, роботи, розумний будинокі т.д. Габарити пристрою досить скромні (можна і менше, але я свідомо вибрав мікроконтролер ATtiny2313, який дешевше і легше дістати). Основний наголос я намагався робити на простоту та максимальну функціональність.
Забігаючи вперед, дивимося, що має вийти в результаті:

Стане в нагоді такий пристрій? Тоді збираємо!

2 Карта пам'яті.

У пристрої використовується картка пам'яті SD. Про причини вибору я вже писав, додам тільки те, що SD карти стають чи не стандартом карт пам'яті мобільних пристроїв. Навіть виробники, які фанатично просували/просувають свій тип карток пам'яті, потихеньку починають застосовувати SD картки. Причиною такої популярності, мабуть, стала невелика ціна цих карток. Для аматорських пристроїв SD карта, власне, єдина карта придатна до застосування і тут причиною є простий інтерфейс роботи з нею.

SD карта пройшла досить довгий шлях еволюції та має кілька варіантів її реалізації (MMC – як варіант SD карти, SD ver1, SD ver2, SDHC, SDXC). Процедура спілкування з картою проста і універсальна для всіх типів карт, а ось запуск в роботу (ініціалізація карти) досить неоднозначний і заплутаний процес, з ритуальними «пересмикуваннями» карти, посилкою порожніх «dummy» команд та іншими незрозумілими речами (короче, танці з бубнами) обов'язкові:)). Сама специфікація на SDC протокол описує процес ініціалізації досить просторо, воно й зрозуміло, виробників карток темрява, у кожного своє залізо, зі своїми особливостями… До чого я це веду? - Я спробував зробити процедуру ініціалізації максимально універсальною, але будьте готові до того, що деякі карти не підуть. Тому якщо у Вас чогось не ладнається з пристроєм, спробуйте іншу карту пам'яті – може причина в цьому.

У даному пристроїпідтримуються карти SD розміром до 2 Гб, включно. Все що вище (SDHC та SDXC) – не підтримується.
Для пристрою немає різниці в якому форм-факторі картка (SD, MiniSD або MicroSD), але Ви повинні правильно її підключити, відповідно до розпинування картки.

3 Файлова система.

У пристрої працюють картки, що мають файлову систему FAT16. Ця система якнайкраще підходить для пристроїв подібних до нашого, так як проста і легко реалізована (FAT12 і FAT32, в принципі, теж не складно реалізувати, але це недоцільно, через відсутність будь-яких переваг у порівнянні з FAT16).

Немає особливих вимог щодо форматування картки - її можна відформатувати в будь-якому доступному пристрої. Стандартне форматування Windowsцілком підходить для цих цілей.

Для коректної роботи пристрою звукові файли, розташовані на карті SD, повинні відповідати певним вимогам:
а) Формат файлу має бути - стиснутим WAV.
Параметри файлу такі:
- Бітрейт – частота дискретизації (Frequency) – 32000 Гц;
- кількість каналів (Channels) - 1 (mono);
- Розмірність (Sample size) – 8 біт.
Ще можливе таке скорочення - WAV PCM 8U

b) Файл має бути названий особливим чином. Щоб пристрій знало який файл перший, другий, третій тощо. перший символ імені файлу має бути великою літерою латинського алфавіту (решта назви, як і розширення файлу - ігнорується).
Наприклад, коректними будуть такі назви файлів:
А_Лай_собаки.wav – перший трек
B-Це другий трек.wav - другий трек
З Warning! Error!.wav - третій трек

c) Для використання додаткових можливостей пристрою файли можуть розташовуватися у двох папках з іменами «1» і «2». Пристрій має перемикач для вибору активної папки, тобто одна і та ж команда запуску відтворення може запускати треки з папки «1» або «2», залежно від рівня на вході, що перемикає (свого роду вибір звукової схеми - дуже корисна річ!) . Якщо жодної папки (або обох) не існує, файли відтворюються з кореневого каталогу.

Разом зі звуковими треками можна зберігати будь-які інші файли, за умови, що вони не створюватимуть конфліктів своїми іменами (краще їх скласти в окремий каталог, тоді не доведеться звертати уваги, як вони там названі).

d) Зважаючи на малий об'єм SRAM, у ATtiny2313 неможливо створити буфер для попереднього читання даних, тому дані з файлу безпосередньо видаються на відтворення. Відповідно, немає можливості (бракує часу) виконувати пошук фрагментів файлу за таблицею FAT. Іншими словами, файли, записані на карту, мають бути не фрагментовані.

Насправді це не є великою проблемою, оскільки будь-яка операційна системазавжди намагається записати файл цілим шматком і поки у Вас на карті є місце будь-які дії з файлами (видалення, копіювання, перейменування) не вплинуть на їх цілісність. Якщо у Вас карта дуже малого об'єму або Ви заповнили вщент велику карту, для того, щоб бути впевненим у цілісності файлів, просто скопіюйте їх на жорсткий дисккомп'ютера, відформатуйте карту і поверніть файли назад.

4 Схема. Друкована плата.

Схема пристрою є максимально простою. Фактично, крім самого мікроконтролера та SD карти, у ній нічого немає. Для себе я зробив друк під SMD компоненти, тому що планується застосувати цей девайс в обмеженому за габаритами місці. Якщо для Вас габарити не критичні, можна зібрати схему на макетці в DIP варіанті. У разі макетки, збирання пристрою займе у Вас від сили 15 хвилин. Допустима напруга живлення для SD карти від 2.7 до 3.6 вольт. У цьому проміжку нормально працює і мікроконтролер, тому немає необхідності застосовувати будь-які узгоджувальні компоненти. Я перевіряв роботу всього пристрою і при живленні в 5 вольт – все працювало нормально, але не рекомендую так робити на постійній основі, Оскільки різні карти можуть на перевищення напруги реагувати по-різному. Як кардхолдер для microSD я використовував адаптер, підпаявшись прямо до його контактів. Якщо потрібні менші габарити краще використовувати справжній кардхолдер для microSD.

Для прошивки мікроконтролера використовується той же роз'єм, що і для SD карти, тому доведеться подумати як до нього підключити програматор (я спеціально зробив перехідник).

Після того як плата спаяна – можна прошивати мікроконтролер.

Невелика галерея готового пристрою:




Невеликий нюанс за схемою.
При установці SD картки в кардхолдер (підключенні картки до джерела живлення) створюється стрибок струму і, відповідно, просадка напруги в схемі (схоже, в карті в цей час заряджаються значні ємності). Просідання настільки значне, що відбувається скидання мікроконтролера. Я це використовую для початку процедури ініціалізації карти (установка карти перезапускає мікроконтролер і перше, що робить прошивка це пошук та ініціалізація карти). Якщо у Вас при установці карти не відбувається скидання МК (потужне джерело живлення або великі ємності, що згладжують), то Вам потрібно подбати про кнопку скидання в схемі для ручного скидання мікроконтролера (це якщо планується «гаряча» зміна карт).

5 Робота пристрою.

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

5.1 Кнопки пристрою, їхня дія.

Я спробував зробити пристрій максимально функціональним, тому дуже багато ніжок мікроконтролера задіяні під перемикачі режимів роботи (від цього пристрій нагадує їжачка:)). Якщо Вам якась функція не потрібна - просто залиште «висіти» ногу в «повітря».
Дія перемикачів:
- “Monster” – дозволяє уповільнити (у 2 рази) відтворення треку – створюючи ефект низького голосу. Перемикач працює «на льоту» – швидкість змінюється за фактом перемикання;
- “Helium” – прискорює відтворення треку (на 1/3) – створюючи ефект високого голосу. Перемикач працює "на льоту";
- "Repeat" якщо цей перемикач замкнутий на землю, то вибраний трек буде нескінченно (до моменту розмикання перемикача) відтворюватиметься. Це може бути корисним, наприклад, якщо потрібно створювати певний звуковий фон – шум дощу, горіння багаття, дзюрчання струмка…;
- “Select / Play” кнопка, яка запускає трек на відтворення (опис нижче);
- "Select track"- встановлення номера відтворюваного треку (опис нижче);
- “Dir1/Dir2” – вибір звукової схеми (опис нижче).

5.2 Запуск відтворення.

Запустити відтворення певного треку можна трьома способами:
- надіславши UART заголовну букву латинського алфавіту - відразу починається відтворення файлу, що містить цю букву на початку назви;
- якщо за допомогою “Select track” вибрано номер файлу (двійковим кодом 0001=”A”, 0010=”В”, і т.д. 1- нога замкнута на землю, 0 - “висить” у “повітря”), то кнопка "Select / Play" запустить відповідний файл на відтворення;
- якщо за допомогою "Select track" нічого не вибрано (0000 - ноги "висять" у "повітрях")), то натискаючи кнопку "Select / Play" певну кількість разів, запускаємо відповідний трек (1 раз = "A", 2 рази = "В", і т.д.).

5.3 Звукові схеми.

Дуже корисною функцією є функція вибору однієї із двох звукових схем. Це означає, що перемикачем Dir1 / Dir2 вибирається папка на карті, з якої відтворюватиметься трек.

Застосувань дуже багато: повідомлення російською та англійською (навчальні іграшки), дитячий та дорослий голос, шуми поточної води та палаючого вогню, кішка / собака, добрий і злий поліцейський:) , заспокійливі / бадьорі звуки та ще купа подібних варіантів.

Наприклад, Вам потрібно, щоб ваш пристрій вміло спілкуватися чоловічим та жіночим голосом. Реалізується це так:
- створюємо два комплекти повідомлень, відповідно, в жіночому та чоловічому варіанті;
- Нумерацію файлів для обох варіантів робимо однакову. Не забуваємо, що пристрій «бачить» тільки першу літеру в назві файлу, тому для себе Ви можете імена зробити більш зрозумілими, наприклад «С_Ожидаю команду_муж.wav» і «С_Ожидаю команду_жен.wav» цілком коректні;
- комплект чоловічих повідомлень копіюємо до папки «1», а жіночих до папки «2».
Тепер в залежності від стану перемикача "Dir1 / Dir2" по одній і тій же команді відтворюватимуться треки з "чоловічої" або "жіночої" папки.

5.4 Індикація роботи пристрою.

Так як у тині2313 дуже мало ніг, і майже всі задіяні на перемикачі, мені довелося пожертвувати нормальною індикацією, а натомість зробити щось НЕ нормальне. Для індикації різних режимів роботи використовується лише одна нога мікроконтролера, до якої підключено два світлодіоди - червоний і зелений (ну або які Вам більше подобаються). Різні режими роботи пристрою відображаються певним колірним кодом:
- блимає червоний світлодіод - відсутня SD карта або її тип не підтримується пристроєм;
- горить червоний світлодіод - SD карта підтримується та вдало проініціалізувалася, але карта відформатована не в FAT16;
- горить зелений світлодіод - SD карта вдало проініціалізувалася, знайдена потрібна файлова системаі пристрій готовий відтворювати трек - очікування команди;
- блимає зелений світлодіод - пристрій відтворює трек;
- горить зелений, короткочасно спалахує червоний, знову горить зелений - не знайдено трек;
- горить зелений, короткочасно тухне і знову спалахує зелений - натиснута клавіша вибору треку.

5.5 Налагоджувальна інформація.

Для полегшення пошуку проблемних місць (якщо пристрій не хоче працювати), я кожен етап ініціалізації в програмі продублював повідомленнями по UART. Після кожного успішного кроку UART відправляється відповідний символ:
- "S" - (Start) периферія мікроконтролера проініціалізована нормально;
- "C" - (Card Init) SD карта проініціалізована нормально та підтримується;
- "F" - (FAT Init) FAT системапідтримується;
- "1" - (No 1 Dir) немає папки "1" читання буде здійснюватися з кореневої директорії;
- “2” - (No 2 Dir) немає папки «2» читання буде здійснюватися з кореневої директорії;
- "R" - (Ready) пристрій повністю готовий - чекає команди запуку треку;
- Крім того, при кожному запуску треку, в UART передається велика літера імені треку.

6 Треки для озвучування Ваших пристроїв.

6.1 Конвертування треків

Якщо в бібліотеці вище нічого потрібного не знайшлося, то отримати необхідні треки можна в мережі (є багато спеціальних сайтів для музикантів та відео монтажу, де вже зібрані великі бібліотеки звуків), в інсталяціях ігор (часто звуки ігрового процесу розділені по треках і складені в окрему папку). Ще можна вирізати звукові ефекти з фільмів та музичних композицій. Знайдені треки потрібно переконвертувати у формат, який підтримує пристрій. Нагадую, формат файлу має бути - стиснутим WAV. 32000 Гц, 1 канал, 8 біт (WAV PCM 8U)
Для конвертації в такий формат підійде будь-який музичний редактор, або, якщо потрібно просто конвертувати трек без його редагування -

У багатьох пристроях побутової техніки та промислової автоматики порівняно недавніх років випусків встановлені механічні лічильники. Вони продукцію на конвеєрі, витки дроту в намотувальних верстатах і т. п. У разі виходу з ладу знайти аналогічний лічильник виявляється непросто, відремонтувати неможливо через відсутність запасних частин. Автор пропонує замінити механічний лічильник електронним. Електронний лічильник, що розробляється на заміну механічному, виходить занадто складним, якщо будувати його на мікросхемах малого та середнього ступеня інтеграції (наприклад, серій К176, К561). особливо якщо потрібний реверсивний рахунок. А щоб зберегти результат при вимкненому харчуванні, необхідно передбачити резервну батареюживлення.

Але можна побудувати лічильник всього на одній мікросхемі - універсальному програмованому мікроконтролері, що має у своєму складі різноманітні периферійні пристроїі здатне вирішувати дуже широке коло завдань. Багато мікроконтролерів мають особливу область пам'яті - EEPROM. Записані в ній (у тому числі під час виконання програми) дані, наприклад, поточний результат рахунку, зберігаються і після вимкнення живлення.

У лічильнику застосований мікроконтролер Attiny2313 з сімейства AVR фірми Almel. У приладі реалізований реверсивний рахунок, виведення результату з гасінням незначних н

вулик на чотирирозрядний світлодіодний індикатор, збереження результату в EEPROM при вимкненому живленні. Вбудований в мікроконтролер аналоговий компаратор використано для своєчасного виявлення зменшення напруги живлення. Лічильник запам'ятовує результат рахунку при відключенні живлення, відновлюючи його при включенні, і аналогічно механічному лічильнику має кнопку обнулення показань.

Схема лічильника представлена ​​малюнку. Шість ліній порту (РВ2-РВ7) і п'ять ліній порту D (PDO, PD1, PD4-PD6) використані для організації динамічної індикації результату рахунку на світлодіодний індикатор HL1. Колекторними навантаженнями фототранзисторів VT1 і VT2 служать вбудовані мікроконтролер і включені програмно резистори, що з'єднують відповідні висновки мікроконтролера з ланцюгом його живлення.

Збільшення результату рахунку N на одиницю відбувається в момент переривання оптичного зв'язку між діодом випромінюючим VD1 і фототранзистором VT1, що створює наростаючий перепад рівня на вході INT0 мікроконтролера. При цьому рівень на вході INT1 повинен бути низьким, тобто фототранзистор VT2 повинен бути освітлений діодом випромінюючим VD2. У момент наростаючого перепаду на вході INT1 за низького рівня на вході INT0 результат зменшиться на одиницю. Інші комбінації рівнів та їх перепадів на входах INT0 та INT1 результат рахунку не змінюють.

Після досягнення максимального значення 9999 рахунок триває з нуля. Віднімання одиниці з нульового значення дає результат 9999. Якщо зворотний рахунок не потрібен, можна виключити з лічильника випромінюючий діод VD2 і фототранзистор VT2 і з'єднати вхід мікроконтролера INT1 із загальним проводом. Рахунок йтиме лише на збільшення.

Як уже сказано, детектором зниження напруги живлення служить вбудований в мікроконтролер аналоговий компаратор. Він порівнює нестабілізовану напругу на виході випрямляча (діодного мосту VD3) із стабілізованим на виході інтегрального стабілізатора DA1. Програма циклічно перевіряє стан компаратора. Після відключення лічильника від мережі напруга на конденсаторі фільтра випрямляча С1 спадає, а стабілізований деякий час залишається незмінним. Резистори R2-R4 підібрані так. що стан компаратора у цій ситуації змінюється протилежне. Виявивши це, програма встигає записати поточний результат рахунку в EEPROM мікроконтролера ще до припинення його функціонування через вимкнення живлення. При наступному включенні програма прочитає число, записане в ЕЕРРОМ, та виведе його на індикатор. Рахунок буде продовжено з цього значення.

Зважаючи на обмежену кількість висновків мікроконтролера для підключення кнопки SB1, що обнулює лічильник, використаний висновок 13, що служить аналоговим інвертуючим входом компаратора (AIM) і одночасно - «цифровим» входом РВ1. Дільником напруги (резистори R4, R5) тут заданий рівень, що сприймається мікроконтролером як високий логічний. При натисканні на кнопку SB1 він стане низьким. На стан компаратора це не вплине, тому що напруга на вході AIN0, як і раніше, більша, ніж на AIN1.

При натиснутій кнопці SB1 програма виводить у всіх розрядах індикатора знак мінус, а після її відпускання починає рахунок з нуля. Якщо при натиснутій кнопці вимкнути живлення лічильника, поточний результат не буде записаний в EEPROM, а значення, що зберігається там, залишиться колишнім.

Програма побудована таким чином, що її легко адаптувати до лічильника з іншими індикаторами (наприклад, із загальними катодами), з іншим розведенням друкованої платиі т. п. Невелика корекція програми буде потрібна і при використанні кварцового резонаторана частоту, яка відрізняється більш ніж на 1 МГц від зазначеної.

При напрузі джерела 15 вимірюють напругу на контактах 12 і 13 панелі мікроконтролера щодо загального дроту (конт.10). Перше має перебувати в інтервалі 4…4.5, а друге - бути більше 3,5, але менше першого. Далі поступово зменшують напругу джерела. Коли воно впаде до 9 ... 10 В, різниця значень напруги на контактах 12 і 13 має стати нульовою, а потім поміняти знак.

Тепер можна встановити панель запрограмований мікроконтролер, підключити трансформатор і подати на нього мережну напругу. Через 1,5...2 с потрібно натиснути кнопку SB1. На індикатор лічильника буде виведена цифра 0. Якщо на індикатор нічого не виведено, перевірте ще раз значення напруги на входах AIN0.AIN1 мікроконтролера. Перше має бути більше за друге.

Коли лічильник успішно запущено, залишається перевірити правильність рахунку, по черзі затінюючи фототранзистори непрозорою для ІЧ променів пластиною. Для більшої контрастностііндикатори бажано закрити світлофільтром із червоного органічного скла.

Сьогодні ми спробуємо скористатися більше простим мікроконтролером ATtiny2313та підключити до нього символьний дисплей LCD, що містить два рядки по 16 символів.

Дисплей ми будемо підключати стандартним способом 4-бітним способом.

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

Відкриємо даташит контролера ATtiny2313і подивимося його розпинання

Ми бачимо, що даний контролеріснує у двох видах корпусів, але так як мені в руки він потрапив у корпусі DIP, то ми будемо розглядати саме цю версію корпусу, та й у принципі, вони й не відрізняються особливо, окрім ніж з вигляду, тому що кількість ніжок однакова - по 20.

Так як ніжок 20 в порівнянні з 28 ніжками контролера ATMega8, до яких ми вже протягом усього часу займаємося і займатимемося, то, відповідно, і можливостей також буде менше.

В принципі, все, що було у ATmega8, тут є, єдине те, що менше лапок портів. Але так як завдання перед нами варто спробувати з'єднати його по шині SPI з іншим контролером, то нас це пригнічує не сильно.

Є ще деякі відмінності, але вони незначні і ми з ними познайомимося за необхідності.

Зберемо ось таку схему (натисніть на картинку для збільшення зображення)

Дисплей підключений до ніжок порту D. PD1 і PD2 — до входів, що управляють, а решта до ніжок модуля дисплея D4-D7.

Проект створимо з ім'ям TINY2313_LCD, перенесемо в нього все, крім головного модуля з проекту з підключення дисплея до Atmega8.

Звісно, ​​деякі речі треба буде переробити. Для цього потрібно уважно вивчити, до якої ніжки підключено. Шина E дисплея підключена до PD2, а шина RS - до PD1, тому внесемо зміни до файлу lcd.h

#definee1PORTD|=0b0000 01 00 // встановлення лінії E в 1

#definee0PORTD&=0b1111 10 11 // встановлення лінії E в 0

#definers1PORTD|=0b00000 01 0 // встановлення лінії RS в 1 (дані)

#definers0PORTD&=0b11111 10 1 // Встановлення лінії RS в 0 (команда)

Як ми бачимо з виділення жирним шрифтом, не такі вже й кардинальні зміни у нас відбулися.

Наразі інформаційні входи. Тут у нас використовуються ніжки PD3-PD6, тобто на 1 пункт зсунуті в порівнянні з підключенням до Atmega8, тому виправимо ще й дещо у файлі lcd.cу функції sendhalfbyte

PORTD&=0b 1 0000 111; //праємо інформацію на входах DB4-DB7, інше не чіпаємо

Але це ще не все. Ми раніше передані дані зрушували на 4, а тепер нам у зв'язку з вищезгаданими змінами доведеться їх зрушувати тільки на 3. Тому в тій же функції виправимо ще й перший рядок

c<<=3 ;

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

У головному модулі ініціалізацію порту D ми не чіпаємо, нехай весь встає у стан виходу, як і в уроці 12.

Давайте спробуємо зібрати проект і подивитися спочатку результат у протеусі, тому що для нього я також зробив проект, який також буде знаходитись у доданому архіві з проектом для Atmel Studio

У нас все чудово працює! Ось як можна, виявляється швидко переробити проект одного контролера під інший.

Протеус - це дуже добре, але на справжні деталі подивитися завжди приємніше. Схема вся була зібрана на макетній платі, оскільки налагоджувальної плати для даного контролера я не робив і не збирав. Програматор ми підключимо через стандартний роз'єм ось такий

Ось уся схема

Тут все стандартно. Підтягуючий резистор RESET і т.д.

Тепер, перш ніж прошивати контролер в avrdude, нам необхідно вибрати контролер і рахувати його флеш-пам'ять

Потім зайти у вкладки FUSES і правильно встановити фьюзи. Так як у нас немає кварцового резонатора, ми встановлюємо фьюзи саме так




Top