Цитата(shuric80 @ Apr 23 2009, 09:42)

сейчас кидаю коды чтения регистров, из даташита( 0x10....0x17). а как на аппаратном spi-счиатывать одновременно? din-можно удерживать посылая (0xff)??
Очень просто - буфер-то кольцевой. Действительно, нужно посылать единицы.
Цитата(shuric80 @ Apr 23 2009, 10:45)

так тоже не получается....что-то идет. а что нинаю. ..просьба. можете дать кусочек кода для работы с ad7730, как пример. в инете мало что нашел
С ad7730 не работал, а для AD7738 (принцип, думаю, тот же) делал примерно так:
CODE
/*--------------функция обмена байтом по SPI----------------*/
unsigned char WriteSPI(unsigned char ByteToSend)
{
unsigned char TempVariable;
BF = 0;
TempVariable = SSPBUF; // Reads from SSPBUF, ensures BF bit is clear before
SSPBUF = ByteToSend; // sending the next byte.
while(!BF); // Wait until the transmission is complete.
return SSPBUF; // The data received should be valid.
}
/*----------функция сброса внешнего АЦП-----------------*/
void Reset7738 (void)
{
CSA=0; // выбор кристалла для внешнего АЦП
DelayUs(2);
WriteSPI(0); //
WriteSPI(0xFF); //
WriteSPI(0xFF); //
WriteSPI(0xFF); //
WriteSPI(0xFF); //
CSA=1; // отключить внешний АЦП
DelayMs(1);
}
/*-------функция записи байта в регистр AD7738----------*/
/* (ADREG - адрес регистра, DATA - данные) */
void WR_to_ADC (ADREG, DATA)
unsigned char ADREG, DATA;
{
CSA=0; // выбор кристалла для внешнего АЦП
DelayUs(2);
WriteSPI(ADREG); //
WriteSPI(DATA); //
CSA=1; // отключить внешний АЦП
DelayMs(1);
}
/*-----функция чтения выбранного регистра AD7738-------*/
/* (ADREG - адрес регистра, ln - длина данных в байтах)*/
unsigned int READ_ADC (ADREG, ln)
unsigned char ADREG, ln;
{
unsigned int BUFDAT; // 16-bit data buffer
CSA=0; // выбор кристалла для внешнего АЦП
DelayUs(2);
BUFDAT=0; // очистить буфер
WriteSPI(ADREG+0x40); // установить бит чтения
BUFDAT=WriteSPI(0); // читать при низком DIN первый байт
if (ln==2) // если данные 16-разрядные
{
BUFDAT=BUFDAT<<8; // сдвинуть байт в старший
BUFDAT=BUFDAT+WriteSPI(0); // и дописать в буфер младший байт
}
CSA=1; // отключить внешний АЦП
DelayUs(2);
return BUFDAT;
}
Сообщение отредактировал Herz - Apr 23 2009, 11:50