цифровая электроника
вычислительная техника
встраиваемые системы

 

Радиомодуль NRF24LE1 и АЦП

Автор: Mike(admin) от 30-11-2016, 09:35

В электронике далеко не все сигналы являются цифровыми, то есть представляют собой либо логический ноль, либо логическую единицу. Существует огромное количество случаев, когда сигнал меняется в широком диапазоне значений, то есть является аналоговым. И чтобы этот сигнал каким-то образом был воспринят цифровой системой, существуют аналогово-цифровые преобразователи или АЦП.


Радиомодуль NRF24LE1 и АЦП

В NRF24LE1 также имеется встроенный модуль АЦП. Его интересной особенностью является то, что можно выбрать с каким разрешением будет преобразовывать аналоговый сигнал в цифровой этот АЦП. Есть варианты 6 бит, 8 бит, 10 бит и 12 бит. Таким образом, мы можем иметь 6-, 8-, 10 или 12-разрядный АЦП.


Всего в NRF24LE1 выделено 14 линий для приема аналоговых сигналов. Также для каждого входа можно выбрать однопроводный вход или двухпроводный (дифференциальный) вход. В качестве опорного напряжения можно выбрать внутренний источник, внешний источник или напряжение питания. Есть режим одиночного преобразования, когда сигнал будет преобразован, а затем АЦП прекратит свою работу, и режим непрерывного преобразования с частотой дискретизации 2, 4, 8 или 16 кбит/с. Также данный АЦП характеризуется низким энергопотреблением (0.1 мА при 2 кбит/с).


Входной канал устанавливается с помощью функции hal_adc_set_input_channel(). Функция hal_adc_set_reference() позволяет настроить источник опорного напряжения, в качестве которого могут выступать INT, VDD,AIN3 или AIN9. Функция hal_adc_set_input_mode() определяет входной режим (одиночный SINGLE, дифференциальный DIFF_AIN2 и дифференциальный DIFF_AIN6). С помощью функции hal_adc_set_conversion_mode() можно указать, какой режим преобразования мы хотим установить (одиночный SINGLE_STEP или непрерывный CONTINOUS). Разрешение АЦП устанавливается через функцию hal_adc_set_resolution(). Также можно настроить способ заполнения регистра данных АЦП (слева JUST_LEFT или справа JUST_RIGHT) с помощью функции hal_adc_set_data_just(). Для того, чтобы начать преобразование, нужно воспользоваться функцией hal_adc_start(). Функция hal_adc_busy() вернет 0, если АЦП не занят преобразованием, и 1, если занят. Прочитать младший байт данных, полученных в результате преобразования, можно с помощью функции hal_adc_read_LSB(), а старший с помощью hal_adc_read_MSB().


Ниже приведен код, демонстрирующий работу с АЦП в NRF24LE1. Схема для проверки работоспособности кода следующая:


Радиомодуль NRF24LE1 и АЦП


#include "nrf24le1.h"
#include "hal_adc.h"
#include <intrins.h>
 
void delay(unsigned int us)
{
  while(us--)
  {
    _nop_();
  }
}
 
void main()
{
  // Порт 1 на выход
  P1DIR = 0;
P10 = 0;
 
  // Настройка АЦП
  hal_adc_set_input_channel(HAL_ADC_INP_AIN0);
  hal_adc_set_reference(HAL_ADC_REF_VDD);
  hal_adc_set_input_mode(HAL_ADC_SINGLE);
  hal_adc_set_conversion_mode(HAL_ADC_CONTINOUS);
  hal_adc_set_sampling_rate(HAL_ADC_2KSPS);
  hal_adc_set_resolution(HAL_ADC_RES_8BIT);
  hal_adc_set_data_just(HAL_ADC_JUST_RIGHT);
 
  // Разрешаем прерывания MISC для активации прерываний АЦП
  MISC = 1;
  // Разрешаем глобальные прерывания
  EA = 1;
  // Запускаем преобразование АЦП
  hal_adc_start();
 
  for(;;){}
}
 
// АЦП (MISC) обработчик прерываний
ADC_ISR()
{
  int val = 0;
val = hal_adc_read_LSB();
P10 = 1;
delay(1000);
delay(val * 4);
P10 = 0;
delay(19000 - val * 4);
 
}



© digitrode.ru


Теги: NRF24LE1, АЦП



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий