Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Вот...

Отправлено alho 13 апреля 2007 г. 10:33
В ответ на: Всем привет...Борюсь тут с АЦП ADS1242 уже третий день. Никак не получается обмен с ним наладить.. отправлено <font color=gray>AVK</font> 13 апреля 2007 г. 07:32

С файл:
////////////////////////////////////////////////////////////////////////////////
////
//// Registers definition
////
////////////////////////////////////////////////////////////////////////////////
enum {
setup_reg,
mux_reg,
acr_reg,
odac_reg,
dio_reg,
dir_reg,
iocon_reg,
ocr0_reg,
ocr1_reg,
ocr2_reg,
fsr0_reg,
fsr1_reg,
fsr2_reg,
dor2_reg,
dor1_reg,
dor0_reg
};

////////////////////////////////////////////////////////////////////////////////
////
//// Commands definition
////
////////////////////////////////////////////////////////////////////////////////

#define ADS_rdata 0x01
#define ADS_rdatac 0x03
#define ADS_stopc 0x0F
#define ADS_rreg 0x10 // least 4 bits - adress of register
#define ADS_wreg 0x50 // least 4 bits - adress of register
#define ADS_selfcal 0xF0
#define ADS_selfocal 0xF1
#define ADS_selfgcal 0xF2
#define ADS_sysocal 0xF3
#define ADS_sysgcal 0xF4
#define ADS_wakeup 0xFB
#define ADS_dsync 0xFC
#define ADS_sleep 0xFD
#define ADS_reset 0xFE

////////////////////////////////////////////////////////////////////////////////

#define delay_us(a,delay) a = delay*SYSCLK/8000000;\
while(--a);

void write_ADS1242(unsigned char dat) {
unsigned char data i = 8;
unsigned int data temp_del;

do {
delay_us(temp_del,1);
if (dat & 0x80) SDO = 1;
else SDO = 0;
SCL = 1;
dat <<= 1;
delay_us(temp_del,1);
SCL = 0;
} while (--i);
}

unsigned char read_byte_ADS1242() {
unsigned char data i = 8;
unsigned char dat = 0;
unsigned int data temp_del;

do {
delay_us(temp_del,1);
SCL = 1;
dat <<= 1;
delay_us(temp_del,1);
SCL = 0;
if (SDI) dat |= 0x01;
} while (--i);

return (dat);
}

unsigned long read_res_ADS1242() {
unsigned int data temp_del;
union {
unsigned char i[4];
unsigned long li;
} res;
res.i[0] = 0;

SCL = 1;
CS_TEMP1 = 0;

delay_us(temp_del,1);
write_ADS1242(ADS_rdata);
delay_us(temp_del,50);

res.i[1] = read_byte_ADS1242();
delay_us(temp_del,5);
res.i[2] = read_byte_ADS1242();
delay_us(temp_del,5);
res.i[3] = read_byte_ADS1242();

CS_TEMP1 = 1;

return(res.li);
}

void init_ADS1242() {
unsigned int data temp_del;

SCL = 1;
CS_TEMP1 = 0;

delay_us(temp_del,5);
write_ADS1242(ADS_wreg);
delay_us(temp_del,5);
write_ADS1242(0x06);
delay_us(temp_del,5);
write_ADS1242(0x02); // 0 Ku = 4
delay_us(temp_del,5);
write_ADS1242(0x01); // 1
delay_us(temp_del,5);
write_ADS1242(0x51); // 2 // <---Fosc = 7.5 Hz
delay_us(temp_del,5);
write_ADS1242(0); // 3
delay_us(temp_del,5);
write_ADS1242(0); // 4
delay_us(temp_del,5);
write_ADS1242(0xFF); // 5
delay_us(temp_del,5);
write_ADS1242(0); // 6
delay_us(temp_del,5);

write_ADS1242(ADS_selfocal);
delay_us(temp_del,250);
while(READY_TEMP);
while(!READY_TEMP);
while(READY_TEMP);
while(!READY_TEMP);
while(READY_TEMP);
while(!READY_TEMP);

CS_TEMP1 = 1;
}


void set_chan_ADS1242(unsigned char chan) {
unsigned int data temp_del;
unsigned char dat_out = 0x01;

if (chan) dat_out = 0x23;

SCL = 1;
CS_TEMP1 = 0;

write_ADS1242(ADS_wreg | mux_reg);
delay_us(temp_del,5);
write_ADS1242(0x00);
delay_us(temp_del,5);
write_ADS1242(dat_out); // 0
delay_us(temp_del,5);

CS_TEMP1 = 1;
}


h-файл
#ifndef __ADS1242_H__
#define __ADS1242_H__

extern void set_chan_ADS1242(unsigned char chan);
extern unsigned long read_res_ADS1242();
extern void init_ADS1242();
#endif

Пробуй

Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru