Програмування Attiny2313. Програмування Attiny2313 Як написати програму для attiny2313

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 958)

8 бітний AVR мікроконтролер з 2 КБ програмованої в системі Flash пам'яті

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

  • AVR RISC архітектура
  • AVR - високоякісна і низькоспоживаюча RISC архітектура
    120 команд, більшість яких виконується за один тактовий цикл
    32 8 бітних робочих регістру загального застосування
    Повністю статична архітектура
  • ОЗП та енергонезалежна пам'ять програм та даних
    2 КБ самопрограмованої в системі Flash пам'яті програми, здатної витримати 10 000 циклів запису/прання
    128 Байт програмованої в системі EEPROM пам'яті даних, здатної витримати 100 000 циклів запису/прання
    128 Байт убудованої SRAM пам'яті (статична ОЗУ)
    Програмований захист від зчитування Flash пам'яті програми та EEPROM пам'яті даних
  • Характеристики периферії
    Один 8-розрядний таймер/лічильник з окремим ділником
    Один 16-розрядний таймер/лічильник з окремим передником, схемою порівняння, схемою захоплення та двома каналами ШІМ
    Вбудований аналоговий компаратор
    Програмований сторожовий таймер із вбудованим генератором
    USI – універсальний послідовний інтерфейс
    Повнодуплексний UART
  • Спеціальні характеристики мікроконтролера
    Вбудований відладчик debugWIRE
    Внутрішньосистемне програмування через SPI порт
    Зовнішні та внутрішні джерела переривання
    Режими зниженого споживання Idle, Power-down та Standby
    Удосконалена схема формування скидання при включенні
    Програмована схема виявлення короткочасних пропадань харчування
    Вбудований відкалібрований генератор
  • Порти введення - виведення та корпусне виконання
    18 програмованих ліній введення - виводу
    20 вивідний PDIP, 20 вивідний SOIC та 32 контактний MLF корпусу
  • Діапазон напруги живлення
    від 1.8 до 5.5 В
  • Робоча частота
    0 - 16 МГц
  • Споживання
    Активний режим:
    300 мкА при частоті 1 МГц та напрузі живлення 1.8 В
    20 мкА при частоті 32 кГц та напрузі живлення 1.8 В
    Режим зниженого споживання
    0.5 мкА при напрузі живлення 1.8 В

Блок-схема ATtiny2313:


Загальний опис:

ATtiny2313 - низькоспоживаючий 8-бітний КМОП мікроконтролер з AVR RISC архітектурою. Виконуючи команди за один цикл, ATtiny2313 досягає продуктивності 1 MIPS при частоті генератора 1 МГц, що задає, що дозволяє розробнику оптимізувати ставлення споживання до продуктивності.

AVR ядро ​​об'єднує багату систему команд та 32 робочих регістру загального призначення. Всі 32 регістри безпосередньо пов'язані з арифметико-логічним пристроєм (АЛП), що дозволяє отримати доступ до двох незалежних регістрів при виконанні однієї команди. В результаті ця архітектура дозволяє забезпечити в десятки разів більшу продуктивність, ніж стандартна CISC архітектура.

ATtiny2313 має наступні характеристики: 2 КБ програмованої в системі Flash пам'ять програми, 128 байт EEPROM пам'ять даних, 128 байт SRAM (статична ОЗУ), 18 ліній введення - виведення загального застосування, 32 робочих регістра загального призначення, однопровідний інтерфейс для вбудованого налагодження таймера/лічильника зі схемами порівняння, внутрішні та зовнішні джерела переривання, послідовний програмований USART, універсальний послідовний інтерфейс з детектором стартової умови, програмований сторожовий таймер із вбудованим генератором та три програмно ініціалізовані режими зниженого споживання. У режимі Idle зупиняється ядро, але ОЗУ, таймери/лічильники та система переривань продовжують працювати. У режимі Power-down регістри зберігають своє значення, але генератор зупиняється, блокуючи всі функції пристрою до наступного переривання або апаратного скидання. У Standby режимі генератор працює, в той час як решта приладу не діє. Це дозволяє швидко запустити мікропроцесор, зберігаючи при цьому в режимі бездіяльності потужність.

Прилад виготовлений за високощільною енергонезалежною технологією виготовлення пам'яті компанії Atmel. Вбудована ISP Flash дозволяє перепрограмувати пам'ять програми в системі через послідовний інтерфейс SPI або звичайним програматором енергонезалежної пам'яті. Об'єднавши в одному кристалі 8-бітне RISC ядро ​​з пам'яттю, що самопрограмується в системі Flash, ATtiny2313 став потужним мікроконтролером, який дає велику гнучкість розробника мікропроцесорних систем.

