ads1259

Dependents:   Chromatograph_Mobile Chromatograph_Mobile

PGA280ADS1259.cpp

Committer:
vitlog
Date:
2020-06-08
Revision:
0:f9ba28ab9f4c
Child:
1:533ce2102fcc

File content as of revision 0:f9ba28ab9f4c:

#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
 */