Рефераты - Афоризмы - Словари
Русские, белорусские и английские сочинения
Русские и белорусские изложения
 

Автомат світлових ефектів на мікроконтролері AVR

Работа из раздела: «Коммуникации, связь, цифровые приборы и радиоэлектроника»

/

Зміст

1. Будова мікроконтролера ATMEGA8, огляд алгоритмів, схемних та програмних рішень поставленої задачі

1.1 Огляд схемних рішень світлової сигнальної індикації

1.2 Будова вибраного мікроконтролера

2. Розробка схем структурної, принципової та алгоритму роботи програми

3. Розробка програми на мові програмування ASSEMBLER

4. Розробка програми на мові програмування C

5. Моделювання в PROTEUS VSM

Висновки

Перелік посилань

Додатки

1. Будова мікроконтролера ATMEGA8, огляд алгоритмів, схемних та програмних рішень поставленої задачі

1.1 Огляд схемних рішень світлової сигнальної індикації

Застосування мікроконтролерів в автоматах світлових ефектів дозволяє значно збільшити їх функціональні можливості в порівнянні з аналогічними пристроями, виконаними на цифрових логічних мікросхемах.

Рисунок 1.1 - Мікропроцесорний пристрій автомата світлових ефектів

Кількість реалізованих різноманітних світлових ефектів обмежується лише фантазією розробника і об'ємом пам'яті мікроконтролера. Крім того, число і вид світлових ефектів можна змінювати для кожного конкретного випадку, підправляючи лише програмне забезпечення [3].

Принципова схема пристрою показана на рис. 1.1. Його основа - мікроконтролер DD1, тактову частоту якого задає кварцовий резонатор ZQ1 на частоту 10000 кГц. Мікроконтролер DD1 через регістр DD2 управляє ключами на транзисторах VT1 - VT8. Відкриваючись, ці транзистори подають напругу живлення на гірлянди світлодіодів. Усього таких гірлянд вісім, і в кожній з них по вісім світлодіодів - HL2 - HL9, HL10 - НL17 і т. д.

Транзистор VT1 подає живлення на гірлянду світлодіодів HL2 - HL9, VT2 - на гірлянду HL10 - HL17 і т. д. Управляє транзисторами регістр DD2. При високому рівні на виході, наприклад 1, з'єднаний з ним через струмообмежуючі резистор R11 транзистор VT1 закритий, при низькому рівні - відкритий.

Резистори R2- R9 обмежують струм через світлодіоди. Який з них в кожній з гірлянд горітиме залежить від рівнів на лініях порту Р 1.0 - Р 1.7 мікроконтролера DD1. При високому рівні всі з'єднані з цією лінією порту (через відповідні струмообмежуючі резистори) світлодіоди не горять, а при низькому горить світлодіод в тій гірлянді, на яку подано напругу живлення.

У пристрої застосована послідовна, так звана динамічна подача напруги на гірлянди Світлодіод HL1 сигналізує про наявність напруги живлення і режимах роботи пристрою, конденсатори С 2 - С 4 - блокувальні.

Після подачі напруги живлення на вхід RST (вивод 1) мікроконтролера DD1 через RC- ланцюг C1R16 надходить високий рівень, який формує сигнал початкової установки. При ініціалізації на всіх лініях порту Р 1 встановлюються високі логічні рівні, які записуються в регістр DD2. Тому на його виходах також високі рівні, транзистори VT1 - VT8 закриті.

У програмі мікроконтролера закладені дванадцять варіантів світлових ефектів, їх опису наведені в таблиці. Номер виконуваного світлового ефекту задають вимикачами SA1 - SA4. Розімкнуті контакти відповідають '1', а замкнуті - 'О'. Кнопками SB1 - SB5 встановлюють режими роботи пристрою.

При натисканні на кнопку SB1 'Старт / стоп ' включають або вимикають ефект, встановлений вимикачами. Кнопка SB2 ' Дозвіл ' дозволяє або забороняє виконання комбінації світлових ефектів. При натисканні на дану кнопку пристрій отримує дозвіл на виконання комбінації незалежно від положень вимикачів SA1 - SA4, при цьому мигає світлодіод HL1. Для запуску комбінації ефектів слід натиснути на кнопку SB1.

Принципова схема пристрою показана на малюнку. Його основа - мікроконтролер DD1, тактову частоту якого задає кварцовий резонатор ZQ1на частоту 10000 кГц. Мікроконтролер DD1 через регістр DD2 управляє ключами на транзисторах VT1 - VT8. Відкриваючись, ці транзистори подають напругу живлення на гірлянди світлодіодів. Усього таких гірлянд вісім, і в кожній з них по вісім світлодіодів - VD2 - VD9, VD10 - VD17 і т.д.

Транзистор VT1 подає живлення на гірлянду світлодіодів HL2 - HL9, VT2 - на гірлянду VD10 - VD17 і т. д. Управляє транзисторами регістр DD2. При високому рівні на виході, наприклад 1, з'єднаний з ним через струмообмежуючі резистор R11 транзистор VT1 закритий, при низькому рівні - відкритий.

Резистори R2- R9 обмежують струм через світлодіоди. Який з них в кожній з гірлянд горітиме залежить від рівнів на лініях порту Р 1.0 - Р 1.7 мікроконтролера DD1. При високому рівні всі з'єднані з цією лінією порту (через відповідні струмообмежуючі резистори) світлодіоди не горять, а при низькому горить світлодіод в тій гірлянді, на яку подано напругу живлення.

У пристрої застосована послідовна, так звана динамічна подача напруги на гірлянди Світлодіод HL1 сигналізує про наявність напруги живлення і режимах роботи пристрою, конденсатори С 2 - С 4 - блокувальні.

Після подачі напруги живлення на вхід RST (вивод 1) мікроконтролера DD1 через RC- ланцюг C1R16 надходить високий рівень, який формує сигнал початкової установки. При ініціалізації на всіх лініях порту Р 1 встановлюються високі логічні рівні, які записуються в регістр DD2. Тому на його виходах також високі рівні, транзистори VT1 - VT8 закриті, а всі гірлянди знеструмлені.

Рисунок 1.2 - Мікропроцесорний пристрій автомата світлових ефектів

Пристрій (рис. 1.2) виконано на основі мікроконтролера Atmega8L-8 [4]. У Flash-пам'яті мікроконтролера записані 30 світлових ефектів, які відтворюються послідовно. Перемикання програмного блоку світлового ефекту проводиться за допомогою двох кнопок. Натискання кнопки '+' викликає відтворення наступного в програмі світового ефекту, а кнопки '-' - попереднього. Для зручності порядковий номер кожного світлового ефекту відображається на двох 7-сегментних цифрових індикаторах.

Пристрій живиться від постійної напруги в діапазоні 10...15 В. Як джерело живлення можна використовувати стандартний мережевий адаптер з допустимим струмом навантаження 0,2...0,5 А, Конструктивною особливістю представленого перемикача світлових ефектів є використання елементів поверхневого монтажу, що дозволяє знизити масогабаритні показники пристрою.

Мікроконтролер Atmega8L - 8 (DD1) обраний для управління гірляндами з світлодіодів як найбільш доступний за ціною і простий у програмуванні (підтримує внутрісхемний програмування). Генерація світлових ефектів і опитування кнопок управління відбувається за програмою, розташованої в області Flash - пам'яті програм мікроконтролера.

