КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Дослідження мікроконтролерного модуля аналого-цифрового перетворювача
Мета роботи: вивчити використання вбудованого в мікроконтролер модуля аналого-цифрового перетворювача для введення аналогових сигналів
ТЕОРЕТИЧНІ ВІДОМОСТІ У технічних системах керування досить часто потрібно реагувати на сигнали аналогових датчиків. Ядро ж мікроконтролера обробляє тільки дискретні сигнали. Для введення в них аналогових сигналів застосовують аналого-цифрові перетворювачі (АЦП), які перетворюють аналогову фізичну величину на цифровий код, що пропорційний цій величині і може оброблятись мікропроцесором. У багатьох сучасних мікроконтролерах АЦП вбудовують у кристал напівпровідника разом з іншими модулями. Це дозволяє зменшити кількість використовуваних АЦП зовнішніх виводів, прискорити його роботу. Щоб підключати сигнали декількох аналогових величин на тому ж кристалі мікроконтролера розміщують електронний комутатор, який дозволяє підключати до АЦП канали декількох аналогових сигналів. У лабораторній установці застосовується мікроконтролер PIC16F877 з восьмиканальним десятирозрядним АЦП порозрядного врівноваження. До каналу 0 (вивод RA0/AN0) на електронній платі підключено потенціометр, у якого сигнал можна змінювати в діапазоні (0...5 В).
Нижче подано довідкову інформацію про роботу модуля АЦП мікроконтролера PIC16F877. Для керування цим модулем використовується 4 регістри: o ADCON0, ADCON1 – регістри управління модулем; o ADRESH – регістр старшої частини результату АЦ перетворення; o ADRESL – регістр молодшої частини результату перетворення;
Призначення бітів регістра ADCON0: Ø біти 7, 6: ADCS1, ADCS0 – вибір джерела тактового сигналу АЦП 00 – fген./2; 01 – fген./8; 10 – fген./32; 11 – внутрішній генератор модуля АЦП; біти 5-3: CHS2-CHS0 – вибір аналогового каналу 000 – канал 0 (RA0/AN0), 001 – канал 1 (RA1/AN1), 010 – канал 2 (RA2/AN2), 011 – канал 3 (RA3/AN3), 100 – канал 4 (RA5/AN4), 101 – канал 5 (RE0/AN5), 110 – канал 6 (RE1/AN6), 111 – канал 7 (RE2/AN7); Ø біт 2: GO/DONE – пуск АЦ перетворення 1 – команда "почати АЦ перетворення або воно триває; 0 – АЦ перетворення завершено; Ø біт 1: не використовується; Ø біт 0: ADON – біт ввімкнення модуля АЦП 1 – модуль АЦП ввімкнуто, 0 – модуль АЦП вимкнуто, він не споживає енергії.
Призначення бітів регістра ADCON1: Ø біт 7: ADFM – формат результату АЦ перетворення 1– праве вирівнювання, 0 – ліве вирівнювання; Ø біти 6-4 не використовуються; Ø біти 3-0: PCFG3…PCFG0 – біти керування налагодженням каналів АЦП (табл. 8.1).
27.1 – Біти керування налагодженням каналів АЦП
Умовні позначення: А – аналоговий вхід, D – цифровий канал введення/виведення.
Процес аналого-цифрового перетворення починається в момент встановлення біта GO = 1 (при ADON = 1). Перетворення триває приблизно від 10 до 200 мкс (в залежності від обраної тактової частоти). Після його завершення результат можна отримати з пари регістрів ADRESH, ADRESL. У даній програмі використовується 8 з десяти розрядів результату перетворення, які беруться з регістра ADRESH (при лівому вирівнюванні) і у шістнадцятковій формі виводяться на цифровий індикатор. Лабораторне обладнання складається з демоплати, плати відладчика і комп'ютера.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ 1. Приєднати СОМ-порт комп'ютера до плати відладчика, відладчик до демоплати. Ввімкнути живлення демоплати (відладчик живиться від демоплати). 2. У середовищі MPLAB, створити у папці D:\1Work новий проект з іменем 27ГБ (Г – номер групи, Б – номер бригади), обравши у меню Project-New Project. 3. Натиснувши кнопку Change, у вікні Development Mode відкрити закладку Tools. Вибрати пункт MPLAB ICD Debugger (відладчик MPLAB) і тип процесора, що встановлений на демоплаті: Processor: PIC16F877. Натиснути кнопку ОК. 4. У вікні Edit Project додати новий файл на асемблері з іменем проекту та розширенням.asm (Add Node – додати вузол). Після повернення до вікна Edit Project нижче hex-файлу з'явиться ім'я асемблерного файлу. Натиснути кнопку ОК. У середовищі MPLAB IDE створити цей текстовий файл з розширенням.asm (File – New), записавши його у папку 1Work (File - Save As …). 5. При роботі з відладчиком з'явилось вікно MPLAB ICD. Треба встановити режими його роботи, натиснувши кнопку Options.... У вікні ICD Options слід обрати такі установки: В рамці Configuration Bits: b. Oscillator: XT (генератор: 2-10 МГц) c. Watchdog Timer: Off/Disable (сторожовий таймер відключити) d. Power Up Timer: On/Enable (таймер затримки після включення живлення ввімкнути) e. Brown out Detect: Off/Disable (скидання при зниженні напруги живлення виключити) f. Low Voltage Program: Disable (низьковольтне програмування заборонити) g. Code Protect Data EE: code protect Off (захист даних EEPROM відмінити) h. Flash Memory Write: Memory written to be EECON (запис у флеш-пам'ять через EECON) i. Code Protect: Code Protection Off (захист коду програми відмінити)
В рамці Program Options зняти відмітку для пункту ID Locations, інші – встановити. Закрити вікно ICD Options (´). У вікні MPLAB ICD мають бути обрані такі пункти: COM1, 19200, Minimum and Watch window, 2MHz-10MHz (вікно MPLAB ICD не закривати!). 6. Стандартним шляхом скопіювати текст програми з файлу D:\TEMP\ACP.asm в асемблерний файл вашого проекту. Переглянувши текст програми, дописати асемблерні фрагменти, вказані в коментарі.
;********************************************************* ;Лабораторна робота 27 ;Дослідження модуля АЦП мікроконтролера PIC16F877 ;*********************************************************
list p=16f877;директива визначення типу процесора #include <p16f877.inc>;включення файлу стандартних імен __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_ENABLE_OFF & _LVP_OFF & _DEBUG_ON & _CPD_OFF
CBLOCK 20H
T_C;тимчасове зберігання результату АЦ перетворення _N;змінна для завдання величини затримки LOOP3;змінні LOOP2; для LOOP1; підпрограм LOOP0; затримок LSD;молодший десятковий розряд значення температури MSD;старший десятковий розряд значення температури L7;7-сегментний код молодшої цифри M7;7-сегментний код старшої цифри
ENDC
;====================================== ; Основна програма ;====================================== org 0x000 nop;початок програми nop goto Start ;================= org 0x4 nop int: retfie ;================= Start: clrf PORTA;обнулити порт А bsf PORTA,2;зняти скидання регістрів зсуву clrf PORTC;Обнулити порт С,
bsf STATUS,RP0;банк регістрів 1 movlw b'11111011';RA2 - на виведення, movwf TRISA;інші біти порту А - на введення, ; в т.ч. RA0! movlw b'11010111';встановити RC5, RC3 на виведення, movwf TRISC;інші біти порту С - на введення bcf STATUS,RP0;банк регістрів 0
banksel PORTC clrf PORTC;очистити PORTC
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;встановлення режимів роботи модуля АЦП ????????????????;встановити тактову частоту ; Fosc/8, канал 0 ???????????;і ввімкнути модуль АЦП ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
banksel OPTION_REG movlw B'10000111';переддільник підключити до ; таймера TMR0, movwf OPTION_REG;і встановити коефіцієнт 1:256 movlw B'00001110';вирівнювання вліво, один ; аналоговий канал № 0, movwf ADCON1;опорні напруги: V+ = Uживл. = +5 В, ; V- = 0 banksel PORTC Main: btfss INTCON,T0IF;очікування переповнення ; таймера 0 goto Main bcf INTCON,T0IF;скидання ознаки переповнення ;таймера 0
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ????????????;\старт АЦ перетворення Wait:???????????;\очікування завершення перетворення ????????
????????????;запис результату АЦ перетворення ????????;в регістр T_C ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
call RASPAK;розпаковка байта на дві окремі тетради ;--------------------------------------------------------- MAIN_1: call HEX_7;перетворення НЕХ коду 2-х цифр у ; код 7-сегментних індикаторів disp: CALL DISPLAY;результат вимірювання – через ;регістри зсуву - на індикацію movlw 1;константа для паузи 0.25 секунди MOVWF LOOP3 MAIN_2: CALL DELAY_LONG;затримка на час (LOOP3)*0.25 с DECFSZ LOOP3, F GOTO MAIN_2 ;----------------------------------------------- GOTO Main;перехід до Main ;=============================================== ;п/п зсуву вмісту регістрів M7, L7 молодшими розрядами ; вперед у 2 регістри зсуву 74НС164 DISPLAY: bcf PORTA,2;скидання регістрів bsf PORTA,2;зсуву (для індикаторів) movlw d'16';лічильник в _N movwf _N NastBit: rrf M7,f;зсув вправо пари регістрів M7, L7 rrf L7,f bcf PORTC,5;якщо висунутий біт=0, встановити RC5=0 btfsc STATUS,C;якщо висунутий біт=1, - RC5=1, bsf PORTC,5; nop bsf PORTC,3; nop;тактовий імпульс bcf PORTC,3; decfsz _N,f;лічильник - 1, і пропустити, якщо він ; дорахував до нуля goto NastBit;зсув повторюється 16 разів return ;--------------------------------------- DELAY_LONG MOVLW.250;затримка 250 мс MOVWF LOOP1 DELAY_N_MS: OUTTER: MOVLW.102;затримка 1 мс MOVWF LOOP2 INNER: movlw d'2' movwf LOOP0 ININNER: DECFSZ LOOP0,F goto ININNER DECFSZ LOOP2, F GOTO INNER DECFSZ LOOP1, F GOTO OUTTER RETURN ;--------------------------------------- DELAY_10USEC:;затримка тривалістю (W)*10 мкс MOVWF LOOP1 DELAY_10USEC_0 movlw d'2' movwf LOOP0 DELAY_10USEC_1: DECFSZ LOOP0,F GOTO DELAY_10USEC_1 decfsz LOOP1,f goto DELAY_10USEC_0 return
;******************************************** ; Стандартні процедури роботи з дисплеєм ;******************************************** ;п/п розпаковки дворозрядного 16-кового числа RASPAK: MOVF T_C,w andlw h'f0' movwf MSD swapf MSD,f MOVF T_C,w andlw h'0f' MOVWF LSD retlw 0
;------------------------------------ ;п/п перетворення 2-х чотирибітних чисел з регістрів MSD, ; LSD ;у 7-сегментні коди двох цифр в регістрах M7, L7 HEX_7: movf MSD,W call tab7s;п/п перетворення цифри (W)=0..F у ;7-сегментний код в W movwf M7;7-сегм. код старшої цифри movf LSD,W call tab7s movwf L7;7-сегм. код молодшої цифри return ;------------------------------------ tab7s: addwf PCL,f;п/п перетворення шістнадцяткової ; цифри (W)=0..F у 7-сегментний код в W retlw b'11111100';0 retlw b'01100000';1 retlw b'11011010';2 retlw b'11110010';3 retlw b'01100110';4 retlw b'10110110';5 retlw b'10111110';6 retlw b'11100000';7 retlw b'11111110';8 retlw b'11110110';9 retlw b'11101110';A retlw b'00111110';b retlw b'10011100';C retlw b'01111010';d retlw b'10011110';E retlw b'10001110';F retlw b'00000000';код гасіння індикатора ;************************************************* END
7. Виконати компіляцію програми (Project – Make Project, або кнопка у вигляді зеленої лійки, або клавіша F9). На екрані з'являється вікно результатів компіляції (Build Results). 8. Якщо з'явилось повідомлення про помилки (error), ознайомившись з поясненням змісту помилки, слід натиснути мишею на цей рядок вікна Build Results. MPLAB зробить активним той рядок у тексті програми, де ймовірно зроблено помилку. Треба виправити її і далі так само й інші помилки. Потім повернутись до п. 8, 9, поки не буде видано повідомлення "Build completed successfully" (Компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням.hex. Може також з'явитись віконце нагадування про те, що після змін у програмі потрібно виконати програмування мікроконтролера за допомогою відладчика. 9. Слід закрити це вікно і вікно Build Results. Виконати програмування мікроконтролера, натиснувши у вікні MPLAB ICD кнопку Program. 10. Виконати пуск програми, натиснувши клавішу F9 або кнопку зеленого світлофора. 11. Підключити вольтметр до входу RA0/AN0 АЦП і загального виводу. Змінюючи викруткою положення змінного резистора R56, встановлювати за показами вольтметра значення напруг, обчислених за формулою: U(i) = 0,05*i*N, для і = 0, 1, 2,..., 10, де N – номер бригади. Для кожної встановленої напруги записати з цифрового індикатора результат АЦ перетворення у шістнадцятковій формі. Отримані значення занести в таблицю 8.1. Перевести шістнадцяткові коди у десяткові. Розрахувати значення аналогових напруг, відповідних цим кодам з формули лінійного перетворення: , (1) де U*(i) – аналогова напруга, відповідна коду; U+ та U– – позитивна і негативна опорні напруги (U+ = 5 В, U– = 0); С(і) – десятковий код з таблиці; С+, С– – коди, що відповідають позитивній і негативній опорним напругам (С+ = 255, С– = 0). Для зручності розрахунку треба перетворити (1) до вигляду U*(i) = f [С(і)]. Обчислити приведену похибку: . Результати занести в таблицю 27.1.
27.1. Результати вимірів і обчислень
ЗМІСТ ЗВІТУ Звіт має містити: назву та мету лабораторної роботи, скорочений порядок виконання лабораторної роботи, програму з коментарем, формули та таблицю розрахунків.
ДОВІДКА. Розташування регістрів спеціального призначення у банках пам’яті: Банк 0: PORTA, PORTC, ADRESH, ADCON0, PIR1. Банк 1: TRISA, TRISC, ADCON1, OPTION_REG. КОНТРОЛЬНІ ЗАПИТАННЯ 1. У чому принципова різниця між аналоговими та цифровими сигналами? 2. Чи може мікропроцесор обробляти аналогові сигнали? 3. Для чого призначений АЦП? 4. У яких режимах може працювати модуль АЦП мікроконтролера PIC16F877? 5. Як визначити математичну залежність між кодом, отриманим від АЦП і реальною фізичною величиною, на яку реагує датчик?
Лабораторна робота № 28
Дата добавления: 2015-06-25; Просмотров: 673; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |