Vitaliy Loginov / PGA280_ADS1259

Dependents:   Chromatograph_Mobile Chromatograph_Mobile

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers PGA280ADS1259.cpp Source File

PGA280ADS1259.cpp

00001 #include "ADS1259.h"
00002 #include "PGA280.h"
00003 #include "PGA280ADS1259.h"
00004 #include <math.h>
00005 
00006 
00007 //#include "app.h"
00008 //counter; //сделать переменную видимой в этом файле
00009 void pga280_ads1259_init ( unsigned char ch ) 
00010 {    
00011     pga280_resetDevice ( ch );
00012     //ads1259_resetDevice ( ch ); //микросхема снова уходит в сброс как только сменится адрес, так как ножка RESET оключается
00013     /*Сюда вставить задержку не менее 20 мс (для того чтобы микросхема АЦП раскачалась)*/
00014     pga280_ads1259_setup_pga280(ch);
00015     wait_ms(100);    /*задержка перед настройкой АЦП*/
00016     pga280_ads1259_setup_ads1259(ch);
00017 }
00018 
00019 void pga280_ads1259_setup_pga280 ( unsigned char ch )
00020 /*Предварительная настройка PGA280 (Это инициализация по идее)*/
00021 
00022 {
00023     //PGA280_INPUT_SWITCH0.SW_A1=1;
00024     //PGA280_INPUT_SWITCH0.SW_A2=1;
00025     pga280_writeOneRegisterDevice ( PGA280_INPUT_SWITCH0_ADR, 0x18, ch ); //выбрать для работы INP2 INN2   
00026     pga280_writeOneRegisterDevice ( PGA280_INPUT_SWITCH1_ADR, 0, ch );    
00027     pga280_writeOneRegisterDevice ( PGA280_GPIO_DIR_ADR, 0b111111, ch );   //установить первые 6 выводов на выход
00028     pga280_writeOneRegisterDevice ( PGA280_CS_MODE_ADR, 0b00010000, ch );    //ECS4 в расширенном CS режиме
00029     pga280_writeOneRegisterDevice ( PGA280_SP_FUNCTION_ADR,7 , ch );//выводы GPIO0-2 используются для функции MUX
00030 }
00031 
00032 void pga280_ads1259_setup_ads1259 ( unsigned char ch )
00033 /*Настройка АЦП*/
00034 {
00035     pga280_directCsBegin ( 4, ch );
00036     ads1259_resetDevice(ch);                                        //костыльная функция
00037     wait_ms(20);                                                    //пауза для выхода на режим работы
00038     ads1259_sendCommandDevice ( SDATAC_ADS1259 );                   //установить чтение в постоянном режиме
00039     ads1259_writeOneRegisterDevice ( CONFIG0_ADS1259, 0x04 );       //0x04
00040     ads1259_writeOneRegisterDevice ( CONFIG1_ADS1259, 0x50 );       //0x50
00041     ads1259_writeOneRegisterDevice ( CONFIG2_ADS1259, 0x05 );       //0x03  400 400 сэмплов
00042     /*Настройка смещения так чтобы 7FFFFF - это нулевой уровень*/
00043     ads1259_writeOneRegisterDevice ( OFC0_ADS1259, 0x68 );//5D
00044     ads1259_writeOneRegisterDevice ( OFC1_ADS1259, 0x01 );//01
00045     ads1259_writeOneRegisterDevice ( OFC2_ADS1259, 0x00);   
00046     /*Конец*/
00047     /*Настройка масштабирования 1 к 1*/
00048     ads1259_writeOneRegisterDevice ( FSC0_ADS1259, 0x00 );    
00049     ads1259_writeOneRegisterDevice ( FSC1_ADS1259, 0x00 );    
00050     ads1259_writeOneRegisterDevice ( FSC2_ADS1259, 0x40 );//0x40
00051     /*Конец*/
00052     pga280_directCsEnd ();
00053 }
00054 
00055 unsigned char test_read_reg_ads1259 ( unsigned char ch )
00056 {   
00057     unsigned char out_data;
00058     
00059     pga280_directCsBegin ( 4, ch );    
00060     out_data = ads1259_readOneRegisterDevice ( CONFIG0_ADS1259 );    
00061     pga280_directCsEnd ();
00062     
00063     return out_data;
00064 }
00065 
00066 long ads1259_readData ( unsigned char ch )
00067 /*Эта функция работает, надо пофиксить основную*/
00068 {
00069     long data_out;
00070     unsigned char data[4];
00071     unsigned char data_ok;    
00072     pga280_directCsBegin ( 4, ch );
00073     ads1259_sendCommandDevice ( SDATAC_ADS1259 );                               // ?????????? ????? ?????? ?????? ? ?????????? ??????
00074     pga280_directCsEnd ();
00075   
00076     ads1259_conversionON ( ch );                                                // ???????? ???
00077                                                                                 //
00078     pga280_directCsBegin (4, ch );
00079     ads1259_sendCommandDevice ( RDATA_ADS1259 );                                // ?????????? ??????? ??????? ???????? ?????? ? ?????????? ??????
00080     pga280_directCsEnd ();
00081 
00082     do {
00083         if ( ads1259_readyDevice ( ch ) == true ) {
00084 
00085             
00086             pga280_directCsBegin ( 4, ch );
00087 
00088             data[0] = SPI1MasterReadByte ();
00089             data[1] = SPI1MasterReadByte ();
00090             data[2] = SPI1MasterReadByte ();
00091             data[3] = 0;
00092 
00093             pga280_directCsEnd ();
00094 
00095             data_ok = true;
00096             break;
00097       
00098         } else {
00099             data_ok = false;            
00100         }        
00101     } while ( 1 );
00102 
00103     data_out = 0;
00104 
00105     if ( data_ok ) {
00106         data_out += (data[0] & 0xFF) << 24;
00107         data_out += (data[1] & 0xFF) << 16;
00108         data_out += (data[2] & 0xFF) << 8;
00109         data_out += (data[3] & 0xFF);
00110     } else {
00111         data_out = 0xFFFFFFFF;
00112     }
00113 
00114     ads1259_conversionOFF ( ch );                                               // 
00115     
00116     return data_out>>8;
00117 }
00118 
00119 /* *****************************************************************************
00120  End of File
00121  */