АЦП ADS1230 и PIC24FJ64GA004

Visits: 1119


Cat_ADS1230_05АЦП ADS1230 – это 20 битный АЦП со скоростью измерения 10 или 80 раз в секунду. При подаче питания АЦП постоянно выполняет измерения. Данные можно получить с него по SPI шине. Максимальная тактовая частота шины до 1 мГц. Каждое измерение выполненное АЦП инициализируется самим АЦП по шине данных положительным импульсом. Чтение микроконтроллер должен начинать по получению отрицательного фронта.

Cat_ADS1230_02

Данные передаются старшим битом в перед для чтения 20 бит необходимо 3 байта. Данные выровнены влево.

Cat_ADS1230_03

Для чтения данных необходимо настроить SPI по отрицательному фронту синхроимпульсов.

Управляя количеством синхроимпульсов можно управлять функциями АЦП, одна из них это калибровка АЦП.

Калибровки смещения

Калибровка смещения может быть начата в любое время для компенсации в ADS1230 погрешности смещения. Чтобы начать калибровку смещения, необходимо по крайней мере, два дополнительных SCLKs после получения 20 бит данных. Данные мы получаем чтением 24 бита. Если продолжить формирование SCLK, то задний фронт 26-го SCLK начинается цикл калибровки. Дополнительные импульсы SCLK могут быть отправлены после 26 SCLK, однако, активность на шине SCLK должны быть сведены к минимуму, во время калибровки смещения, для достижения наилучших результатов. В течение выполнения функции калибровки, аналоговые входные контакты отсоединены от входов АЦП и соответствующий сигнал подается внутри, чтобы выполнить калибровку. Когда калибровка завершена, DRDY/DOUT переходит в низкий уровень, что указывает, что новые данные готовы. Первое преобразование после калибровки содержит достоверные данные.

Cat_ADS1230_04

Стандартная схема подключения АЦП к мосту датчика для измерения веса.

Cat_ADS1230_01

Вариант подключения АЦП к PIC24FJ64GA004.

Подключение будет выполнено к SPI2

void init_spi2 (void) // настройка SPI2
/* настраивается только на приём данных
 * данные с АЦП
 */
{
 /* SPI2 - настройка для работы с входным усилителем и индикатором
 * PPRE
 * 11 = Primary prescale 1:1
 * 10 = Primary prescale 4:1
 * 01 = Primary prescale 16:1
 * 00 = Primary prescale 64:1
  *  SPRE
 * 111 = Secondary prescale 1:1
 * 110 = 2
 * 101 = 3
 * 100 = 4
 * 011 = 5
 * 010 = 6
 * 001 = 7
 * 000 = Secondary prescale 8:1*/
//    RPOR4bits.RP9R=0b01001;   // SPI2 Slave Select Output//CS 
//    RPOR6bits.RP12R=0b01010;     // SPI2 Data Output
    RPINR22bits.SDI2R = 20;     // SPI2 Data Input - RP20/ нога 37
    RPOR10bits.RP21R=11;        // SPI2 Clock Output
    
    SPI2STATbits.SPIEN = 0;         // выключить
    SPI2CON1 = 0b0000000000111001;  //FCY/1/6=50/6=8,3
/*               ||||||||||||||++--- PPRE<1:0>: настройка предделителя 1 11 = Primary prescale 4:1
 *               |||||||||||+++----- SPRE<2:0>: настройка предделителя 2 111 = Primary prescale 8:1
 *               ||||||||||+-------- MSTEN: 1 = Режим ведущего, 0 = режим ведомого
 *               |||||||||+--------- CKP:0 = пассивный уровень шины SCL 1- высокий, 0-низкий
 *               ||||||||+---------- SSEN:Slave Select Enable bit (Slave mode)
 *               |||||||+----------- CKE: смена бита данных происходит: 1-от активного в пассивное(синх-0/1)/0-пассивного в активное (синх-1/0)
 *               ||||||+------------ SMP:0 = Input data sampled at middle of data output time
 *               |||||+------------- MODE16: Communication is word-wide (8 bits)
 *               ||||+-------------- DISSDO: 0-в работе
 *               |||+--------------- DISSCK: 0-в работе
 *               +++---------------- не используются
 */
    SPI2CON2 = 0b0000000000000000;
/*               |||||||||||||||+--- не используется
 *               ||||||||||||||+---- FRMDLY:
 *               |||+++++++++++----- не используются
 *               ||+---------------- FRMPOL:
 *               |+----------------- SPIFSD:
 *               +------------------ FRMEN:
 */

    SPI2STAT = 0b1000000000000000;
/*               |||||||||||||||+--- SPIRBF: Флаг приемного буфера 1 - данные приняты 0- прием выполняется SPI2RXB пуст
 *               ||||||||||||||+---- SPITBF: Флаг передатчика 1 - передача не началась (буфер полон), 0 - передача началась буфер пуст (устанавливается сбрасывается аппаратно)
 *               ||||||||||++++----- не используются
 *               |||||||||+--------- SPIROV: 1 - произошло переполнение 0 - нет переполнения премного буфера.
 *               |||++++++---------- не используются
 *               ||+---------------- SPISIDL: режим работы в состоянии ожидания 0 - работает 1 - отключен модуль
 *               |+----------------- не используется
 *               +------------------ SPIEN: 1 - модуль включен 0 - выключен.
 */
    SPI2STATbits.SPIEN = 1; // БИТ Включить - должен быть активирован последним, чтобы вступили в действии все изменения.
}

