- Необходимые компоненты и настройка оборудования
- Принципиальная схема Nuvoton N76E003 для считывания аналогового напряжения
- Информация о GPIO и аналоговых выводах в N76E003
- Информация о периферийном АЦП в N76E003
- Программирование N76E003 для АЦП
- Прошивка кода и вывода
Аналого-цифровой преобразователь (АЦП) - это наиболее часто используемая аппаратная функция микроконтроллера. Он принимает аналоговое напряжение и преобразует его в цифровое значение. Поскольку микроконтроллеры являются цифровыми устройствами и работают с двоичной цифрой 1 и 0, он не может обрабатывать аналоговые данные напрямую. Таким образом, АЦП используется для получения аналогового напряжения и преобразования его в эквивалентное цифровое значение, понятное микроконтроллеру. Если вам нужна дополнительная информация об аналого-цифровом преобразователе (АЦП), вы можете проверить статью по ссылке.
В электронике доступны различные датчики, которые обеспечивают аналоговый выход, такие как газовые датчики MQ, датчик акселерометра ADXL335 и т. Д. Таким образом, используя аналого-цифровой преобразователь, эти датчики могут быть связаны с блоком микроконтроллера. Вы также можете ознакомиться с другими руководствами, перечисленными ниже, по использованию ADC с другими микроконтроллерами.
- Как использовать АЦП в Arduino Uno?
- Взаимодействие ADC0808 с микроконтроллером 8051
- Использование модуля АЦП микроконтроллера PIC
- Учебник Raspberry Pi ADC
- Как использовать АЦП в MSP430G2 - Измерение аналогового напряжения
- Как использовать АЦП в STM32F103C8
В этом руководстве мы будем использовать встроенное периферийное устройство АЦП микроконтроллера N76E003, поэтому давайте оценим, какой тип оборудования нам требуется для этого приложения.
Необходимые компоненты и настройка оборудования
Чтобы использовать АЦП на N76E003, мы будем использовать делитель напряжения с помощью потенциометра и считывать напряжение в диапазоне от 0 до 5,0 В. Напряжение будет отображаться на ЖК-дисплее 16x2 символов. Если вы новичок в использовании ЖК-дисплея и N76E003, вы можете проверить, как подключить ЖК-дисплей к Nuvoton N76E003. Таким образом, основным компонентом, необходимым для этого проекта, является ЖК-дисплей 16x2 символов. Для этого проекта мы будем использовать следующие компоненты:
- Символьный LCD 16x2
- Резистор 1к
- Потенциометр 50k или подстроечный потенциометр
- Несколько проводов Берга
- Мало проводов для подключения
- Макетная плата
Не говоря уже о том, что помимо вышеперечисленных компонентов, нам нужна отладочная плата на базе микроконтроллера 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-разрядный АЦП последовательного приближения. Отличительной особенностью N76E003 является то, что он имеет очень хорошее разрешение АЦП. АЦП имеет 8-канальные входы в несимметричном режиме. Связь с АЦП довольно проста и понятна.
Первым шагом является выбор входа канала АЦП. В микроконтроллерах N76E003 доступны 8-канальные входы. После выбора входов АЦП или контактов ввода / вывода необходимо установить все контакты для направления в коде. Все контакты, используемые для аналогового входа, являются входными контактами микроконтроллера, поэтому все контакты должны быть установлены в режиме только входа (высокоимпедансный). Их можно установить с помощью регистров PxM1 и PxM2. Эти два регистра устанавливают режимы ввода / вывода, где x обозначает номер порта (например, для порта P1.0 регистр будет P1M1 и P1M2, для P3.0 это будет P3M1 и P3M2 и т. Д.). можно увидеть на изображении ниже -
Конфигурация АЦП выполняется двумя регистрами ADCCON0 и ADCCON1. Описание регистра ADCCON0 показано ниже.
Первые 4 бита регистра от бита 0 до бита 3 используются для установки выбора канала АЦП. Поскольку мы используем канал AIN0, выбор будет 0000 для этих четырех битов.
Шестой и седьмой биты являются важными. ADCS должен установить 1 для начала преобразования АЦП, и ADCF предоставит информацию об успешном преобразовании АЦП. Для запуска преобразования АЦП он должен быть установлен в 0 прошивкой. Следующий регистр - ADCCON1-
Регистр ADCCON1 в основном используется для преобразования АЦП, запускаемого внешними источниками. Однако для обычных операций, связанных с опросом, для первого бита ADCEN требуется установить 1 для включения схемы АЦП.
Затем вход канала АЦП необходимо контролировать в регистре AINDIDS, где цифровые входы могут быть отключены.
П обозначает бит канала (например, канал AIN0 нужно будет контролироваться с использованием первого бита P17DIDS из AINDIDS регистра). Цифровой вход должен быть включен, в противном случае он будет отображаться как 0. Это все основные настройки АЦП. Теперь, очистив ADCF и установив ADCS, можно начинать преобразование ADC. Преобразованное значение будет доступно в следующих регистрах:
И
Оба регистра 8-битные. Поскольку АЦП предоставляет 12-битные данные, ADCRH используется как полный (8-битный), а ADCRL используется как половина (4-битный).
Программирование N76E003 для АЦП
Кодирование для конкретного модуля каждый раз - это напряженная работа, поэтому предоставляется простая, но мощная библиотека ЖК-дисплея, которая будет очень полезна для сопряжения ЖК-дисплея 16x2 символа с N76E003. Библиотека 16x2 LCD доступна в нашем репозитории Github, которую можно скачать по ссылке ниже.
Загрузить ЖК-библиотека 16x2 для Nuvoton N76E003
Пожалуйста, получите библиотеку (путем клонирования или загрузки) и просто включите файлы lcd.c и LCD.h в свой проект Keil N76E003 для легкой интеграции ЖК-дисплея 16x2 в желаемое приложение или проект. Библиотека предоставит следующие полезные функции, связанные с отображением:
- Инициализируйте ЖК-дисплей.
- Отправить команду на ЖК-дисплей.
- Напишите на ЖК-дисплей.
- Поместите строку в ЖК-дисплей (16 символов).
- Распечатать символ, отправив шестнадцатеричное значение.
- Прокрутка длинных сообщений, содержащих более 16 символов.
- Печатайте целые числа прямо на ЖК-дисплее.
Кодировка для АЦП проста. В функции настройки 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 . Приведенная ниже функция будет считывать АЦП из регистров 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,0 В / 4095 = 0,0012210012210012 В
Таким образом, 1 цифра изменения бита будет равна изменению 0,001 В (приблизительно). Это делается в основной функции, показанной ниже.
void main (void) { int adc_data; настроить(); lcd_com (0x01); пока (1) { lcd_com (0x01); lcd_com (0x80); lcd_puts ("Данные АЦП:"); 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); Timer0_Delay1ms (500); } }
Данные преобразуются из битового значения в напряжение, и с помощью функции sprintf вывод преобразуется в строку и отправляется на ЖК-дисплей.
Прошивка кода и вывода
Код вернул 0 предупреждений и 0 ошибок и был прошит с использованием метода прошивки по умолчанию Keil, вы можете увидеть мигающее сообщение ниже. Если вы новичок в Keil или Nuvoton, ознакомьтесь с разделом «Начало работы с микроконтроллером Nuvoton», чтобы понять основы и понять, как загрузить код.
Перестройка началась: Проект: timer Rebuild target 'Target 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. Выполнена флэш-запись: запрограммировано 4162 байта. Flash Verify Done: 4162 байта проверены. Флэш-загрузка завершилась в 11:56:04
На изображении ниже показано оборудование, подключенное к источнику питания с помощью адаптера постоянного тока, а на дисплее отображается выходное напряжение, установленное потенциометром справа.
Если мы повернем потенциометр, напряжение, подаваемое на вывод АЦП, также изменится, и мы сможем заметить значение АЦП и аналоговое напряжение, отображаемые на ЖК-дисплее. Вы можете посмотреть видео ниже, чтобы увидеть полную рабочую демонстрацию этого руководства.
Надеюсь, вам понравилась статья и вы узнали что-то полезное. Если у вас есть вопросы, оставьте их в разделе комментариев ниже или вы можете использовать наш форум, чтобы задать другие технические вопросы.