Сама програма займає трохи більше 4 Кбайт. Внутрішній генератор програмно налаштований на частоту 4 МГц, Індикація номера програми здійснюється на двох 7 - сегментних індикаторах із загальним анодом типу CPD- 03011SR1 / A (HG1 і HG2). Керують індикаторами два включених послідовно зсувних регістра на мікросхемах 74НС 595 (DD2 і DD3).

Зсувні регістри DD2 і DD3 управляються що надходять на вхід S1N (вивод 14) кодом. Послідовне включення регістрів дозволяє відображати на світлодіодних індикаторах HG1 і HG2 десятки і одиниці, не вдаючись до динамічної індикації. Резистори R11... R16 піднімають потенціали на входах мікросхем DD2, DD3 для їх правильної роботи. DD2, DD3 - позитивні імпульси, як буферні інверторів використовуються елементи мікросхем DD4, DD5, PD6. Резистори R3... R24 обмежують струм через світлодіодні індикатори. Імпульси позитивної полярності надходять з висновків 23...26 DD1 на бази VT1...VT4, відкриваючи їх. Резистори R30...R33 не допускають перевищення струму в колах управління транзисторами. Кожен з транзисторів комутує відповідну гірлянду світлодіодів. Паралельно гірляндам включені сигнальні світлодіоди HL1...HL4, які индицируют їх стан. Резистори R26...R29 задають струми через світлодіоди. Для плавного запалювання і гасіння гірлянд використовується транзистор VT5 який управляється ШІМ- імпульсами, які надходять на його базу з порту РВ 1 (виведення 13) мікроконтролера. Змінюючи програмно тривалість імпульсів, можна керувати яскравістю гірлянд. Це відбувається тому, що підключення емітерів VT1... VT4 до загального проводу здійснюється через перехід емітер - колектор VT5. Міняючи тривалість комутуючого імпульсу, можна змінювати величину струму, що протікає через VT1...VT4.

У разі зміни програмного коду і при налагодженні нових світлових ефектів світлодіоди HL1...HL4 використовуються як сигнальні. При необхідності перепрограмування мікроконтролера Atmega8L - 8 можна здійснити внутрісхемний по лініях MiSO, MOSI, SCK.

Відразу після подачі живлення на мікроконтролер починає виконуватися програма. У перших рядках програми встановлюється конфігурація портів і оголошуються змінні. Потім задається конфігурація таймера і порту SPI, через який здійснюється управління світлодіодними індикаторами. Далі дозволяються переривання, і в каналі PWM встановлюється максимальна тривалість імпульсів. На початку основної програми створений цикл з нескінченним повторенням і виходом з циклу за умовою. При цьому жоден з світлодіодів HL1...HL4 не світиться.

Перше натискання кнопки SB1 (' +') викликає перехід до першого програмному модулю. У цьому модулі програмно реалізовано запалювання цифри '1' на світлодіодному індикаторі, включення світлодіода HL1 і відповідної (першої) гірлянди з світлодіодів, підключеної до гнізда ХТ 2.

Кожне натискання на кнопку SB1 викликає включення наступного світового ефекту і відображення збільшеного на одиницю номера програмного модуля, що відтворює світловий ефект. А натискання на кнопку SB2 ('-') викликає включення попереднього світового ефекту і відображення на світлодіодному індикаторі номера програмного модуля. Таким чином, за допомогою кнопок SB1 і SB2 можна встановлювати будь-який з запрограмованих світлових ефектів. Придушення брязкоту контактів кнопок реалізовано програмно. Це необхідно, щоб переривання не спрацювало двічі і не виник ефект ' перестрибування ' через шматок коду. Величина тимчасової затримки вибрана з урахуванням комфортності користування пристроєм і необхідного часу для придушення хаотичних імпульсів брязкоту.

До складу кожної гірлянди входять 18 світлодіодів, включених паралельно. Для гірлянд придатні вітчизняні світлодіоди АЛ 307КМ або АЛ 307БМ, а також імпортні L5013SRT в корпусі діаметром 5 мм. Кожну з гірлянд можна зібрати з світлодіодів одного або різного кольору світіння.

Світлодіоди можуть бути як звичайними, так і підвищеної яскравості, але в останньому випадку, можливо, доведеться підібрати опору резисторів R34...R37. Гірлянди можна скомпонувати у вигляді світлодіодних ламп. У цьому випадку світлодіоди кожної гірлянди зручно розташувати на круглій друкованій платі, креслення якої показаний на, а розташування елементів.

Всі резистори й неполярні конденсатори - для поверхневого монтажу типорозміру 1206 або 0805. Оксидні конденсатори - у корпусі для поверхневого монтажу, типу ' D'. Сигнальні світлодіоди - для навісного монтажу, будь-якого типу і кольору, в корпусі діаметром 3 мм, наприклад, L3014. Мікросхема DA1 (7805) - стабілізатор з вихідним напругою 5 В. Її монтаж виконують з боку провідників. Мікроконтролер Atmega8L - 8 - у корпусі TQFP, мікросхеми DD2...DD6 - в корпусах SOIC - 14, SOIC -16. Всі транзистори - у корпусі для поверхневого монтажу SOIC -23. В якості вимикача живлення встановлена малогабаритна двосекційна кнопка (з фіксацією) типу MPS700. Якщо зазначеної кнопки немає, просто замкніть перемичкою комутовані струмоведучі доріжки. При монтажі перемичок рекомендується липкою ізоляційною стрічкою заклеїти весь простір під перемичками, щоб не допустити коротких замикань припоєм, розпаяти перемички на позиціях і акуратно прибрати ізоляційну стрічку.

Запропонований автомат світлових ефектів зібраний на мікроконтролері і світлодіодах, які утворюють контур ялинки. У пристрої реалізовані вісім світлових ефектів [5].

Основа пристрою (рис. 1.3) - мікроконтролер DD1, він налаштований для роботи з вбудованим тактовим RC- генератором. Відповідно до керуючої програмою мікроконтролер формує сигнали на лініях порту GPO - GP2, GP5, які надходять на затвори транзисторів VT1 - VT4. При низькому рівні на цих лініях транзистори відкриті і живить напруга надходить на відповідні двоколірні світлодіоди HL1 - HL28, які розміщені на друкованій платі. Всі резистори (R1- R56) - струмообмежуючі, їх підбіркою можна змінювати яскравість світіння світлодіодів. Живлення мікроконтролера і світлодіодів стабілізовано інтегральним стабілізатором DA1.

Рисунок 1.3 - Мікропроцесорний пристрій автомата світлових ефектів

Рисунок 1.4 - Мікропроцесорний пристрій автомата світлових ефектів

У пристрої реалізовані вісім світлових ефектів, які змінюються в автоматичному режимі:

- Плавне запалювання і згасання всіх світлодіодів червоного кольору світіння;

- Плавне запалювання і згасання всіх світлодіодів зеленого кольору світіння;

- Почергове перемикання кольорів нижньої і верхньої частин ялинки;

- Спалахи світлодіодів червоного кольору світіння з плавним збільшенням частоти;

