Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
////////////////////////////////////////////////////////////////////////////////
////
//// 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
Пробуй