|
Для примера, установка регистра режима:
//#define ADC_UNIPOLAR // закоментируйте, если режим биполярный
#define ADC_HIREF // закоментируйте, если опора низкая
#define ADC_AC // закоментируйте, если режим по постоянному току
#define ADC_CHOP // закоментируйте, если не нужен chop
//#define ADC_DELAY 0 // закоментируйте, если не используется задержка модулятора
// Communications Register
#define ADC_STATUS_REG 0x00
#define ADC_DATA_REG 0x01
#define ADC_MODE_REG 0x02
#define ADC_FILTER_REG 0x03
#define ADC_DAC_REG 0x04
#define ADC_OFFSET_REG 0x05
#define ADC_GAIN_REG 0x06
#define ADC_TEST_REG 0x07
#define ADC_SINGLE_WRITE 0x00
#define ADC_SINGLE_READ 0x10
#define ADC_START_READ 0x20
#define ADC_STOP_READ 0x30
// Status Register
#define ADC_NOREADY 0x80
#define ADC_NOSTEADY 0x40
#define ADC_STANDBY 0x20
#define ADC_NOREF 0x10
// Mode Register
#define ADC_RANGE_10 0
#define ADC_RANGE_20 1
#define ADC_RANGE_40 2
#define ADC_RANGE_80 3
#define ADC_IDLE 0
#define ADC_AUTO_START 1
#define ADC_SINGLE_START 2
#define ADC_POWER_DOWN 3
#define ADC_ZERO_SELF_CAL 4
#define ADC_FULL_SELF_CAL 5
#define ADC_ZERO_SYS_CAL 6
#define ADC_FULL_SYS_CAL 7
//--------------------------------------------------------
void adc_setMode (uchar mode)
{
uchar modereg[2];
WATCHDOG();
#ifdef ADC_UNIPOLAR
modereg[0] = 0x11;
#else
modereg[0] = 0x01;
#endif
#ifdef ADC_HIREF
modereg[1] = 0x80;
#else
modereg[1] = 0x00;
#endif
switch (mode)
{
case ADC_IDLE: break;
case ADC_AUTO_START: modereg[0] |= 0x20; break;
case ADC_SINGLE_START: modereg[0] |= 0x40; break;
case ADC_POWER_DOWN: modereg[0] |= 0x60; break;
case ADC_ZERO_SELF_CAL: modereg[0] |= 0x80; break;
case ADC_FULL_SELF_CAL: modereg[0] |= 0xA0; break;
case ADC_ZERO_SYS_CAL: modereg[0] |= 0xC0; break;
case ADC_FULL_SYS_CAL: modereg[0] |= 0xE0; break;
}
switch (prm.adc.range)
{
case ADC_RANGE_10: break;
case ADC_RANGE_20: modereg[1] |= 0x10; break;
case ADC_RANGE_40: modereg[1] |= 0x20; break;
case ADC_RANGE_80: modereg[1] |= 0x30; break;
}
adc_setCs (0);
spi_write (ADC_SINGLE_WRITE | ADC_MODE_REG); // Communications Register !!!
spi_write (modereg[0]); // данные
spi_write (modereg[1]); // данные
adc_setCs (1);
}
Если и здесь не разберешься, то извини
E-mail: info@telesys.ru