- Необходими компоненти и хардуерна настройка
- Схема на веригата Nuvoton N76E003 за отчитане на аналогово напрежение
- Информация за GPIO и аналогови щифтове в N76E003
- Информация за ADC периферни устройства в N76E003
- Програмиране N76E003 за ADC
- Мигане на кода и изхода
Аналогово-цифровият преобразувател (ADC) е най-използваната хардуерна функция на микроконтролера. Той приема аналогово напрежение и го преобразува в цифрова стойност. Тъй като микроконтролерите са цифрови устройства и работят с двоичната цифра 1 и 0, той не може да обработва аналоговите данни директно. По този начин ADC се използва за приемане на аналогово напрежение и преобразуването му в еквивалентната му цифрова стойност, която микроконтролерът може да разбере. Ако искате повече за Analog to Digital Converter (ADC), можете да проверите статията, свързана.
Налични са различни сензори в електрониката, които осигуряват аналогов изход, като сензори за газ MQ, сензор за акселерометър ADXL335 и др. По този начин, използвайки аналогово-цифров преобразувател, тези сензори могат да бъдат свързани с микроконтролерен блок. Можете също така да разгледате други уроци, изброени по-долу, за използване на ADC с други микроконтролери.
- Как да използвам ADC в Arduino Uno?
- Връзка ADC0808 с 8051 микроконтролер
- Използване на модул ADC на микроконтролера PIC
- Raspberry Pi ADC Урок
- Как да използвам ADC в MSP430G2 - Измерване на аналогово напрежение
- Как да използвам ADC в STM32F103C8
В този урок ще използваме вградената ADC периферия на микроконтролера N76E003, така че нека да оценим какъв вид хардуерна настройка изискваме за това приложение.
Необходими компоненти и хардуерна настройка
За да използваме ADC на N76E003, ще използваме делител на напрежението с помощта на потенциометър и ще отчитаме напрежението, вариращо от 0V-5.0V. Напрежението ще се покаже на 16x2 символен LCD, ако сте нов с LCD и N76E003, можете да проверите как да свържете LCD с Nuvoton N76E003. По този начин основният компонент, който се изисква за този проект, е 16x2 символен LCD. За този проект ще използваме компонентите по-долу -
- Символен LCD 16x2
- 1k резистор
- 50k потенциометър или поставка за подстригване
- Малко жици на Берг
- Малко кабели за свързване
- Макет
Да не говорим, освен горепосочените компоненти, се нуждаем и от N76E003 базирана на микроконтролер платка за разработка, както и от Nu-Link Programmer. Необходим е и допълнителен 5V захранващ блок, тъй като LCD тече достатъчно ток, който програмистът не може да осигури.
Схема на веригата Nuvoton N76E003 за отчитане на аналогово напрежение
Както можем да видим в схемата, портът P0 се използва за свързаната с LCD връзка. Най-вляво е показана връзката на интерфейса за програмиране. Потенциометърът действа като делител на напрежението и това се отчита от аналоговия вход 0 (AN0).
Информация за GPIO и аналогови щифтове в N76E003
Изображението по-долу илюстрира GPIO щифтовете, налични на микроконтролера N76E003AT20. Въпреки това, от 20-те извода, за свързаната с LCD връзка се използва портът P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 и P0.7). Аналоговите щифтове са подчертани в ЧЕРВЕНИ цветове.
Както виждаме, портът P0 има максимални аналогови щифтове, но те се използват за свързана с LCD връзка. По този начин P3.0 и P1.7 са налични като аналогови входни щифтове AIN1 и AIN0. Тъй като този проект изисква само един аналогов щифт, за този проект се използва P1.7, който е аналогов входен канал 0.
Информация за ADC периферни устройства в N76E003
N76E003 осигурява 12-битов SAR ADC. Много добра характеристика на N76E003 е, че има много добра разделителна способност на ADC. ADC има 8-канални входове в единичен режим. Връзката с ADC е доста проста и ясна.
Първата стъпка е да изберете входа на ADC канала. Налични са 8-канални входове в микроконтролери N76E003. След като изберете ADC входовете или I / O щифтовете, всички щифтове трябва да бъдат зададени за посоката в кода. Всички щифтове, използвани за аналоговия вход, са входни щифтове на микроконтролера, поради което всички щифтове трябва да бъдат зададени като режим само с вход (висок импеданс). Те могат да бъдат зададени с помощта на регистъра PxM1 и PxM2. Тези два регистъра задават режимите на вход / изход, където x означава номер на порт (Например, порт P1.0 регистърът ще бъде P1M1 и P1M2, за P3.0 това ще бъде P3M1 и P3M2 и т.н.) Конфигурацията може да се види на изображението по-долу-
Конфигурирането на ADC се извършва от два регистра ADCCON0 и ADCCON1. Описанието на регистъра ADCCON0 е показано по-долу.
Първите 4 бита на регистъра от бит 0 до бит 3 се използват за задаване на избора на ADC канал. Тъй като използваме канала AIN0, изборът ще бъде 0000 за тези четири бита.
6-ти и 7-ми бит са важните. ADCS се изисква да зададе 1 за стартиране на преобразуването ADC и ADCF ще предостави информация за успешното преобразуване ADC. Трябва да бъде зададено 0 от фърмуера за стартиране на преобразуването ADC. Следващият регистър е ADCCON1-
Регистърът ADCCON1 се използва главно за преобразуване ADC, задействано от външни източници. Въпреки това, за нормални операции, свързани с анкетирането, първобитовият ADCEN се изисква да зададе 1 за включване на схемата ADC.
След това входът на ADC канала трябва да се контролира в регистъра AINDIDS, където цифровите входове могат да бъдат изключени.
N означава бита на канала (например, AIN0 каналът ще трябва да се контролира с помощта на първия бит P17DIDS на AINDIDS регистър). Цифровият вход трябва да бъде активиран, в противен случай той ще се чете като 0. Всичко това е основната настройка на ADC. Сега изчистването на ADCF и настройката на ADCS може да започне преобразуването на ADC. Преобразуваната стойност ще бъде достъпна в регистрите по-долу -
И
И двата регистра са 8-битови. Тъй като ADC предоставя 12-битови данни, ADCRH се използва като пълен (8-битов), а ADCRL се използва като половин (4-битов).
Програмиране N76E003 за ADC
Кодирането за конкретен модул всеки път е забързана работа, като по този начин се предоставя проста, но мощна LCD библиотека, която ще бъде много полезна за 16x2 символни LCD взаимодействия с N76E003. LCD библиотеката 16x2 е достъпна в нашето хранилище на Github, което можете да изтеглите от връзката по-долу.
Изтеглете 16x2 LCD библиотека за Nuvoton N76E003
Моля, разполагайте с библиотеката (чрез клониране или изтегляне) и просто включете файловете lcd.c и LCD.h във вашия проект Keil N76E003 за лесно интегриране на 16x2 LCD в желаното приложение или проект. Библиотеката ще предоставя следните полезни функции, свързани с дисплея -
- Инициализирайте LCD дисплея.
- Изпратете команда до LCD.
- Пишете на LCD.
- Поставете низ в LCD (16 символа).
- Печат на символ чрез изпращане на шестнадесетична стойност.
- Превъртете дълги съобщения с повече от 16 знака.
- Отпечатайте цели числа директно на LCD дисплея.
Кодирането на ADC е просто. Във функцията за настройка Enable_ADC_AIN0; се използва за настройка на ADC за вход AIN0 . Това е дефинирано във файла.
#define Enable_ADC_AIN0 ADCCON0 & = 0xF0; P17_Input_Mode; AINDIDS = 0x00; AINDIDS- = SET_BIT0; ADCCON1- = SET_BIT0 // P17
И така, горният ред задава щифта като вход и конфигурира регистъра ADCCON0, ADCCON1, както и регистъра AINDIDS също. Функцията по-долу ще чете ADC от регистрите ADCRH и ADCRL, но с 12-битова резолюция.
unsigned int ADC_read (void) { регистър unsigned int adc_value = 0x0000; clr_ADCF; set_ADCS; докато (ADCF == 0); adc_value = ADCRH; adc_value << = 4; adc_value - = ADCRL; връщане adc_value; }
Битът се премества наляво 4 пъти и след това се добавя към променливата на данните. В основната функция ADC чете данните и се отпечатва директно на дисплея. Напрежението обаче също се преобразува, като се използва отношение или отношението между напрежението, разделено на битовата стойност.
12-битов ADC ще осигури 4095 бита на 5.0V вход. По този начин се разделя 5.0V / 4095 = 0.0012210012210012V
И така, 1 цифра битови промени ще бъде равна на промените в 0,001V (приблизително). Това се прави в основната функция, показана по-долу.
void main (void) { int adc_data; настройвам(); lcd_com (0x01); докато (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("ADC данни:"); adc_data = ADC_read (); lcd_print_number (adc_data); напрежение = adc_data * bit_to_voltage_ratio; sprintf (str_voltage, "Volt:% 0.2fV", напрежение); lcd_com (0xC0); lcd_puts (str_voltage); Timer0_Delay1ms (500); } }
Данните се преобразуват от битова стойност в напрежение и с помощта на функция sprintf изходът се преобразува в низ и се изпраща на LCD.
Мигане на кода и изхода
Кодът връща 0 предупреждение и 0 грешки и е мигал, използвайки метода по мигане по подразбиране от Keil, можете да видите мигащото съобщение по-долу. Ако не сте запознати с Keil или Nuvoton, вижте как да започнете с микроконтролера Nuvoton, за да разберете основите и как да качите кода.
Възстановяването започна: Проект: таймер Възстановяване на целта „Цел 1“ сглобяване STARTUP.A51 … компилиране main.c… компилиране lcd.c… компилиране Delay.c… свързване… Размер на програмата: data = 101.3 xdata = 0 code = 4162 създаване на шестнадесетичен файл от ". \ Objects \ timer"… ". \ Objects \ timer" - 0 Грешка (и), 0 Предупреждение (и). Изминало време за изграждане: 00:00:02 Заредете "G: \\ n76E003 \\ Показване \\ Обекти \\ таймер" Изтриване на Flash готово . Flash Write Done: 4162 байта програмирани. Flash Verify Готово: 4162 байта са проверени. Flash Load приключи в 11:56:04
Изображението по-долу показва хардуера, свързан в източника на захранване с помощта на DC адаптер, а дисплеят показва изходното напрежение, зададено от потенциометъра вдясно.
Ако завъртим потенциометъра, напрежението, дадено на щифта ADC, също ще се промени и можем да забележим ADC стойността и аналоговото напрежение, показани на LCD. Можете да разгледате видеоклипа по-долу за пълната работна демонстрация на този урок.
Надявам се, че статията ви е харесала и сте научили нещо полезно, ако имате въпроси, оставете ги в раздела за коментари по-долу или можете да използвате нашите форуми, за да публикувате други технически въпроси.