ads1259
Dependents: Chromatograph_Mobile Chromatograph_Mobile
Diff: PGA280ADS1259.cpp
- Revision:
- 0:f9ba28ab9f4c
- Child:
- 1:533ce2102fcc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PGA280ADS1259.cpp Mon Jun 08 05:48:24 2020 +0000 @@ -0,0 +1,121 @@ +#include "ADS1259.h" +#include "PGA280.h" +#include "PGA280ADS1259.h" +#include <math.h> + + +//#include "app.h" +//counter; //сделать переменную видимой в этом файле +void pga280_ads1259_init ( unsigned char ch ) +{ + pga280_resetDevice ( ch ); + //ads1259_resetDevice ( ch ); //микросхема снова уходит в сброс как только сменится адрес, так как ножка RESET оключается + /*Сюда вставить задержку не менее 20 мс (для того чтобы микросхема АЦП раскачалась)*/ + pga280_ads1259_setup_pga280(ch); + wait_ms(100); /*задержка перед настройкой АЦП*/ + pga280_ads1259_setup_ads1259(ch); +} + +void pga280_ads1259_setup_pga280 ( unsigned char ch ) +/*Предварительная настройка PGA280 (Это инициализация по идее)*/ + +{ + //PGA280_INPUT_SWITCH0.SW_A1=1; + //PGA280_INPUT_SWITCH0.SW_A2=1; + pga280_writeOneRegisterDevice ( PGA280_INPUT_SWITCH0_ADR, 0x18, ch ); //выбрать для работы INP2 INN2 + pga280_writeOneRegisterDevice ( PGA280_INPUT_SWITCH1_ADR, 0, ch ); + pga280_writeOneRegisterDevice ( PGA280_GPIO_DIR_ADR, 0b111111, ch ); //установить первые 6 выводов на выход + pga280_writeOneRegisterDevice ( PGA280_CS_MODE_ADR, 0b00010000, ch ); //ECS4 в расширенном CS режиме + pga280_writeOneRegisterDevice ( PGA280_SP_FUNCTION_ADR,7 , ch );//выводы GPIO0-2 используются для функции MUX +} + +void pga280_ads1259_setup_ads1259 ( unsigned char ch ) +/*Настройка АЦП*/ +{ + pga280_directCsBegin ( 4, ch ); + ads1259_resetDevice(ch); //костыльная функция + wait_ms(1); //пауза для выхода на режим работы + ads1259_sendCommandDevice ( SDATAC_ADS1259 ); //установить чтение в постоянном режиме + ads1259_writeOneRegisterDevice ( CONFIG0_ADS1259, 0x04 ); //0x04 + ads1259_writeOneRegisterDevice ( CONFIG1_ADS1259, 0x50 ); //0x50 + ads1259_writeOneRegisterDevice ( CONFIG2_ADS1259, 0x05 ); //0x03 400 400 сэмплов + /*Настройка смещения так чтобы 7FFFFF - это нулевой уровень*/ + ads1259_writeOneRegisterDevice ( OFC0_ADS1259, 0x68 );//5D + ads1259_writeOneRegisterDevice ( OFC1_ADS1259, 0x01 );//01 + ads1259_writeOneRegisterDevice ( OFC2_ADS1259, 0x00); + /*Конец*/ + /*Настройка масштабирования 1 к 1*/ + ads1259_writeOneRegisterDevice ( FSC0_ADS1259, 0x00 ); + ads1259_writeOneRegisterDevice ( FSC1_ADS1259, 0x00 ); + ads1259_writeOneRegisterDevice ( FSC2_ADS1259, 0x40 );//0x40 + /*Конец*/ + pga280_directCsEnd (); +} + +unsigned char test_read_reg_ads1259 ( unsigned char ch ) +{ + unsigned char out_data; + + pga280_directCsBegin ( 4, ch ); + out_data = ads1259_readOneRegisterDevice ( CONFIG0_ADS1259 ); + pga280_directCsEnd (); + + return out_data; +} + +long ads1259_readData ( unsigned char ch ) +/*Эта функция работает, надо пофиксить основную*/ +{ + long data_out; + unsigned char data[4]; + unsigned char data_ok; + pga280_directCsBegin ( 4, ch ); + ads1259_sendCommandDevice ( SDATAC_ADS1259 ); // ?????????? ????? ?????? ?????? ? ?????????? ?????? + pga280_directCsEnd (); + + ads1259_conversionON ( ch ); // ???????? ??? + // + pga280_directCsBegin (4, ch ); + ads1259_sendCommandDevice ( RDATA_ADS1259 ); // ?????????? ??????? ??????? ???????? ?????? ? ?????????? ?????? + pga280_directCsEnd (); + + do { + if ( ads1259_readyDevice ( ch ) == true ) { + + + pga280_directCsBegin ( 4, ch ); + + data[0] = SPI1MasterReadByte (); + data[1] = SPI1MasterReadByte (); + data[2] = SPI1MasterReadByte (); + data[3] = 0; + + pga280_directCsEnd (); + + data_ok = true; + break; + + } else { + data_ok = false; + } + } while ( 1 ); + + data_out = 0; + + if ( data_ok ) { + data_out += (data[0] & 0xFF) << 24; + data_out += (data[1] & 0xFF) << 16; + data_out += (data[2] & 0xFF) << 8; + data_out += (data[3] & 0xFF); + } else { + data_out = 0xFFFFFFFF; + } + + ads1259_conversionOFF ( ch ); // + + return data_out>>8; +} + +/* ***************************************************************************** + End of File + */