- Спалахи світлодіодів зеленого кольору світіння з плавним збільшенням частоти;

- Почергова зміна кольору світіння;

- Почергове запалювання нижньої і верхньої частин ялинки червоним кольором;

- Почергове запалювання нижньої і верхньої частин ялинки зеленим кольором.

Автомат, описаний у статті, крім своєї основної функції - включення- виключення чотирьох навантажень по числу ударів в долоні, може управляти будь-яким пристроєм світлових ефектів [6].

У більшості пристроїв світлових ефектів застосовують генератор, частота якого регулюється змінним резистором. Швидкість перемикання ламп або гірлянд при цьому не збігається з темпом музики, і доводиться вручну перенастроювати генератор під кожну мелодію. Запропонований акустичний автомат (рис.1.4) дозволяє перемикати гірлянди відповідно до темпом музики. За відсутності звуку лампи перемикаються з мінімальною частотою, яка встановлюється підбором резистора R11.

Чутливість автомата регулюється підлаштування резистором R8 так, щоб він реагував на музику, але не перемикав канали комутації навантажень.

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

З мікрофона ВМ 1 сигнал надходить на вхід підсилювача - обмежувача, виконаного на мікросхемі К 538УН 1А. Після посилення сигнал детектується діодами VD5, VD6 і надходить на базу транзистора VT1. У його колекторний ланцюг включений резисторний оптрон U1, який і керує генератор пристрої світлових ефектів. Із збільшенням гучності звуку відкривається транзистор VT1, вихідний опір оптрона зменшується, що призводить до підвищення швидкості перемикання гірлянд.

Транзистор Vt1 відкриваючись повністю, запускається мультивибратор на елементах DD3.3, DD3.4, який формує імпульс низького рівня тривалістю близько 0,1с (визначається опором резистора R3 і ємністю конденсатора C2).

По фронту цього імпульсу запускається другий мультивибратор на елементах DD3.1, DD3.2, який також формує імпульс низького рівня тривалістю приблизно 1.5с. Протягом цього часу (визначається опором резистора R1 і ємністю конденсатора C1) мікросхема DD1 вважає імпульси, відповідні числу ударів. Наприклад, їх було чотири. На виході 4 лічильника - дешифратора DD1, встановиться напруга високого рівня.

Після закінчення четирехсекундного імпульсу на керуючому вході мікросхеми DD2 (висновок 14) низький логічний рівень зміниться високим.

На виході четвертого (зверху за схемою) логічного елемента мікросхеми DD2 також встановиться напруга високого рівня. Воно надходить на вхід R лічильника - дешифратора DD1, обнуляючи його, і, одночасно, перемикає тригер DD5.2. Відкрився транзистор VT5 управляє електромагнітним реле К 4, яке своїми контактами (на схемі не показані) підключає відповідне навантаження. Світлодіод HL4 сигналізує про включення четвертого каналу автомата.

Диференціюються ланцюг C3R6 встановлює всі тригери в початковий стан при включенні живлення автомата.

Блок А 1 можна використовувати окремо тільки для управління пристроєм світлових ефектів. Якщо в цьому немає необхідності, замість оптрона U1 в колекторний ланцюг транзистора VT1 включають резистор опором 10 кОм.

Рисунок 1.5 - Мікропроцесорний пристрій автомата світлових ефектів

На схемі (рис. 1.5) перших трьох елементах 2І-НЕ мікросхеми DD1 зібраний тактовий генератор, частоту якого можна змінювати за допомогою резистора R1 [7]. Тактові імульси вважає лічильник DD2. Перемикачі SA1- SA4 дозволяють 'вимикати' з рахунку деякі розряди, що задає основну програму. Далі сигнал з лічильника йде на зсувний регістр DD3, виходи якого через силові ключі комутують навантаження. Вимикач SA5 дозволяє інвертувати малюнок, SA6 і SA7 задають автоматичну зміну напрямку і реверс.

В якості керуючих ключів використані тиристори КУ 202М, без радіатора вони можуть комутувати навантаження до 200Вт, що більш ніж достатньо для наших цілей. Якщо ж потрібно управляти чимось потужним типу ксенонових прожекторів, то можна встановити тиристори на радіатори, і тоді вони забезпечать потужність вже близько 2КВт.

Діодний міст VD5 - VD9 можна виключити, але тоді лампи працюватимуть вполнакала. Можна замість тиристорів поставити також сімістори, але я вважаю це надмірністю і обійшовся таки доданими мостом.

Для живлення електроніки потрібно стабілізовану напругу +5 В. Однак для впевненоuj відкривання тиристорів потрібно напруга трохи вище, близько 9 вольт. Використано звичайний накальний трансформатор. У цьому випадку напруга на згладжуючому конденсаторі приблизно 9 вольт, а для живлення мікросхем я встановив стабілізатор КР 142ЕН 5.

Рисунок 1.6 - Мікропроцесорний пристрій автомата світлових ефектів

Запропонований годинник (рис. 1.6) відрізняються від класичних стрілочних або з цифровою індикацією тим, що індикація часу здійснюється за допомогою світлодіодів (60 шт.), які встановлюють на підставці циферблата у формі кола чи овалу. ' Вартові ' світлодіоди відрізняються від 'хвилинних 'розміром (а при бажанні і кольором) [8]. Поточну годину відображається миготінням з частотою 1 Гц. Хвилини индицируются числом запалених поспіль світлодіодів, починаючи з початкової однохвилинного позначки. Кожна наступна хвилина додається пробігаючи проти годинникової стрілки. На останній, 59 хвилині всі запалені світлодіоди хвилин гаснуть за годинниковою стрілкою, починаючи з однохвилинного позначки і закінчуючи п'ятьдесят дев'ятий. Гасіння відбувається послідовно, кожну секунду вимикається один світлодіод. У зоні циферблата від чотирьох годин до восьми імітується рух маятника. Він являє собою біжить зліва направо і в зворотному напрямку вогонь з двох світлодіодів. Період коливань маятника становить, як і в механічних годинниках, одну секунду. Кожне крайнє положення маятника супроводжується звуковим сигналом, схожим на хід справжніх 'ходиків'.

Схема годин показана на рис. 1.6. Основа пристрою - мікроконтролер AT90S8535 (DD2). Критеріями при його виборі послужили наявність необхідного числа ліній введення / виводу і максимальний струм навантаження, що підключається до окремої лінії. Порти А і С використовуються для управління матрицею світлодіодів HL1 - HL60.

Оскільки в годинах встановлено велике число світлодіодів, для їх включення і виключення застосовано динамічне управління. Лінії порту А через транзистори VT1 - VT8 управляють включенням певного стовпця. Кожен стовпець включається на 2,4 мс, тому частота оновлення складає

1 / (2,4 * 10-3 * 8) = 52 Гц.

Світлодіоди, запалювані в кожен момент часу, визначаються комбінацією сигналів на виході порту С. Резистори R3 і R4 задають струм через 'годинникові ' світлодіоди (приблизно 20 мА), а резистори R5 - R10 - через ' хвилинні ' (приблизно 10 мА). Резистори R11 - R18 обмежують струм в ланцюгах баз транзисторів VT1 - VT8.

Функція відліку часу покладено на спеціалізовану мікросхему DS1307 фірми DALLAS SEMICONDUCTOR. Зв'язок між нею і мікроконтролером організована по інтерфейсу I2C. Резистори R1 і R2 ' підтягують ' шини SCL і SDA мікросхеми DD1 до лінії живлення.

Кнопка SB 1 призначена для коригування часу. При короткочасному натисканні на неї до поточного часу додається одна хвилина з одночасним скиданням секунд в нуль, при тривалому натисканні (більше однієї секунди) - з кожною секундою відбувається поповнення хвилин. Процес зміни встановлюваного часу відразу ж відображається на циферблаті. Акустичний сигнал ' ходиків ' формується за допомогою пьезоізлучателя НА 1. Через роз'єм ХР 1 пристрій підключають до програматора при програмуванні і подають напруга живлення +5 В при використанні годин. Конденсатори С 1 і С 2 служать для згладжування пульсацій напруги живлення, що виникають при роботі пристрою.

'Часовий' кварцовий резонатор ZQ1 є частотозадающіх при відліку часу. Від нього залежить точність ходу годинника. Літієва батарея GB1 - резервне джерело живлення. Її напруга (UБАТ) повинно знаходитися в межах 2,5... 3,5 В. При зменшенні основного напруги живлення нижче 1,25 * UБАТ запис інформації в мікросхему DD1 блокується. Таким чином, при відключенні годин від мережі виключається випадкове пошкодження інформації про поточний час. В описі DS1307 зазначено, що при ємності літієвої батареї 35 мА - год і більше термін підтримки роботи мікросхеми складає більше десяти років. Слід зазначити, що в описуваної конструкції використовується тільки інформація про секунди, хвилинах і годинах, в той час як DS1307 дозволяє відраховувати також число місяця, місяць, день тижня і рік з відстеженням високосних років.

Креслення друкованої плати показаний на рис. 3. Для її виготовлення застосований односторонньо фольгований склотекстоліт товщиною 1 мм.

Зовнішній вигляд змонтованої друкованої плати показаний на рис. 4. В авторському варіанті підставу циферблата виконано з ДВП. Лицьова сторона обклеєна декоративним матеріалом. По краю висвердлено отвори для світлодіодів. Діаметр отворів підбирають так, щоб світлодіоди можна було встановити в них з невеликим зусиллям. На тильній стороні циферблата епоксидним клеєм закріплені кронштейни для підвішування, три гвинти для кріплення плати і звуковипромінювач НА 1. З?єднання проводять проводами МГТФ 0,2 мм або іншими гнучкими монтажними в ізоляції. У пристрої застосовані резистори МЛТ, С 2 - 23, оксидний конденсатор К 50- 35 або імпортний, конденсатори С 2 - С 4 - К 10 -17. Транзистори КТ 315Б можна замінити на інші серій КТ 315, КТ 3102 з будь-яким буквеним індексом.

Кварцовий резонатор ZQ1 - РК - 206 або аналогічний, кварцовий резонатор ZQ2 - HC - 49U, НА 1 - ЗП- 1, ЗП- 3, кнопка SB1 - DTS- 32.

Світлодіоди КІПД 35В -К можна замінити іншими з серії КІПД 35, а КІПД 24В -К - якими з серії КІПД 24. Слід мати на увазі, що остання буква означає колір світіння (К - червоний, Л - зелений, Ж - жовтий), а передостання - яскравість.

Гучність звукового сигналу можна зменшити, встановивши послідовно з п?єзоівипромінюачем резистор опором 0,1... 20кОм. Режим маятника можна вимкнути, подавши на лінію порту РВ 4 (висновок 5 DD2) низький рівень, для чого цей висновок з'єднують із загальним проводом. Після складання пристрою і програмування мікроконтролера необхідно скоригувати час, на дисплеї на циферблаті, за сигналами точного часу.

Рисунок 1.7 - Мікропроцесорний пристрій автомата світлових ефектів

Автомат перемикає чотири гірлянди світлодіодів, які створюють один з шести можливих світлових ефектів. Схема пристрою наведена на рис 1.7 [9].

На елементах DD1.2 DD1.3 зібраний генератор тактових імпульсів. Частоту генератора, а отже, і швидкість обертання ' променів' регулюють змінним резистором R1. На триггерах мікросхем DD3, DD4 зібраний зсувний регістр. За допомогою вузла управління регістром, зібраного на елементах DD1.1, DD2.1 - DD2.3, і кнопки SB1 можна задавати одну з шести можливих послідовностей включення гірлянд. Вибір залежить від тривалості утримання кнопки в натиснутому стані.

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

Автомат світлових ефектів живлять від батареї напругою 9 В, наприклад, 'Крона', 'Корунд' або аналогічної імпортної. У ньому застосовані постійні резистори С2 - 23, змінний - СПЗ- 46М, оксидний конденсатор - імпортний або К 50 -35. Вказані на схемі мікросхеми можна замінити аналогами з серії К 176, світлодіоди - будь-якими.

Всі деталі пристрою, за винятком батареї живлення, розміщені на платі з односторонньо фольгиро - ванного склотекстоліти товщиною 1,5... 2 мм.

Входи невикористовуваних елементів мікросхем DD1, DD2 (виводи 12, 13) з'єднані з плюсовим виводом живлення, а невикористовувані настановні входи тригерів мікросхем DD3, DD4 - із загальним проводом. Зовнішній вигляд зібраного автомата показаний на рис. 3.

Для обмеження cnheve перезарядки конденсатора С 1, що протікає через захисні діоди елемента DD1.2, рекомендуємо між точкою з'єднання лівого за схемою виводу резистора R1 з мінусовим виводом конденсатора С 1 і входами елемента DD1.2 (виводами 1,2) включити резистор опором 10...30кОм.

1.2 Будова вибраного мікроконтролера

мікроконтролер світлодіодний алгоритм асемблер

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

Подібна архітектура забезпечує десятикратний виграш в ефективності коду в порівнянні із традиційними CІSC мікроконтролерами [9].

AT90S2313 пропонує наступні можливості:

· 2кб завантажуваної флеш пам'яті; 128 байт EEPROM;

· 15 ліній вводу/виводу загального призначення;

· 32 робочих регістри; налаштовувані таймери/лічильники з режимом співпадання;

· зовнішні й внутрішні переривання;

· програмований універсальний послідовний порт;

· програмований сторожовий таймер із вбудованим генератором;

· SPІ послідовний порт для завантаження програм;

· два програмно змінні режими низького енергоспоживання.

Холостий режим (Іdle Mode) відключає ЦПУ, залишаючи в робочому стані регістри, таймери/лічильники, SPІ порт і систему переривань.

Економічний режим (Power Down Mode) зберігає вміст регістрів, але відключає генератор, забороняючи функціонування всіх вбудованих пристроїв до зовнішнього переривання або апаратного скидання.

Мікросхеми виготовляються з використанням технології енергонезалежної пам'яті високої щільності фірми Atmel. Завантажувана флеш пам'ять на кристалі може бути перепрограмована прямо в системі через послідовний інтерфейс SPІ або доступним програматором енергонезалежної пам'яті. Поєднуючи в одному кристалі вдосконалений 8-бітовий RІSC процесор з, завантажуваною флеш пам'яттю, AT90S2313 є потужним мікроконтролером, який дозволяє створювати досить гнучкі й ефективні за вартістю обладнання.

