PIC32 – ADC

Visits: 535


Модуль АЦП PIC32 все возможные навороты которыми могут обладать модули микроконтроллера. Но мы рассмотрим только один простой вариант для работы с одним входом. Мы для работы выберем модуль 1.

cat_PIC32_ADC01

Работа АСП модуля проста.

Перед началом настройки мы должны убедиться, что модуль отключен:

    AD1CON1bits.ON=0;               // выключить АЦП1

Мы должны выбрать вход который будет использоваться как аналоговый:

/*настройка аналоговых входов для АЦП1*/
    TRISBbits.TRISB0=1;             // регистр направления данных порта
    AD1PCFG=0xFFFE;                 // PORTB = Digital; RB0 = analog, 0-аналоговый  вход 1 - цифровой

Следующий этап, это подключение выводов для опорного напряжения (уровень, разность напряжений между этими входами определяют, какой диапазон напряжений оцифровывает модуль):

AD1CHS=0;                       // отрицательный выход к Vr-, CH0SA - AN0;

Режим работы АЦП, тут мы настраиваем, кто будет запускать АЦП для выполнения измерения, как будет АЦП предоставлять данные нам и как долго мы будем подключены к источнику сигнала для зарядки (или перезарядки) измерительной емкости на входе АЦП. Тут все зависит от того, что и как измеряется. В нашем варианте АЦП работает непрерывно.

    AD1CON1bits.SSRC = 0b010;       // 010 = Timer 3 period match ends sampling and starts conversion
    AD1CON1bits.FORM = 0b011;       // 011 = Signed Fractional 16-bit (DOUT = 0000 0000 0000 0000 sddd dddd dd00 0000)
    AD1CON1bits.ASAM = 1;           // 1 = выборка начинается сразу после преобразования.

 АЦП имеет 16 буферов, при необходимости мы можем их использовать для эффективности работы. Но в нашем примере мы будем использовать только один буфер (так как в будущем планируем использовать DMA для передачи данных между АЦП и памятью):

    AD1CON2 = 0;                    // BUFM = 0 буфер = 16 слов
    AD1CON2bits.SMPI=0x0;           // количество буферов участвующих в цикле измерения, по окончанию заполнения формируется прерывание 16 буферов
    /*один буфер грузим*/

И последние настройки это сколько мы тратим времени на выборку и длительность периода TAD (общее время обработки данных в АЦП):

    AD1CON3bits.SAMC = 2;           // TAD (0-31) время выборки
    AD1CON3bits.ADCS = 2;           // TPB · (ADCS<7:0> + 1)*2 = 64 · TPB = TAD

И остается включить:

AD1CON1bits.ON=1;               //включить АЦП1

Но конвертирование не наступит, пока ты не включить источник запуска АЦП. А источником мы назначили таймер Т3.

    TMR3 = 0x0000;                 // выключить
    T3CONbits.TCKPS = 0b111;       // 111 = 1:256 prescale value
    PR3=FCY/NZCHAST/256/FFT_N;     // вычисляем значение для частоты NZCHAST
    T3CONbits.ON = 1;              // включить таймер

Вот после этого АЦП начнет выполнять измерение с частотой заданной таймером.


Общий вид функции инициализации АЦП может быть такой

// настройка АЦП
void initADC (void)/*настройка АЦП */
{
/*настройка АЦП для режима автоматических измерений*/
    AD1CON1bits.ON=0;               // выключить АЦП1
    
/*настройка аналоговых входов для АЦП1*/
    TRISBbits.TRISB0=1;             // регистр направления данных порта
    AD1PCFG=0xFFFE;                 // PORTB = Digital; RB0 = analog, 0-аналоговый  вход 1 - цифровой
    
    AD1CHS=0;                       // отрицательный выход к Vr-, CH0SA - AN0;
    
    AD1CON1bits.SSRC = 0b010;       // 010 = Timer 3 period match ends sampling and starts conversion
    AD1CON1bits.FORM = 0b011;       // 011 = Signed Fractional 16-bit (DOUT = 0000 0000 0000 0000 sddd dddd dd00 0000)
    AD1CON1bits.ASAM = 1;           // 1 = выборка начинается сразу после преобразования.
    
    AD1CON2 = 0;                    // BUFM = 0 буфер = 16 слов
    AD1CON2bits.SMPI=0x0;           // количество буферов участвующих в цикле измерения, по окончанию заполнения формируется прерывание 16 буферов
    /*один буфер грузим*/
    
    AD1CON3bits.SAMC = 2;           // TAD (0-31) время выборки
    AD1CON3bits.ADCS = 2;           // TPB · (ADCS<7:0> + 1)*2 = 64 · TPB = TAD
 
    AD1CON1bits.ON=1;               //включить АЦП1
}