Мікроконтролер ATTiny2313 є відродженням у новій серії старого мікроконтролера AT90S2313, який свого часу вийшов досить вдалим. ATTiny2313 покращений варіант свого предка. Але він також успадкував досить скромну периферію. Так що, у плані функціональності ATTiny2313 скромний. Мікроконтролер випускається у двох варіантах – звичайному (ATTiny2313) та зі зниженим харчуванням (ATTiny2313) V). За знижене харчування доводиться платити пониженням тактової частотимікроконтролера (повільніша робота).

Загальні характеристики:

  • 120 інструкцій оптимізованих для програмування мовами високого рівня;
  • 32 регістру загального призначення (я тягнуся від цього);
  • майже кожна інструкція виконується за 1 такт генератора, за рахунок чого швидкодія досягає 20 MIPS (20 мільйонів операцій за секунду);
  • 2 кілобайти флеш-пам'яті для програм. Флеш-пам'ять може програмуватися безпосередньо з контролера (сама себе);
  • 128 байт EEPROM (енергонезалежна пам'ять);
  • 128 байт SRAM (оперативна пам'ять).

Що ми маємо на борту цього чіпа з периферії?

  • один 8-бітний таймер/лічильник;
  • один 16 бітний таймер/лічильник;
  • чотири ШІМ каналу;
  • аналоговий компаратор;
  • Watchdog таймер;
  • USI універсальний послідовний інтерфейс;
  • USART (це комп'ютерний COM RS232).

Особливі плюшки:

Живлення, частота:

1.8 - 5.5В (для ATTiny2313V) до 10МГц
2.7 - 5.5В (для ATTiny2313) до 20МГц
У робочому режимі споживає 230 мкА при живленні 1.8 В і частоті генератора, що задає 1МГц. У режимі енергозбереження Power-down їсть менше 1мкА при 1.8В

Програмування

ATTiny2313 примудрився пережити ще одну ревізію і обзавівся літерою Ав кінці. З нововведень слід зазначити:
— З'явилися зовнішні переривання на всіх ніжках.
— Прибрано поділ на звичайне та низьковольтне харчування. ATTiny2313А може харчуватися від 1.8 до 5.5В, при цьому лише необхідно дотримуватись обмежень за частотою від 4МГц (для 1.8В) до 20Мгц.
— Значно зменшено споживання струму, як у штатному режимі, так і в режимах енергозбереження – відповідно 190мкА та 0.1мкА.
Мало того, в результаті останньої ревізії - ATTiny2313 обзавівся старшим братом ATTiny4313 (без літери А). Старший брат аналогічний ATTiny2313А крім вдвічі збільшеної пам'яті (4 кбайт Flash, 256 байт EEPROM, 256 байт SRAM). Такі перетворення показують наміри Atmel продовжувати підтримувати цей мікроконтролер.

Внаслідок поганої доступності та незрозумілої ціни нових версій ATTiny2313А та ATTiny4313 мої пристрої будуть розроблятися на старому варіанті ATTiny2313. Але оскільки нові версії сумісні зі старими, теоретично прошивки повинні працювати і на нових мікроконтролерах.

Висновки:

Як і все мікроконтролери AVRсерії ATTiny2313 продуктивний та економічний. Має зручний для розведення плати та паяння корпус SOIC. Відстань між ніжками відносно велика (можна навіть примудритися кинути доріжку на платі між сусідніми ніжками). Простий у вивченні. Є багато літератури російською. Через велику популярність попередника AT90S2313 розроблено багато цікавих схем у мережі для повторення. Широко доступний у продажу. Недорогий. Для початку вивчення мікроконтролерів – саме те. Із недоліків варто відзначити досить скромну периферію на сьогоднішній день. І як зворотний бік гідності — корпус SOIC трохи завеликий (хоча це я вже чіпляюся). Невеликі обсяги пам'яті не дозволять створити на ATTiny2313 масштабні проекти. Загалом непоганий високопродуктивний контролер для невеликих проектів, що не потребують особливої ​​периферії. У своїх пристроях планую використовувати досить широко через найкращу доступність і дешевизну.

Сьогодні ми спробуємо скористатися більш простим мікроконтролером 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