AT90S2313 підтримується повною системою розробки, що включає в себе макроасемблер, програмний відладчик/симулятор, внутрішньосхемний емулятор і відладочний комплект.

Рисунок 1.8 - Опис виводів мікроконтролера AT90S2313

Умовні позначення на рисунку 1.8: VCC - вивід джерела живлення; GND - земля.

Port B (PB7..PB0) - порт B є 8-бітовим двонаправленим портом вводу/виводу. Для виводів порту передбачені внутрішні підтягуючі резистори (вибираються для кожного біта). Виводи PB0 і PB1 також є позитивним (AІN0) і негативним (AІN1) входами вбудованого аналогового компаратора. Вихідні буфери порту B можуть споживати струм до 20мА й безпосередньо управляти світлодіодними індикаторами. Якщо виводи PB0..PB7 використовуються як входи й ззовні встановлюються в низький стан, вони є джерелами струму, якщо включені внутрішні підтягуючі резистори. Крім того, порт B обслуговує деякі спеціальні функції.

Port D (PD6..PD0) - порт D є 7-бітовим двонаправленим портом із внутрішніми підтягуючими резисторами. Вихідні буфери порту D можуть споживати струм до 20мА. Якщо входи встановлені в низький стан, виводи порту D є джерелами струму, якщо задіяні підтягуючі резистори. Крім того, порт D обслуговує деякі спеціальні функції.

RESET - вхід скидання. При втриманні на вході низького рівня протягом двох машинних циклів (якщо генератор працює), здійснює скид.

XTAL1 - вхід інвертуючого підсилювача генератора й вхід зовнішнього тактового сигналу.

XTAL2 - Вихід інвертуючого підсилювача генератора.

XTAL1 і XTAL2 є входом і виходом інвертуючого підсилювача, який можна використовувати для генератора тактових імпульсів. Можна використовувати як кварцові, так і керамічні резонатори. При підключенні зовнішнього тактового сигналу вивод XTAL2 залишається непідключеним, а XTAL1 підключається до виходу зовнішнього генератора.

Рисунок 1.9 - Схема підключення кварцового генератора

Рисунок 1.10 - Схема підключення зовнішнього тактового сигналу

Регістровий файл швидкого доступу містить 32 8-розрядних регістри загального призначення, доступ до яких здійснюється за один машинний цикл. Тому за один машинний цикл виконується одна операція АЛП. Два операнда вибираються з реєстрового файлу, виконується операція, результат її записується в реєстровий файл - усе за один машинний цикл.

Шість із 32 регістрів можна використовувати як три 16-розрядних покажчика в адресному просторі даних, що дає можливість використовувати високоефективну адресну арифметику (16-розрядні регістри X, Y і Z). Один із трьох адресних покажчиків (регістр Z) можна використовувати для адресації таблиць у пам'яті програм. Це X-, Y- і Z- регістри.

АЛП підтримує арифметичні й логічні операції з регістрами, з константами й регістрами. Операції над окремими регістрами також виконуються в АЛП.

Крім регістрових операцій, для роботи з регістровим файлом можуть використовуватися доступні режими адресації, оскільки регістровий файл займає адреси $00-$1F в області даних, звертатися до яких можна як до комірок пам'яті.

Простір введення складається з 64 адрес для периферійних функцій процесора, таких як керуючі регістри, таймери/лічильники й інші. Доступ до простору вводу/виводу може здійснюватися безпосередньо, як до комірок пам'яті розташованим після реєстрового файлу ($20-$5F).

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

За допомогою команд відносних переходів і виклику підпрограм здійснюється доступ до всього адресного простору. Більша частина команд

AVR має розмір 16- розрядів, одне слово. Кожна адреса в пам'яті програм містить одну 16- або 32- розрядну команду.

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

Доступ до 128 байтів статичного ОЗУ, регістровому файлу й регістрам вводу/виводу здійснюється за допомогою п'яти доступних режимів адресації підтримуваних архітектурою AVR.

Гнучкий модуль переривань має власний керуючий регістр у просторі вводу/виводу, і прапор глобального дозволу переривань у регістрі стану.

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

Усі команди, що оперують регістрами прямо адресуються до кожного з регістрів за один машинний цикл. Єдине виключення - п'ять команд, що оперують із константами SBCІ, SUBІ, CPІ, ANDІ, ORІ й команда LDІ, що завантажує регістр константою. Ці команди працюють тільки із другою половиною реєстрового файлу - R16..R31. Команди SBC, SUB, CP, AND і OR, також як і всі інші, можуть бути застосовні до всього реєстрового файлу.

Кожному регістру присвоєна адреса в просторі даних, вони відображаються на перші 32 комірки ОЗУ. Хоча регістровий файл фізично розміщений поза ОЗУ, подібна організація пам'яті дає гнучкий доступ до регістрів. Регістри X, Y і Z можуть використовуватися для індексації будь-якого регістру.

Крім звичайних функцій, регістри R26..R31 мають додаткові функції, ці регістри можна використовувати як адресні покажчики в області пам'яті даних. Ці регістри позначаються як X,Y,Z.

При різних режимах адресації ці регістри можуть використовуватися як фіксована адреса, для адресації з автоінкрементом або з авто декрементом.

АЛП процесора безпосередньо підключений до 32 регістрів загального призначення. За один машинний цикл АЛП робить операції між регістрами реєстрового файлу. Команди АЛП розділені на три основні категорії - арифметичні, логічні й бітові. Деякі мікроконтролери сімейства AVR мають апаратний умножувач в арифметичній частині АЛП.

27 AT90S2313 містить 2кб, завантажуваної флеш пам'яті для зберігання програм. Оскільки всі команди займають одне 16- розрядне слово, флеш пам'ять організована як 1K 16- розрядних слів. Флеш пам'ять витримує не менш 1000 циклів перезапису.

Програмний лічильник має ширину 10 біт і в такий спосіб адресується до 1024 слів програмної флеш-памяти.

Таблиці констант можуть розташовуватися в діапазоні адрес 0-2K. AT90S2313 містить 128 байт енергонезалежної пам'яті, що електрично стирається (EEPROM). EEPROM організована як окрема область даних, кожний байт якої може бути прочитаний і перезаписаний. EEPROM витримує не менш 100000 циклів запису/стирання. Нижче розглянуте й програмування пам'яті даних через SPІ інтерфейс

Таблиця 1.1 - Характеристики мікроконтролера AT90S2313

Рабоча температура

-55оС … +125 оС

Температура зберігання

-65оС … +150 оС

Напруга на будь-якому виході окрім RESET

-1.0V … Vcc+0.5 В

Напруга на будь-якому виході RESET

-1.0V … 13 В

Максимальна рабоча напруга

6.6 В

Таблиця 1.2 - Характеристики мікроконтролера AT90S2313 по постійному струму

Продовження таблиці 1.2

Примітки по мікроконтролеру AT90S2313:

1. В рабочому стані струм через виводи повинен обмежуватися наступними умовами:

- Максимальний струм через вивод - 20 мА (5V), 10 мА (3V);