PIC32 – Формат данных

Visits: 366


Формат данных для компилятора XC32:

Объявление Бит  Диапазон чисел Примечание 
Целочисленные типы
char 8 -128 … 127 со знаком
signed char 8 -128 … 127 со знаком
unsigned char 8 0 … 255 без знака
short 16 -32768 … 32767  со знаком
signed short 16 -32768 … 32767  со знаком
unsigned short 16 0 … 65535  без знака
int 32 -2147483648 … 2147438647 со знаком
signed int 32 -2147483648 … 2147438647 со знаком
long 32 -2147483648 … 2147438647 со знаком
signed long 32 -2147483648 … 2147438647 со знаком
unsigned int 32 0 … 65535 без знака
unsigned long 32 0 … 65535 без знака
long long 64 -263 … 263-1 со знаком
signed long long 64 -263 … 263-1 со знаком
unsigned long long 64 0 … 264-1 без знака
   
Для арифметики с плавающей запятой  
float 32  1.175494e-38 … 3.40282346e+38
double* 32 1.175494e-38 … 3.40282346e+38
long double 64 2.22507385e-308 … 1.79769313e+308

 * double is equivalent to long double if -fno-short-double is used.


Это может быть интересно

  • My libraries for Altium DesignerMy libraries for Altium Designer
    Visits: 3770 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure  and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/    My libraries for Altium designer  (Updated V – 29/05/2022) (c) 2021 …
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
    Visits: 3126  Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
  • Trimax – кодирование и декодирование ИК-командTrimax – кодирование и декодирование ИК-команд
    Visits: 2127 Первое, что надо понять назначение кнопок клавиш пульта, а также, что за кодирование реализовано в ИК- пульте. Для назначения клавиш обратимся к описанию, а для взлома кодирования воспользуемся …
  • Часы + Календарь + Термометр + …Часы + Календарь + Термометр + …
    Visits: 2664 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
  • Гаджеты для домашней автоматики – Датчик движенияГаджеты для домашней автоматики – Датчик движения
    Visits: 1416 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …
  • Датчик контроля протечки воды ch-c0020Датчик контроля протечки воды ch-c0020
    Visits: 1926 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
  • LCD драйвер – UC1601sLCD драйвер – UC1601s
    Visits: 1529 http://svetomuzyka.narod.ru/project/UC1601s.html Читайте обновление на http://catcatcat.d-lan.dp.ua/?page_id=178 В данный момент можно приобрести в ООО “Гамма” несколько типов индикаторов на драйвере UC1601s. RDX0048-GC, RDX0077-GS, RDX0154-GC и RDX0120-GC выполнены по технологии COG. Метки: …
  • УКВ – радиоприем, часть 2УКВ – радиоприем, часть 2
    Visits: 6168 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
  • Система AT команд версии V2.0 для ESP8266 и ESP32Система AT команд версии V2.0 для ESP8266 и ESP32
    Visits: 9315 Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 …
  • MPLAB® Harmony – или как это просто! Часть 3.MPLAB® Harmony – или как это просто! Часть 3.
    Visits: 2043 Часть третья – копнём немного глубже. Вы наверное заметили, что во второй главе, вроде сначала все шло как по маслу, а потом, что бы заморгали светики, я вставил …