- Необхідні компоненти та налаштування обладнання
- Принципова схема Nuvoton N76E003 для зчитування аналогової напруги
- Інформація про GPIO та аналогові штифти в N76E003
- Інформація про периферійний АЦП в N76E003
- Програмування N76E003 для АЦП
- Прошивання коду та виводу
Аналого-цифровий перетворювач (АЦП) є найбільш часто використовуваною апаратною функцією мікроконтролера. Він приймає аналогову напругу і перетворює її в цифрове значення. Оскільки мікроконтролери є цифровими пристроями і працюють з двійковою цифрою 1 і 0, він не може безпосередньо обробляти аналогові дані. Таким чином, АЦП використовується для прийому аналогової напруги та перетворення її в еквівалентне цифрове значення, яке мікроконтролер може зрозуміти. Якщо вам потрібна додаткова інформація про аналого-цифровий перетворювач (АЦП), ви можете перевірити посилання на статтю.
У електроніці є різні датчики, які забезпечують аналоговий вихід, наприклад, газові датчики MQ, датчик акселерометра ADXL335 тощо. Таким чином, використовуючи аналого-цифровий перетворювач, ці датчики можуть бути з'єднані з блоком мікроконтролера. Ви також можете переглянути інші підручники, перелічені нижче, щодо використання АЦП з іншими мікроконтролерами.
- Як використовувати АЦП в Arduino Uno?
- Зв'язок ADC0808 з мікроконтролером 8051
- Використання модуля АЦП мікроконтролера PIC
- Підручник з ADC Raspberry Pi
- Як використовувати АЦП в MSP430G2 - Вимірювання аналогової напруги
- Як користуватися АЦП в STM32F103C8
У цьому підручнику ми використовуватимемо вбудовану периферійну АЦП мікроконтролера N76E003, тож давайте оцінимо, яку апаратну установку ми потребуємо для цієї програми.
Необхідні компоненти та налаштування обладнання
Для використання АЦП на N76E003 ми використаємо дільник напруги за допомогою потенціометра і зчитуємо напругу в діапазоні від 0 до 5,0 В. Напруга відображатиметься на РК-дисплеї 16х2 символів. Якщо ви не користуєтесь РК-дисплеєм та N76E003, ви можете перевірити, як взаємодіяти РК-дисплей із Nuvoton N76E003. Отже, основним компонентом, який необхідний для цього проекту, є РК-дисплей із символами 16x2. Для цього проекту ми будемо використовувати наступні компоненти:
- РК-дисплей із символами 16x2
- 1k резистор
- Потенціометр 50м або обрізний горщик
- Мало проводів Берга
- Кілька дротів підключення
- Макет
Не кажучи вже про те, що, крім вищезазначених компонентів, нам потрібна плата розробки на основі мікроконтролера N76E003, а також програміст Nu-Link. Також необхідний додатковий блок живлення на 5 В, оскільки РК-дисплей витрачає достатній струм, який програміст не міг забезпечити.
Принципова схема Nuvoton N76E003 для зчитування аналогової напруги
Як ми бачимо на схемі, порт P0 використовується для з'єднання, пов'язаного з РК. У крайньому лівому куті показано підключення інтерфейсу програмування. Потенціометр виконує функцію дільника напруги, який визначається аналоговим входом 0 (AN0).
Інформація про GPIO та аналогові штифти в N76E003
Наведене нижче зображення ілюструє штифти GPIO, доступні на блоці мікроконтролера N76E003AT20. Однак із 20 контактів для підключення, пов'язаного з РК-дисплеєм, використовується порт P0 (P0.0, P0.1, P0.2, P0.4, P0.5, P0.6 і P0.7). Аналогові штифти виділені ЧЕРВОНИМИ кольорами.
Як ми бачимо, порт P0 має максимум аналогових контактів, але вони використовуються для зв'язку, пов'язаної з РК-дисплеєм. Таким чином, P3.0 і P1.7 доступні як аналогові вхідні штифти AIN1 і AIN0. Оскільки для цього проекту потрібен лише один аналоговий штифт, для цього проекту використовується P1.7, який є аналоговим вхідним каналом 0.
Інформація про периферійний АЦП в N76E003
N76E003 забезпечує 12-розрядний АЦП SAR. Це дуже хороша особливість N76E003, що він має дуже хорошу роздільну здатність АЦП. АЦП має 8-канальні входи в єдиному режимі. Зв'язок АЦП досить простий і зрозумілий.
Першим кроком є вибір вхідного каналу АЦП. У мікроконтролерах N76E003 доступні 8-канальні входи. Після вибору входів АЦП або штифтів вводу-виводу всі штифти потрібно встановити для напрямку в коді. Всі висновки, що використовуються для аналогового входу, є вхідними висновками мікроконтролера, тому всі висновки потрібно встановити як режим лише вхідного сигналу (з високим імпедансом). Їх можна встановити за допомогою реєстру PxM1 та PxM2. Ці два регістри встановлюють режими вводу-виводу, де x означає номер порту (Наприклад, порт P1.0 реєстром буде P1M1 та P1M2, для P3.0 це буде P3M1 та P3M2 тощо). видно на малюнку нижче -
Конфігурація АЦП виконується двома регістрами ADCCON0 і ADCCON1. Опис реєстру ADCCON0 наведено нижче.
Перші 4 біти регістру від біта 0 до біта 3 використовуються для встановлення вибору каналу АЦП. Оскільки ми використовуємо канал AIN0, для цих чотирьох бітів вибір буде 0000.
6-й та 7-й біти - важливі. ADCS потрібно встановити 1 для початку перетворення ADC, і ADCF надаватиме інформацію про успішне перетворення ADC. Для запуску перетворення АЦП потрібно встановити 0 прошивкою. Наступний реєстр - ADCCON1-
Регістр ADCCON1 в основному використовується для перетворення ADC, ініційованого зовнішніми джерелами. Однак для звичайних операцій, пов'язаних з опитуванням, першим бітовим ADCEN потрібно встановити 1 для ввімкнення схеми ADC.
Далі, вхід каналу АЦП потрібно контролювати в регістрі AINDIDS, де цифрові входи можуть бути відключені.
Значення n означає біт каналу (наприклад, каналом AIN0 потрібно буде керувати, використовуючи перший біт P17DIDS з реєстру AINDIDS). Цифровий вхід потрібно ввімкнути, інакше він буде читатися як 0. Це все є основним налаштуванням АЦП. Тепер очищення ADCF та налаштування ADCS можна перейти до перетворення ADC. Перетворене значення буде доступне в наведених нижче реєстрах-
І
Обидва регістри є 8-бітовими. Оскільки АЦП забезпечує 12-бітові дані, ADCRH використовується як повний (8-бітний), а ADCRL використовується як половинний (4-бітний).
Програмування N76E003 для АЦП
Кодування кожного конкретного модуля є напруженою роботою, тому пропонується проста, але потужна РК-бібліотека, яка буде дуже корисною для взаємодії РК із символами N76E003 розміром 16x2 символи. РК-бібліотека 16x2 доступна у нашому сховищі Github, яке можна завантажити за посиланням нижче.
Завантажте РК-бібліотеку 16x2 для Nuvoton N76E003
Будь ласка, отримайте бібліотеку (шляхом клонування або завантаження) і просто включіть файли lcd.c та LCD.h у свій проект Keil N76E003 для легкої інтеграції РК-дисплея 16x2 у бажану програму чи проект. Бібліотека забезпечить наступні корисні функції, пов'язані з дисплеєм -
- Ініціалізуйте РК-дисплей.
- Надіслати команду на РК-дисплей.
- Запишіть на РК-дисплей.
- Помістіть рядок у РК-дисплей (16 символів).
- Друкувати символ, надсилаючи шістнадцяткове значення.
- Прокручуйте довгі повідомлення довжиною понад 16 символів.
- Друкуйте цілі числа прямо на РК-дисплеї.
Кодування ADC просте. У функції налаштування Enable_ADC_AIN0; використовується для налаштування АЦП для входу 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 рази, а потім додається до змінної даних. Основною функцією АЦП є зчитування даних і друк безпосередньо на дисплеї. Однак напруга також перетворюється, використовуючи відношення або співвідношення між напругою, поділене на бітове значення.
12-бітний АЦП забезпечить 4095 біт на вході 5,0 В. Таким чином, ділиться 5.0V / 4095 = 0.0012210012210012V
Отже, 1 цифра бітових змін буде дорівнює змінам 0,001 В (приблизно). Це робиться в основній функції, показаній нижче.
void main (void) { int adc_data; налаштування (); lcd_com (0x01); while (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, "Вольт:% 0,2fV", напруга); lcd_com (0xC0); lcd_puts (str_voltage); Таймер0_Затримка1мс (500); } }
Дані перетворюються з бітового значення в напругу і за допомогою функції sprintf вихід перетворюється у рядок і надсилається на РК-дисплей.
Прошивання коду та виводу
Код повернув 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 \\ Display \\ Objects \\ timer" Flash Erase Done. Flash Write Done: запрограмовано 4162 байта. Перевірка Flash виконана: перевірено 4162 байта. Flash Load закінчено о 11:56:04
На зображенні нижче показано апаратне забезпечення, підключене до джерела живлення за допомогою адаптера постійного струму, а на дисплеї відображається вихідна напруга, встановлена потенціометром праворуч.
Якщо ми повернемо потенціометр, напруга, подана на штифт АЦП, також зміниться, і ми зможемо помітити значення АЦП та аналогову напругу, що відображаються на РК-дисплеї. Ви можете переглянути відео нижче для повної робочої демонстрації цього підручника.
Сподіваємось, вам сподобалась стаття і ви дізналися щось корисне, якщо у вас є питання, залиште їх у розділі коментарів нижче, або ви можете використати наші форуми, щоб опублікувати інші технічні питання.