2. Мінімальна напруга для режима пониженного споживання - 2V.

Таблиця 1.3 - Список регістрів мікроконтролера AT90S2313

Продовження таблиці 1.3

2. Розробка схем структурної, принципової та алгоритму роботи програми

Для забезпечення алгоритму роботи мікропроцесорного пристрою сигналізації семисегментного індикатора була розроблена структурна схема (рисунок 2.1).

На рис 2.1 VD1-VD8 - лінійка світлодіонів для виведення режимів світлосигнальної індикації, SB1, SB2 - кнопки, як засоби керування вказаними режимами, МК - мікроконтролер, в якому задіяні два порти введення/виведення для взаємодії з засобами керування.

Рисунок 2.1 - Структурна схема мікропроцесорного пристрою керування лінійкою світлодіодів

Згідно структурної схеми було розроблена принципова схема мікропроцесорного керування лінійкою світлодіодів. (рисунок 2.2).

Рисунок 2.2 - Схема електрична принципова мікропроцесорного керування лінійкою світлодіодів

Умовні позначення на рисунку 2.2: SB1 - кнока 1; SB2 - кнока 2; R1-R8 - активні опори; VD0- VD7 - світлодіоди.

При подачі живлення всі діоди засвічуються і гаснуть з затримкою в 2 секунди. При натисканні кнопки 1 встановлюеться 2 режим роботи і діоди засвічуються в послідовності VD 0, VD 7, VD 1, VD 6, VD 2, VD 5, VD 3, VD 4. При натисканні кнопки 2 встановлюеться 3 режим роботи і діоди засвічуються в зворотній послідовності.

Алгоритм роботи пристрою виведення сигналізації на лінійку світлодіодів представлений на рис. 2.3.

Рисунок 2.3 Алгоритм роботи пристрою виведення сигналізації на лінійку світлодіод

3. Розробка програми на мові програмування ASSEMBLER

Згідно розробленого алгоритму, було розроблено програму мікропроцесорного пристрою світлової індикації, повний варіант якої представлений в додатку А.

Для розробки програми на мові Assembler скористаємося середовищем AVR Studio 4, так як програмувати будемо мікроконтролер серії AVR ATmega8. Для початку створимо проект, в якому напишемо програму. Для цього: запускаємо AVR Studio 4 > вибираємо New project (рис 3.1) > вибираємо Atmel AVR Assembler (рис 3.2) > записуємо у відповідних полях ім'я проекту та місце розташування > натискаємо кнопку 'Next' > вибираємо необхідний мікроконтролер та натискаємо кнопку 'Finish'(рис. 3.2)

Рисунок 3.1 - Створення проекту в AVR Studio

Рисунок 3.2 - Вибір типу проекту

Рисунок 3.3 - Вибір типу мікроконтролера

Після закінчення створення проекту з'явиться файл проекту (рис. 3.4),

в якому буде записана програма. Почнемо програму із запуску бібліотеки мікроконтролера та ініціалізації портів для кнопок(вводу) та світлодіодів(виводу). На порту D будуть кнопки, а на порту В світлодіоди.

Рисунок 3.4 - Файл тексту програми

Крім того на рис. 3.5 представлено емулятор периурії вибраного та вказаного при створення проекту мікроконтролера. Даний емулятор буже зручно використовувати при програмування та відладці роботи мікроконтролера.

Рисунок 3.2 - Вибір мікроконтролера для його програмування

За допомогою директиви '.include '…'' відкриваємо бібліотеку програмуємого мікроконтролера, команда 'ser' встановлює одиниці всіх бітів регістра, а команда 'clr' їх очищує [11-17]. Команда 'out' задає

значення регістра в вибраний регістр, в даній ситуації в регістри: PORT(дані порта); DDR(стан порта); PIN(стан виводів).

Через досить часте використання регістрів, присвоїмо їм назви для зручності. Нам необхідно буде 3 регістри: для виводу значень в порт В, для зміщення '1' в необхідний біт.

Підключення заголовного файлу з описом регістрів, констант тощо:

include 'm8mega.inc'

Приведений фрагмент програми відповідає за призначення імен регістрів.

def temp = r16

Фрагмент програми, який відповідає за ініціалізацію стека представлений нижче.

ldi r31,low(ramend) out spl,r31

Налаштування портів вводу виводу забезпечується наступним чином:

ldi temp, 0x00

out DDRD, temp ldi temp, 0xff out DDRB, temp out PortD, temp

Перед початком роботи всі світло діоди вмикаються та після затримки гаснуть. Це реалізується фрагментом програми, який представлений нижче.

ldi r16,0b11111111

out portb,r16

rcall fff

ldi r16,0b00000000

out portb,r16

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

kn1:

ldi r16,0b00000000

out portb,r16

in r17,pind

sbrc r17,0

Програма індикації 'режим 2 ' в послідовності вимкнення світлодіодів VD0, VD7, VD1, VD6, VD2, VD5, VD3, VD4.

ind1:

ldi r18,0b10000000

out portb,r18

rcall fff

ldi r18,0b00000001

out portb,r18

rcall fff

ldi r18,0b01000000

out portb,r18

rcall fff

ldi r18,0b00000010

out portb,r18

rcall fff

ldi r18,0b00100000

out portb,r18

rcall fff

ldi r18,0b00000100

out portb,r18

rcall fff

ldi r18,0b00010000

out portb,r18

rcall fff

ldi r18,0b0001000

out portb,r18

rcall fff

rjmp loop

Програма індикації 'режим 3' в послідовності вимкнення світлодіодів VD0, VD4, VD3, VD5, VD2, VD6, VD1, VD7, VD0.

ldi r18,0b0001000

out portb,r18

rcall fff

ldi r18, 0b00010000

out portb,r18

rcall fff

ldi r18, 0b00000100

out portb,r18

rcall fff

ldi r18, 0b00100000

out portb,r18

rcall fff

ldi r18, 0b00000010

out portb,r18

rcall fff

ldi r18, 0b01000000

out portb,r18

rcall fff

ldi r18, 0b00000001

out portb,r18

rcall fff

ldi r18, 0b10000000

out portb,r18

rcall fff

rjmp loop

Програма перевірки та перевірки, яка перевіряє стан кнопки 1 та 2, після якої можна обновити чи перейти на інший режим без закінчення циклу включення діодів

fff:

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

ldi r20, 50

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

ldi r21, 50

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

4. Розробка програми на мові програмування C

Для розробки програми на С використаємо IDE CodeVisionAVR.

CodeVisionAVR - інтегроване середовище розробки програмного забезпечення для мікроконтролерів сімейства Atmel AVR [18].

CodeVisionAVR включає в себе наступні компоненти:

· компілятор С - подібного мови для AVR;

· компілятор мови асемблер для AVR;

· генератор початкового коду програми, що дозволяє зробити ініціалізацію периферійних пристроїв;

· модуль взаємодії з отладочной платою STK - 500;

· модуль взаємодії з програматором;

· редактор вихідного коду з підсвічуванням синтаксису;

· термінал.

Вихідними файлами CodeVisionAVR є:

· HEX, BIN або ROM- файл для завантаження в мікроконтролер допомогою програматора;

· COFF - файл, що містить інформацію для відладчика;