Сама обработка данных и синхронизация выполняется через прерывания по входу через которые на SPI2 поступают данные. Настройка прерывание:

void ADCIZ (void)// включить измерение
{
    ADCVMOSST=1;            // подать питание на датчик
    ADCPDWN=1;              // включить ADC
    CNEN2bits.CN25IE=1;     // разрешить прерывание по входу
    _CNIF = 0;              // сбросить прерывание
    _CNIE = 1;              // включить прерывание
}

Первые две строчки это если есть необходимость в управлении подачей питания на измерительный мост и управления режимом “слип” АЦП. Следующие три строки это настройка режима прерывания по входу через который АЦП получает данные.

Получение данных происходит через функцию прерывания:

void __attribute__((interrupt, auto_psv)) _CNInterrupt (void)
{
    unsigned long datain;
    _LATB2=!_LATB2;                    // индикация работы АЦП
    
    while(PORTCbits.RC4);              // ожидать низкого уровня на входе

    SPI2BUF=0;                         // запуск чтения
    while(!SPI2STATbits.SPIRBF);       // ожидать загрузки буфера
    datain=SPI2BUF;
    ADCbufer[ucazad]=datain<<16;       // загрузка данных в буфер, сброс бита SPIRBF
    
    SPI2BUF=0;                         // запуск чтения
    while(!SPI2STATbits.SPIRBF);       // ожидать загрузки буфера
    datain=SPI2BUF;
    ADCbufer[ucazad]+=datain<<8;       // загрузка данных в буфер, сброс бита SPIRBF
    
    SPI2BUF=0;                         // запуск чтения
    while(!SPI2STATbits.SPIRBF);       // ожидать загрузки буфера
    datain=SPI2BUF;
    ADCbufer[ucazad++]+=datain;        // загрузка данных в буфер, сброс бита SPIRBF
    
    if(ucazad==filtrADC)ucazad=0;      // инициализация указателя.
    
    //калибровка
    if(Bit.calADC)                     // если установлен выполнить калибровку
    {
        Bit.calADC=0;                  // сбросить флаг калибровки
        SPI2BUF=0;                     //
        while(!SPI2STATbits.SPIRBF);   // ожидать загрузки буфера
        datain=SPI2BUF;                // сброс бита SPIRBF
    }
    
    _CNIF = 0;                         // сброс прерывания
}

Флаг Bit.calADC – предназначен для активирования режима калибровки. Данные загружаются в буфер ADCbufer[] размер которого может быть ограничен переменной filtrADC.



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


  • DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверDIXELL XWEB500D-EVO + RUT900 или как пробить NAT-сервер
    Visits: 992 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
    Visits: 3149  Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
  • Гаджеты для домашней автоматики – Датчик приближенияГаджеты для домашней автоматики – Датчик приближения
    Visits: 1942 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …
  • Altium Designer – создание рисунков на печатной платеAltium Designer – создание рисунков на печатной плате
    Visits: 3241   Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
  • BMP280 – температура и атмосферное давление – учебный проектBMP280 – температура и атмосферное давление – учебный проект
    Visits: 2035 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
  • ESP8266 применение в проектахESP8266 применение в проектах
    Visits: 3513 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
  • Тестирование модуля генератораТестирование модуля генератора
    Visits: 825  Тестирование модуля генератора Настройка, запуск и проверка рабочей частоты на примере PIC18F26K40. PIC18F26K40 Чтобы понять из-за чего зависит производительность микроконтроллера просто надо понять как работает его задающий тактовый …
  • Development Boards PIC18F47Q84Development Boards PIC18F47Q84
    Visits: 980 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
  • MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовMCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов
    Visits: 601 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
  • MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
    Visits: 1161 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на  Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.


Поделись этим!