Views: 1198
АЦП ADS1230 – это 20 битный АЦП со скоростью измерения 10 или 80 раз в секунду. При подаче питания АЦП постоянно выполняет измерения. Данные можно получить с него по SPI шине. Максимальная тактовая частота шины до 1 мГц. Каждое измерение выполненное АЦП инициализируется самим АЦП по шине данных положительным импульсом. Чтение микроконтроллер должен начинать по получению отрицательного фронта.
Данные передаются старшим битом в перед для чтения 20 бит необходимо 3 байта. Данные выровнены влево.
Для чтения данных необходимо настроить SPI по отрицательному фронту синхроимпульсов.
Управляя количеством синхроимпульсов можно управлять функциями АЦП, одна из них это калибровка АЦП.
Калибровки смещения
Калибровка смещения может быть начата в любое время для компенсации в ADS1230 погрешности смещения. Чтобы начать калибровку смещения, необходимо по крайней мере, два дополнительных SCLKs после получения 20 бит данных. Данные мы получаем чтением 24 бита. Если продолжить формирование SCLK, то задний фронт 26-го SCLK начинается цикл калибровки. Дополнительные импульсы SCLK могут быть отправлены после 26 SCLK, однако, активность на шине SCLK должны быть сведены к минимуму, во время калибровки смещения, для достижения наилучших результатов. В течение выполнения функции калибровки, аналоговые входные контакты отсоединены от входов АЦП и соответствующий сигнал подается внутри, чтобы выполнить калибровку. Когда калибровка завершена, DRDY/DOUT переходит в низкий уровень, что указывает, что новые данные готовы. Первое преобразование после калибровки содержит достоверные данные.
Стандартная схема подключения АЦП к мосту датчика для измерения веса.
Вариант подключения АЦП к 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.
Это может быть интересно
MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)Views: 645 RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника …
ch-светомузыка и AK4113Views: 1510 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …
Temperature measurement with NTC thermistor.Views: 664 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
Просто о структурах и объединениях в СиViews: 2345 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовViews: 806 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
Мониторинг температурыViews: 1476 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …
Светодиоды со встроенным драйвером WS2812BViews: 1046 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
Применение typedef, struct и unionViews: 8910 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
Тестирование модуля генератораViews: 981 Тестирование модуля генератора Настройка, запуск и проверка рабочей частоты на примере PIC18F26K40. PIC18F26K40 Чтобы понять из-за чего зависит производительность микроконтроллера просто надо понять как работает его задающий тактовый …
Altium Designer first projectViews: 522 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье Altium Designer my setup system and project structure. Обратите внимание! Библиотека постоянно обновляется, …