· OBJ - файл, в якому зберігається проміжний код компіляції, так званий об'єктний код;

CodeVisionAVR є комерційним програмним забезпеченням. Існує безкоштовна ознайомча версія з обмеженням ряду можливостей, зокрема, розмір програмного коду обмежений 4-ма кілобайтами і не включений ряд бібліотек.

Компілятор С, що входить до складу CodeVisionAVR, має деякі відмінності від AVR- GCC (WinAVR), у тому числі власний синтаксис, набір підтримуваних серій мікроконтролерів (останні версії підтримують в тому числі серію ATXMega), а також генерує відрізняється за швидкодією вихідний код.

Згідно розробленого алгоритму, було розроблено на мові С програму мікропроцесорного пристрою світлової індикації, повний варіант якої представлений в додатку Б.

Рисунок 4.1 - Вид вікна під час створення проекту

Для розробки програми на мові С скористаємося середовищем

CodeVisionAVR. Для початку створимо проект, в якому напишемо програму: запускаємо CodeVisionAVR > на панелі 'меню' вибираємо вкладку 'File' > 'New' > ставимо галочку навпроти 'Project' > 'Ok' > 'Yes' > вибираємо вкладку 'Project information' > в полі 'Project name' записуємо назву свого проекту та копіюємо її, вибираємо вкладку 'File' > 'Save' > вставляємо назву, вибираємо папку створення та зберігання проекту > 'Ok' > знову вибираємо вкладку 'File' > вибираємо 'Generate, Save and Exit' > вставляємо скопійовану назву проекта в кожному вікні у відповідну стрічку та тиснемо 'Сохранить'(рис. 4.1).

Тепер можна написати саму програму, завдяки створеному шаблону це буде набагато простіше та швидше ніж в AVR Studio Assembler.

#include <90s2313.h> #include <delay.h>

Програма void vuvod забезпечує вивдененя буферної змінної на порт. void main(void)

Головний цикл: while (1)

{

Спочатку виконується режим 1

delay_ms(100);

PORTB=0b11111111;

delay_ms(100);

PORTB=0b00000000;

Цикл, який перевіряє чи нажата кнопка 1 і чи нажата кнопка 2, якщо так, то відбувається одна із програм в циклі, режим 2 чи режим 3

if (PIND.0==1)

if (PIND.1==1)

Цикл, який перевіряє чи не нажата кнопка 1. Якщо кнопка нажата, то тіло циклу не виконується.

while(PIND.0==0)

Цикл, який перевіряє чи не нажата кнопка 1. Якщо кнопка нажата, то тіло циклу не виконується.

while(PIND.1==0)

Режим 2, який виводиться на світлові діоди.

PORTB=0b01111111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111111

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2) goto label2;

PORTB=0b00011111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00001111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000011;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000001;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

Режим 3, який виводиться на світлові діоди.

PORTB=0b01111110;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111100;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00011000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00011000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111100;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b01111110;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b11111111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

Первірка кнопок і затримка реалізовуеться за допомогою

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

int zatr_perev_kn()

