Бедняга, тебе проще дать, чем объяснить...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено I_Andr 01 октября 2004 г. 19:04
В ответ на: Помогите с ad7730 (пример общения с ним). отправлено ace2 01 октября 2004 г. 18:05

Для примера, установка регистра режима:

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