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

Технічна характеристика та функціональні можливості навчально-налагоджуваного стенда. Будова контролера. Периферійні пристрої стенду. Принцип роботи крокового двигуна. Технології аналогових джойстиків. Організація взаємодії датчиків з мікроконтролером.

Рубрика Коммуникации, связь, цифровые приборы и радиоэлектроника
Вид курсовая работа
Язык украинский
Дата добавления 08.11.2017
Размер файла 954,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

ЗМІСТ

Технічне завдання

Вступ

1. Загальна технічна характеристика навчально-налагоджуваного стенда ST841/SPLD

1.1 Функціональні можливості стенду ST841/CPLD

1.2 Будова контролера

1.3 Периферійні пристрої стенду

2. Кроковий двигун

2.1 Принцип роботи крокового двигуна

2.2 Переваги і недоліки крокових двигунів

3. Джойстик-потенціометр

3.1 Типи джойстиків

3.2 Принцип роботи джойстик

4. Реалізація завдання

Додатки

ТЕХНІЧНЕ ЗАВДАННЯ

Розробити систему керування крокового двигуна з допомогою джойстика на навчально-налагоджувальному стенді ST841/CPLD.

ВСТУП

Однокристальні мікроконтролери знаходять широке застосування в різноманітних сферах техніки: від вимірювальних приладів, фотоапаратів та відеокамер, принтерів, сканерів, копіювальних апаратів до виробів електронних розваг і будь-якої домашньої техніки.

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

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

Мікроконтролери сконструйовані таким чином, що всі ці частини зібрані разом на одному кристалі і поміщені в одному корпусі.

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

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

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

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

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

1. ЗАГАЛЬНА ТЕХНІЧНА ХАРАКТЕРИСТИКА НАВЧАЛЬНО-НАЛАГОДЖУВАНОГО СТЕНДА ST841/SPLD

Рис.1.1 - Зовнішний вигляд стенда ST841/CPLD

Стенд призначений для освоєння архітектури та методів проектування інформаційно-керуючих систем, систем збору і оброблення інформації на базі найпоширеніших мікроконтролерів сімейства MCS-51/52, а також ПЛІС фірм Altera або Xilinx.

Стенд може бути використаний для:

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

· виконання курсових, дипломних та науково-дослідних робіт.

· розробки і відлагодження апаратно-орієнтованого програмного забезпечення;

· взаємодії із аналоговими та цифровими первинними перетворювачами та виконавчими органами;

1.1 Функціональні можливості стенду ST841/CPLD

