
Views: 1184
АЦП 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.
Это может быть интересно
Бегущие огни на WS2812B
Views: 5004 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …ESP8266 применение в проектах
Views: 3745 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …LM317 и светодиоды
Views: 8116 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …USB K-L-line адаптер
Views: 4730 USB K-L-line адаптер предназначен для связи персонального компьютера с диагностической шиной автомобиля – интерфейс ISO-9141. Этот проект предназначен для сборки недорого устройства с использованием специально для этой цели …Проект с использованием MCC часть 16
Views: 1286 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …MPLAB® Harmony – или как это просто! Часть 4.
Views: 2357 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …Trimax – кодирование и декодирование ИК-команд
Views: 2432 Первое, что надо понять назначение кнопок клавиш пульта, а также, что за кодирование реализовано в ИК- пульте. Для назначения клавиш обратимся к описанию, а для взлома кодирования воспользуемся …Часы-кухонный таймер
Views: 2874 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …ch-светомузыка от теории до реализации
Views: 899 Сразу оговоримся технология или теория ch-светомузыки, это постоянно развивающийся процесс и то что будет сказано сегодня завтра может быть опровергнуто и считаться ошибочным. Назовем само решение проблемы автоматического …Мультизоновый индикатор-терморегулятор ch-c3010
Views: 1324 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …