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

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

Вот модуль AD7714

Отправлено AlHakim 10 апреля 2007 г. 23:53
В ответ на: ну так покажи свой код отправлено DASM 10 апреля 2007 г. 23:38

unsigned char ArrayInitADC[] ={
0xff, 0xff, 0xff, 0xff, //сброс АЦП
AD_F_HIGH_REG|AD_FD0, 0x01, //Hi -filter 50 Hz (16 бит) F = Fclk/128/code; Low-filter 50 Hz (16 бит)
AD_F_LOW_REG|AD_FD0, 0x40,
AD_MODE_REG|AD_FD0, AD_SELFCAL_MOD|AD_GAIN_16 //Автокалибровка
};

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);
}


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

Ответы


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

Сообщение:

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

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

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

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