· мікроконтролер ADuC841 (однотактове ядро, 62 кбайт флеш-пам'яті програм, 4 кбайт флеш-пам'яті даних, 2304 байт оперативної пам'яті, апаратна підтримака інтерфейсів ART, I2C, SPI, восьмиканальний 12-розрядний АЦП, 320кГц, два 12-розрядні цифро-аналогові перетворювачі, джерело опорної напруги, датчик температури);

· програмована логічна матриця CPLD: EPM3032, EPM3064 (Altera), або XCR3032XL, XCR3064XL (Xilinx);

· інвертуючий, неінвертуючий, диференційний та інструментальний підсилювачі;

Пристрої вводу:

· матрична клавіатура,

· дискретні кнопки,

· джойстик-потенціометр,

· механічний енкодер;

Пристрої відображення:

· лінійка світлодіодів,

· 4 семисигментні індикатори,

· 1 матричний індикатор,

· індикатор на рідких кристалах;

Звукова підсистема:

· звуковий pcm кодек (TLV320AIC1109),

· підсилювач звукової частоти TDA7052,

· динамік, мікрофонний вхід, вихід на телефони;

Шини даних:

· паралельна 8-бітна шина даних;

· SPI

· I2C

· RS232

· RS485

Цифрова периферія:

· годинник реального часу з I2C інтерфейсом DS1307;

· 8 кбіт флеш-пам'ять із I2C інтерфейсом,

· 8 Мбіт флеш-пам'ять із SPI інтерфейсом,

· генератор прямокутних імпульсів (NE555),

· генератор тактової частоти;

Виконавчі пристрої:

· драйвери крокових двигунів (8 ключів);

· драйвер двигуна типу ДБМ;

· ШІМ-регулятор.

1.2 Будова контролера

Як процесор використовується однокристальний мікроконтролер ADuC841 з такими характеристиками:

· Однотактне 20MIPS ядро архітектури 8052;

· Швидкісний 12-розрядний АЦП;

· Два 12-розрядні ЦАП;

· 62 кбайт вбудованої пам'яті програм;

· кбайти вбудованої пам'яті даних;

· UART, I2C, SPI інтерфейси;

· Програмування та можливість відладки через інтерфейс UART.

Для роботи із стендом необхідне знання архітектури контролера, його регістрів та периферії.

ADuC841 є функціонально завершеним контролером інтелектуальних датчиків і включає в себе високоякісний багатоканальний АЦП із самокалібруванням, два ЦАПи, і швидкий (20МГц) з однотактовим виконанням команд 8-ми розрядний програмований мікроконтролер з системою команд МК 8051 на однім кристалі.

Ядром МК є контролер 8052, що забезпечує пікову продуктивність до 20 MIPS. На кристалі розміщено 62Кбайт Flash пам'яті програм, 4Кбайт Flash пам'яті даних, 256 байт пам'яті з довільним доступом (RAM) і 2Кбайт розширеної пам'яті з довільним доступом (ХRAM).

В склад ADuC841 входять також додаткові аналогові пристрої: два 12-розрядні ЦАПи, монітор напруги живлення і джерелом опорної напруги. Додатковими цифровими пристроями є: два 16-розрядні У-Д ЦАПи, два 16-розрядні широтно-імпульсні модулятори, сторожовий таймер, лічильник часових інтервалів, три таймери-лічильники, і три порти послідовного вводу- виводу (SPI, I2C, і UART). Заводська прошивка контролера підтримує завантаження програмного забезпечення через послідовний порт UART, а також емуляцію через один контакт пристрою - ЕА.

навчальний стенд джойстик мікроконтролер

Рис.1.2 - Функціональна схема контролера ADuC841

1.3 Периферійні пристрої стенду

Програмована логічна інтегральна схема.

На платі стенду розміщена панелька для встановлення ПЛІС типу EPM3032ALC44, EPM3064ALC44 виробництва Altera а також сумісних з ними XCR3032XL, XCR3064XL виробництва XILINX. Для завантаження програмного забезпечення в ПЛІС та його відладки призначений роз'єм інтерфейсу JTAG. ПЛІС та МК можуть обмінюватись між собою даними по послідовних інтерфейсах UART, I2C, SPI або працювати незалежно.

Блок операційних підсилювачів для аналогових сигналів.

Блок призначений для підсилення вхідних сигналів, що подаються на входи АЦП МК ісигналів з виходів ЦАП.

Звуковий кодек.

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

Джойстик та механічний енкодер.

На платі установлений потенціометричний джойстик з двома осями і кнопкою. Сигнал з виходів джойстика подається на входи 6 та 7 АЦП МК. Механічний енкодер призначений для перетворення кутового переміщення в електричний сигнал. Дані пристрої позволяють проектувати системи з необхідністю ручного вводу інформації (наприклад, маніпулятори, прилади, спецтехніка, блоки керування і т.п.).

Цифрова клавіатура.

Матрична клавіатура застосовується при побудові вузлів вводу даних в інформаційну систему.

Кнопки переривань та скидання процесора.

Кнопки переривань призначені для генерації сигналів переривання процесора. Кнопка скидання призначена для скидання процесора під час програмування або для перезапуску існуючої програми.

Рідкокристалічний дисплей.

На платі установлений знакосинтезуючий рідкокристалічний 4х10 дисплей, підключений до шини даних по чотирибітній схемі. Дисплей має вбудовану підсвітку та регулятор контрасту.

Семисегментний чотиризначний та матричний індикатори, світлодіодна лінійка.

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

Інтерфейси стандартів RS232, RS485, I2C, SPI, 1-wire та системний інтерфейс.

На платі розміщено драйвери інтерфейсів RS232, RS485, які узгоджують логічні рівні даних стандартів та TTL рівень а також роз'єми для підключення кабелів чи шлейфів периферійних пристроїв. Системний інтерфейс включає шину даних, адресні лінії, лінії UART, I2C, живлення та загальний провід.

Годинник реального часу DS1307.

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

8 кбіт І2С EEPROM пам'ять.

Енергонезалежна пам'ять призначена для зберігання даних користувача навіть під час вимкнення живлення стенду.

Восьмиканальний драйвер крокових двигунів.

Драйвер дозволяє керувати двома уніполярними двигунами з чотирма обмотками невеликої потужності (із споживаним струмом до 2А).

Контрольні точки для підключення осцилографа.

Контрольні точки розміщені у важливих функціональних вузлах і дозволяють проводити візуальне спостереження форми сигналу за допомогою осцилографа.

Генератор імпульсів.

Генератор прямокутних імпульсів побудований на основі таймера 555 і може використовуватись для генерації контрольних імпульсів.

Стабілізатори живлення.

На платі встановлено стабілізатори напруг 5В, 3.3В, а також керований ШІМ стабілізатор живлення драйвера ДБМ. Передбачено роз'єм підключення напруг +12В та +5В від зовнішнього стабілізатора.

Размещено на http://www.allbest.ru/

Рис.1.3 - Структурна схема стенда ST841/CPLD

2. КРОКОВИЙ ДВИГУН

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

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

2.1 Принцип роботи крокового двигуна

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

Гібридні двигуни поєднують у собі найкращі риси двигунів зі змінним магнітним опором і двигунів з постійними магнітами. Статор гібридного двигуна також має зубці, забезпечуючи велику кількість еквівалентних полюсів, на відміну від основних полюсів, на яких розташовані обмотки. Зазвичай використовуються 4 основні полюси для 3,6 градусних двигунів і 8 основних полюсів для 1,8-0,9 градусних двигунів. Зубці ротора забезпечують менший опір магнітного ланцюга у певних положеннях ротора, що покращує статичний і динамічний момент. Це забезпечується відповідним розташуванням зубців, коли частина зубців ротора знаходиться строго навпроти зубців статора, а частина між ними.

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

Цикл роботи електродвигуна можна розбити на 4 кадри:

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

Рис.2.2 - верхній електромагніт (1) відключений, а правий електромагніт (2) знаходиться під напругою, потягнувши найближчі зуби прокрутивши ротор вправо. У результаті відбудеться повертання на 3,6°.

Рис.2.3 - нижній електромагніт (3) знаходиться під напругою, спричинивши наступне повертання ротора на 3,6° для цього прикладу.

Рис.2.4 - лівий електромагніт (4) включений, що знову проверне ротор на 3,6°. Коли верхній знову увімкнеться, ротор у кінцевому підсумку за 4 кроки повернеться на один зуб, а оскільки у ротора є 25 зубів, то повний оберт займе 100 кроків для даного прикладу.

2.2 Переваги і недоліки крокових двигунів

Переваги:

· Кут повороту двигуна пропорційний кількості вхідних імпульсів.

· Двигун працює з повним моментом у стані спокою (якщо обмотки підключені до живлення).

· Прецезійне позиціонування і повторюваність кроку -- хороші крокові двигуни мають точність близько 3 -- 5% кроку і ці помилки не накопичується від кроку до кроку.

· Можливість швидкого розгону, гальмування і зміни напряму руху.

· Безвідмовність -- у зв'язку з відсутністю щіток. Довговічність двигуна залежить тільки від довговічності підшипників.

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

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

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

Недоліки:

· Механічний резонанс з'являється при неправильному керуванні.

· Складнощі при роботі з дуже високими швидкостями.

· Можлива втрата контролю положення у зв'язку з роботою без зворотного зв'язку.

· Споживання електроенергії не зменшується навіть без навантаження.

· Невисока питома потужність.

· Відносно складна схема управління.

3. ДЖОЙСТИК-ПОТЕНЦІОМЕТР

Джойстик (англ. joystick) -- пристрій-рукоятка для керування, який можна відхиляти у двох площинах. На важелі можуть бути різного роду гашетки і перемикачі. Словом «джойстик» в побуті називають важіль управління.

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

Рис.3.1 - Джойстик - потенціометр

3.1 Типи джойстиків

За кількістю ступенів свободи і, відповідно, площин, у яких можлива зміна стану контрольованого об'єкта, джойстики поділяються на:

· одномірні (управління переміщенням об'єкта або вгору-вниз, або вліво-вправо)

· двомірні (управління об'єктом в двох площинах)

· тривимірні (управління об'єктом у всіх трьох площинах)

3.2 Принцип роботи джойстиків

За принципом аналізу положення ручки, джойстики можна розділити на наступні види:

· дискретні-- сенсори таких джойстиків можуть приймати два значення: «0» або «1», включений/виключений. Переміщення ручки в крайні положення видає один інформаційний код відповідного напрямку. Утримання ручки в крайньому положенні повторює код нескінченно. Джойстики такого типу практично не застосовуються в ПК, але широко зустрічаються у простих ігрових приставках, ігрових автоматах і мобільних телефонах.

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

Існує декілька технологій аналогових джойстиків:

· Потенціометр і аналогово-цифровий перетворювач. Переваги: немає особливих вимог до механіки. Недоліки: вимогливий до якості живлення і АЦП, сам датчик недовговічний. Цікаво, що в інтерфейсі типу ігровий порт використовувався аналогово-цифровий перетворювач персонального комп'ютера, а не джойстика.

· Енкодер -- оптичний датчик часто застосовуваний в маніпуляторах типу «миша» (зубчасте колесо, при обертанні, перериває промінь від світлодіода до фотодіоду). Переваги: точність, надійність. Недоліки: мала кількість кроків дискретності (приблизно 500 кроків на оборот керма, або 150 на рух джойстика від краю до краю, або 100 на хід педалі), для підвищення дискретності необхідне застосування високоточного енкодера або редуктора (мультиплікатора).

· Тензометричні датчики. Застосовуються у ноутбуках, у деяких літаках. В ігрових пристроях майже не поширені: тензодатчики практичні тільки коли джойстик надійно прикріплений до столу. Відоме застосування тензодатчиків в комплекті HOTAS X-65 CCS від компанії Saitek.

· Оптична матриця. Такі джойстики діють аналогічно оптичної миші і поєднують високу точність з високою надійністю. Недоліки аналогічні оптичному энкодеру.

· Магнітні датчики -- магниторезистивні та на ефекті Холу. Дуже надійні і довговічні, розповсюдження отримали після початку масового застосування схем компенсації похибок при збиранні і похибок виробництва.

4. РЕАЛІЗАЦІЯ ЗАВДАННЯ

Дане завдання було написано в середовищі програмування Keil uvision 4. В чотирьох асемблерних файлах:

· main.asm (див. Додаток А);

· Stepper.asm (див. Додаток Б);

· Joystick.asm (див. Додаток В);

· adc.asm (див. Додаток Г).

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

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

ДОДАТКИ

Додаток А

вміст файлу main.asm

EXTRN CODE (Joystick_Init)

EXTRN CODE (Joystick_GetAxisPos)

EXTRN CODE (Tim0_ovf)

EXTRN CODE (Stepper_Init)

EXTRN CODE (Stepper_Process)

EXTRN CODE (StepperCtrl)

PUBLIC Write

CSEG AT0

//Interrupt vector

ORG 0x0000

JMP RESET

ORG 0x000B

JMP Tim0_ovf

ORG 0x0033

RESET:

mov SP, #16

call Joystick_Init

call Stepper_Init

MainLoop:

mov A, #0

call Joystick_GetAxisPos

add A, #128

mov R1, A

mov B, #7

call Write

; if ((a<10)&&(a>-10))

CLR C

MOV A,R1

XRL A,#080H

SUBB A,#08AH

JNC Exit

SETB C

MOV A,R1

XRL A,#080H

SUBB A,#076H

JC Exit

; a =0;

MOV R1,#00H

Exit:

mov A, R1

call StepperCtrl

jmp MainLoop

// Write to periferal device subroutine

// Input:

// A - Data to Write

// B - Address to write

Write:

push ACC

setb P3.6 //Set Data bus buffer to TX

mov P0, A //moving data to bus buffer

mov P2, B //set periferals address

nop //wait

nop

mov P2, #0x00 //clock pulse for device latch

pop ACC

ret //exit from subroutine

Delay:

push 6

push 7

mov R6, #0

mov R7, #0

Delay1:

djnz R7,$

djnz R6,Delay1

pop 7

pop 6

ret

END

Додаток Б

вміст файлу Stepper.asm

C_TL0 EQU 000h

C_TH0 EQU 0F8h //07FFh - max stab. vel. of rotation

SM_addr EQU 009h //Step motoraddress

RotVal EQU 0x8

RotSpd EQU 0x9

RotState EQU 0xA ; 0 - Stopped; 1 - Rotate Left;

; 2 -Rotate Right

TmrOvfDiv EQU 0xB

Tmr0RVH EQU 0xC

Tmr0RVL EQU 0xD

PUBLIC Tim0_ovf

PUBLIC Stepper_Init

PUBLIC Stepper_Process

PUBLIC StepperCtrl

EXTRN CODE (Write)

Stepper SEGMENT CODE

RSEG Stepper

Timer0_init:

MOV TH0, Tmr0RVH

MOV TL0, Tmr0RVL

MOV TMOD,#001h

MOV TCON, #010h //Run timer

MOV IE, #010000010b //Enable global interrupt and

// Timer0 interrupt

MOV IP, #000000000b //interrupt priority

RET

Tim0_ovf:

push ACC

push 0

push 1

MOV TH0, Tmr0RVH //1,0XX ms

MOV TL0, Tmr0RVL //Reload timer 0

mov R1, TmrOvfDiv

dec R1

cjne R1, #0, T0Skip

call Stepper_Process

mov R1, #16

T0Skip:

mov TmrOvfDiv, R1

pop 1

pop 0

pop ACC

reti

Stepper_Init:

mov RotVal, #11h

mov RotSpd, #0h

mov RotState, #0h

mov TmrOvfDiv,#16

mov A, #0

mov B, #SM_addr

call Write

mov Tmr0RVH, #C_TH0

mov Tmr0RVL, #C_TL0

call Timer0_init

ret

Stepper_Process:

mov A, RotVal

mov R0,#RotState

SPL:

cjne @R0, #1,SPR

rl A

jmp SP_Do

SPR:

cjne @R0, #2,SPELSE

rr A

jmp SP_Do

SPELSE:

mov RotState, #0

mov a, #00h

mov B, #SM_addr

call Write

ret

SP_Do:

mov RotVal, A

mov B, #SM_addr

call Write

ret

; Stepper Control Function

; A - Rotation Speed (signed)

StepperCtrl:

mov RotSpd, A

jz SC_Stop

jb ACC.7, SC_1

mov RotState, #1

rl a

mov Tmr0RVH, a

jmp SC_Exit

SC_1:

mov RotState, #2

CPL A

INC A

rl a

mov Tmr0RVH, a

jmp SC_Exit

SC_Stop:

mov RotState, #0

SC_Exit:

ret

end

Додаток В

вміст файлу Joystick.asm

EXTRN CODE (ADC_Init)

EXTRN CODE (GetADCVal)

PUBLIC Joystick_GetAxisPos

PUBLIC Joystick_Init

Joystick SEGMENT CODE

RSEG Joystick

Joystick_Init:

call ADC_Init

ret

; Input:

; A - Axis number (0-1)

; Output:

; A (signed) - Position

Joystick_GetAxisPos:

push ACC

;Select ADC Channel

cjne A, #0, JGP1

mov A, #7

jmp JGP2

JGP1:

mov A, #6

JGP2:

; Invoke ADC Conversion

call GetADCVal

mov R1, A

mov R0, B

mov R7, #4

ADCShift:

clr C

mov A, R0

rlc A

mov R0, A

mov A, R1

rlc A

mov R1, A

djnz R7, ADCShift

pop ACC

;Select Channel and offset correction

cjne A, #0, JGP3

mov A, R1

add A, #0

mov R1, A

jmp JGP4

JGP3:

mov A, R1

add A, #0

mov R1, A

JGP4:

ret

END

Додаток Г

вміст файлу adc.asm

ADCCON1 DATA 0EFH ;ADC CONTROL

ADCCON2 DATA 0D8H ;ADC CONTROL

ADCDATAL DATA 0D9H ;ADC DATA LOW BYTE

ADCDATAH DATA 0DAH ;ADC DATA HIGH BYTE

ADCI BIT 0DFH ;ADCCON2.7 - ADC INTURRUPT

;FLAG

SCONV BIT 0DCH ;ADCCON2.4 - SINGLE

ADC SEGMENT CODE

RSEGADC

PUBLICADC_Init

PUBLIC GetADCVal

ADC_Init:

mov p1, 0xFF

mov ADCCON1, #0ACh

ret

; Input:

; A - Channel number (0-8)

; Output:

; A - ADCH

; B - ADCL

GetADCVal:

anl a, #0fh

mov ADCCON2, a

clr ADCI

setb SCONV

jnb ADCI,$

mov b, ADCDATAL

mov a, ADCDATAH

anl a, #0fh

ret

END

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.