{

int count;

for(count=0; count<100; count++)

{

delay_ms(10);

if(PIND.0 == 1) return 1;

else if(PIND.1 == 1) return 2;

else return 0;

}

5. Моделювання в PROTEUS VSM

Для перевірки правильності роботи програми необхідно змоделювати принципову схему, і програма-емулятор Proteus VSM v.7.6 дуже добре підходить. В середовищі Proteus можна моделювати різні принципові схеми, навіть багато каскадні.

Пакет являє собою систему схемотехнічного моделювання, що базується на основі моделей електронних компонентів прийнятих в PSpice. Відмінною рисою пакета PROTEUS VSM є можливість моделювання роботи програмованих пристроїв: мікроконтролерів, мікропроцесорів, DSP і інш.

Бібліотека компонентів містить довідкові дані. Додатково в пакет PROTEUS VSM входить система проектування друкованих плат. Пакет Proteus складається з двох частин, двох підпрограм: ISIS - програма синтезу та моделювання безпосередньо електронних схем і ARES - програма розробки друкованих плат. Разом з програмою встановлюється набір демонстраційних проектів для ознайомлення.

Пакет є комерційним. Безкоштовна ознайомча версія характеризується повною функціональністю, але не має можливості збереження файлів.

Примітною особливістю є те, що в ARES можна побачити 3D -модель друкованої плати, що дозволяє розробнику оцінити свій пристрій ще на стадії розробки.

Перед моделюванням зберемо спрощену принципову схему роботи мікроконтролера. Для цього запустимо Proteus та виберемо необхідні для схеми елементи(рис. 5.1): зліва під 'картою' схеми на панелі натискаємо на кнопку 'Р' та в з'явившемуся вікні в області введення набираємо назви елементів на англійській мові й в області 'Results' вибираємо необхідний елемент двічі клацаючи на ньому.

Рисунок 5.1 - Вибір елементів в Proteus

Вибравши всі потрібні елементи закриваємо вікно 'Pick Devices' та складаємо нашу схему. Готова схема представлена на рис. 5.2.

Тепер для того, щоб схема працювала необхідно задати мікроконтролеру hex-файл написаної програми: викликаємо контекстне меню мікроконтролера та вибираємо 'Edit Properties' або клацаємо на мікроконтролер та натискаємо комбінацію клавіш 'Ctrl+E'; в з'явившемуся вікні вибираємо робочу частоту мікроконтролера(1МГц) та шлях до hex-файлу програми та натискаємо 'Ok'. Тепер запустимо модуляцію зібраної та запрограмованої схеми, для цього натиснемо на кнопку 'Play'

Далі запустимо програму і переконаємося у тому що вона працює. На рисунку 5.2 показано що при на тисканні кнопки 1 світлодіод засвітився. На рисунку 5.3 третій, отже все працює.

Рисунок 5.1 - Результат моделювання мікропроцесорного пристрою керування лінійкою світло діодів

Рисунок 5.2 - Результат моделювання мікропроцесорного пристрою керування лінійкою світло діодів

Висновки

В даній роботі було розглянуто теоретичні основи щодо будови мікроконтролера на прикладі ATmega8 та основні принципи по його програмуванню.

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

Задля порівняння було створено дві програми, які мали однакову структуру роботи, також наведеної як схеми, але написані в різних середовищах, таких як AVR Studio та CodeVision AVR. В результаті при проведені емуляції вони себе показали однаково. Але для виконання такої простої функції пристрою краще буде використати програму на мові

Assembler, оскільки компільований в машинний кодовий файл займає менший об'єм. Це пов'язано з тим, що є надлишковість скомпільованого кодового файла на мові С в машинний файл. Але код на мові С простіший для розуміння, та потребує менше часу для написання програм.

Перелік посилань

1. Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, програмы. - М.: Издательский дом 'Додэка ХХІ', 2004. - 288 с.: ил. (серия 'Мировая электроника') ISBN 5-94120-075-7

2. Мортон Дж. Микроконтроллеры AVR. Вводный курс / Дж. Мортон./Пер. С англ. - М.: Издательский дом 'Додэка-ХХІ', 2006.-272 с. - ISBN 5-94120-096-Х

3. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://www.radioelectronika.ru/?mod=cxemi&sub_mod =full_cxema&id=596 - Назва з екрану.

4. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://www.radioelectronika.ru/?mod=cxemi&sub_mod=full_ cxema &id= 632 - Назва з екрану.

5. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://pic.rkniga.ru/shemotehnika/svetovye-effekty/188-novogodnyaya-elochka-na-mikrokontrollere-pic12f675.htm - Назва з екрану.

6. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://guarda.ru/guarda/data/automation_system/txt_46.php -Назва з екрану.

7. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://decada.org.ru/project/electronic/avtomat_svet_eff/ - Назва екрану.

8. Автомат световых эффектов [Електронний ресурс]: Web-сайт. - Режим доступу: http://radioelectronika.ru/?mod=cxemi&sub_mod=full_ cxema&id=537 - Назва з екрану.

9. Автомат световых эффектов [Електронний ресурс]: Web-сайт. -Режим доступу: http://cxema.my1.ru/publ/konstrukcii_dlja_doma_i_dachi/ konstrukcii_dlja_doma/avtomat_perekljuchatel_girljand/35-1-0-2961 - Назва з екрану.

10. Евстифеев А.В. Микроконтроллеры AVR семейства Mega. Руководство пользователя / А.В. Евстифеев - М.: Издательский дом 'Додэка-XXI', 2007. - 592 с: ил. (Серия 'Программируемые системы'). ISBN 978-5-94120-090-0 mm

11. Гребнев В.В. Микроконтроллеры семейства AVR фипмы Atmel / В.В. Гребнев - М.: ИП Радиософт, 2002 - 176 с.: ил. ISBN 5-93037-091-5

12. Ревич Ю.В. 'Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера' - Видання 'БХВ-Петербург' 2011 р. - мова російська - 354 ст.

13. Рудольф Марек 'Ассемблер на примерах' (Ucime se Programovat v Iazyce Assembler pro PC) - Видання 'Наука и техника' 2005 р. - російська - 240 ст.

14. Александр Крупник 'Ассемблер. Самоучитель' - Видання 'Питер' 2005 р. - мова російська - 240 ст.

15. Зубков С.В. 'Assembler. Язык неограниченных возможностей' - Видання 'ДМК' 1999 р. - мова російська - 640 ст

16. Шпак Ю.А. 'Программирование на языке С для AVR и PIC микроконтроллеров. 1-е издание' - Видання 'МК-Пресс' 2006 р. - мова російська - 487 ст.

17. Шпак Ю.А. 'Программирование на языке С для AVR и PIC микроконтроллеров. 2-е издание' - Видання 'Корона-Век, МК-Пресс' 2011 р. - мова російська - 544 ст.

18. Лебедев М.Б. CodeVision AVR. Пособие для начинающих / М.Б. Лебедев - М.: Додэка XXI, 2010 - 450с. ISBN 978-5-94120-248-5

Додаток А. Програма на мові Assembler

.include 'm8def.inc'

ldi r16,0b11111111

out ddrb,r16

ldi r16,0b00000000

out ddrd,r16

ldi r16,low(RAMEND)

out spl,r16

ldi r16,high(RAMEND)

out sph,r16

ldi r16,0b11111111

out portb,r16

rcall fff

ldi r16,0b00000000

out portb,r16

loop:

ldi r16,0b00000000

out portb,r16

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

rjmp loop

kn1:

ldi r18,0b11111111

out portb,r18

rcall fff

ldi r18,0b11111110

out portb,r18

rcall fff

ldi r18,0b11111100

out portb,r18

rcall fff

ldi r18,0b11111000

out portb,r18

rcall fff

ldi r18,0b11110000

out portb,r18

rcall fff

ldi r18,0b11100000

out portb,r18

rcall fff

ldi r18,0b11000000

out portb,r18

rcall fff

ldi r18,0b10000000

out portb,r18

rcall fff

ldi r18,0b00000000

out portb,r18

rcall fff

rjmp loop

kn2:

ldi r18,0b11111111

out portb,r18

rcall fff

ldi r18,0b01111110

out portb,r18

rcall fff

ldi r18,0b00111100

out portb,r18

rcall fff

ldi r18,0b00011000

out portb,r18

rcall fff

ldi r18,0b00000000

out portb,r18

rcall fff

ldi r18,0b00011000

out portb,r18

rcall fff

ldi r18,0b00111100

out portb,r18

rcall fff

ldi r18,0b01111110

out portb,r18

rcall fff

ldi r18,0b11111111

out portb,r18

rcall fff

rjmp loop

fff:

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

ldi r20, 50

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

ldi r21, 50

in r17,pind

sbrc r17,0

rjmp kn1

in r17,pind

sbrc r17,1

rjmp kn2

ret

Додаток Б. Програма на мові С

/*****************************************************

This program was produced by the

CodeWizardAVR V2.04.8b Evaluation

Automatic Program Generator

© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com

Chip type : AT90S2313

AVR Core Clock frequency: 4,000000 MHz

Memory model : Tiny

External RAM size : 0

Data Stack size : 32

*****************************************************/

#include <mega8.h>

#include <delay.h>

void main(void)

{

// Input/Output Ports initialization

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0xFF;

DDRB=0x00;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out

// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0

PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization

// Clock source: System Clock

// Clock value: Timer 0 Stopped

TCCR0=0x00;

TCNT0=0x00;

// Timer/Counter 1 initialization

// Clock source: System Clock

// Clock value: Timer1 Stopped

// Mode: Normal top=0xFFFF

// OC1A output: Discon.

// OC1B output: Discon.

// Noise Canceler: Off

// Input Capture on Falling Edge

// Timer1 Overflow Interrupt: Off

// Input Capture Interrupt: Off

// Compare A Match Interrupt: Off

// Compare B Match Interrupt: Off

TCCR1A=0x00;

TCCR1B=0x00;

TCNT1H=0x00;

TCNT1L=0x00;

ICR1H=0x00;

ICR1L=0x00;

OCR1AH=0x00;

OCR1AL=0x00;

OCR1BH=0x00;

OCR1BL=0x00;

// Timer/Counter 2 initialization

// Clock source: System Clock

// Clock value: Timer2 Stopped

// Mode: Normal top=0xFF

// OC2 output: Disconnected

ASSR=0x00;

TCCR2=0x00;

TCNT2=0x00;

OCR2=0x00;

// External Interrupt(s) initialization

// INT0: Off

// INT1: Off

MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization

TIMSK=0x00;

// USART initialization

// USART disabled

UCSRB=0x00;

// Analog Comparator initialization

// Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off

ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC disabled

ADCSRA=0x00;

// SPI initialization

// SPI disabled

SPCR=0x00;

// TWI initialization

// TWI disabled

TWCR=0x00;

while(1)

{

if(PIND.0==1)

{while (1)

{

label1:

PORTB=0b01111111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2) goto label2;

PORTB=0b00011111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00001111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000011;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000001;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

}

}

if(PIND.1==1)

{while (1)

{

label2:

PORTB=0b01111110;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111100;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00011000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00000000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00011000;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b00111100;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b01111110;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

PORTB=0b11111111;

if (zatr_perev_kn() == 1)goto label1;

else if (zatr_perev_kn() == 2)goto label2;

}

ref.by 2006—2019
contextus@mail.ru