Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
unsigned char ArrayRdADC[] = {AD_MODE_REG|AD_FD0, AD_NOR_MOD|AD_GAIN_16, AD_DATA_REG|AD_RD|AD_FD0, //нормальный режим + чтнеие 2-х байт
AD_MODE_REG|AD_FD1, AD_NOR_MOD|AD_GAIN_16, AD_DATA_REG|AD_RD|AD_FD1};
//unsigned char ArrayRdADC[] = {AD_MODE_REG|AD_FD0, AD_SELFCAL_MOD|AD_GAIN_16, AD_DATA_REG|AD_RD|AD_FD0, //Автокалибровка + чтнеие 2-х байт
// AD_MODE_REG|AD_FD1, AD_SELFCAL_MOD|AD_GAIN_16, AD_DATA_REG|AD_RD|AD_FD1};
unsigned int volatile ADC_Data;
//#define pADC_Din P2IN,0x10 //input Данные Input from ADC
//#define pADC_Dout P2OUT,0x08 //output Данные output To ADC
//#define pADC_Clk P1OUT,0x01 //output Синхронизация
//#define pADC_Drdy P2IN,0x04 //input конец преобразования
void delay() // Software delay
{
unsigned char i;
for (i=0;i<0x05;i++);
}
void SpiSend(unsigned char *pShiftData, unsigned char CntShiftByte)
{
unsigned char CntShiftBit;
unsigned char ShiftData;
do{
CntShiftBit = 8;
ShiftData = *(pShiftData++); //помещаем в ShiftData первое элемент массива
do{
if(ShiftData & 0x80) // off(pCS_I);
on(pADC_Din); // for (i=0;i<16;i++)
else // ProcShiftBit();
off(pADC_Din); // on(pCS_I);
off(pADC_CLK); // ShiftData = 0x0F00;
ShiftData = ShiftData << 1;
delay();
on(pADC_CLK);
}while (--CntShiftBit);
ShiftData++;
}while(--CntShiftByte);
on(pADC_Din);
on(pADC_CLK);
}
unsigned int Spi16bit(unsigned char CntShiftBit)
{
unsigned char i;
unsigned int result=0;
// on(pADC_Din);
for(i=CntShiftBit;i>0;i--){
off(pADC_CLK);
result <<= 1;
delay();
on(pADC_CLK);
if (signal(pADC_Dout)) result |= 1;
}
// on(pADC_CLK); // ShiftData = 0x0F00;
// on(pADC_Din);
return result;
}
unsigned long Spi24bit(unsigned char CntShiftBit)
{
unsigned char i;
unsigned long result=0;
// on(pADC_Din);
for(i=CntShiftBit;i>0;i--)
{
off(pADC_CLK);
result <<= 1;
delay();
on(pADC_CLK);
if (signal(pADC_Dout)) result |= 1;
}
// on(pADC_CLK); // ShiftData = 0x0F00;
// on(pADC_Din);
return result;
}
//
// производим первоначальную инициализацию АЦП AD7714
//
void AdcInit(void)
{
SpiSend((unsigned char*)&ArrayInitADC[0], sizeof(ArrayInitADC)); // производим инициализацию
}
//
// Чтение данных (16бит из АЦП)
//
unsigned int AdcRead(void)
{
// off(pADC_Din);
if ((EventFlags & fADCNumCh) == 0)
pShiftData = &ArrayRdADC[2]; // указатель на массив инициализации ADC диф. канал 1
else
pShiftData = &ArrayRdADC[5]; // указатель на массив инициализации ADC диф. канал 2
SpiSend(pShiftData, 1); // производим запись в рег.обмена
return Spi16bit(2*8);
}
unsigned long AdcRead24(unsigned char IndxReg, unsigned char CntBit)
{
SpiSend(&IndxReg, 1); // производим запись в рег.обмена
return Spi24bit(CntBit); // чтение зарошенных данных
}
void SendToRegADC(unsigned char TypeReg, unsigned char* Value, unsigned char CntByte)
{
SpiSend(&TypeReg, 1);
SpiSend(Value, CntByte);
}