Не получается найти общий язык с АЦПехой AD7795... =(
Вроде и все последовательности с времянками соблюдаю, а простейшие ID (как признак связи) читать не получается.
Выкладываю куски кода, прошу помочь найти основную ошибку.
ЗЫ. Пишу на WinAVRе, чуть почистил код перед выпиской сюда...
Код
void ADC_SendByte( char Byte)
{
uint8_t mask;
for (mask=0x80; mask; mask>>=1 )
{ // +++++++++++++++++++++ Shift out Bits loop
ADC_Set_CLK(0);
_delay_us(100);
ADC_Set_DIN( Byte & mask);
_delay_us(100);
ADC_Set_CLK(1);
_delay_us(100);
}; // --------------------- Shift out Bits loop
ADC_Set_DIN(1);//после каждой передачи поднять Din
ADC_Set_CLK(1);
};
uint8_t ADC_GetByte( uint8_t *BytePtr)
{
uint8_t mask;
uint8_t Byte = 0;
for (mask=0x80; mask; mask>>=1 )
{ // +++++++++++++++++++++ Shift out Bits loop
ADC_Set_CLK(0);
_delay_us(100);
if ( ADC_Get_DOUT() )
Byte |= mask;
_delay_us(100);
ADC_Set_CLK(1);
_delay_us(100);
}; // --------------------- Shift out Bits loop
ADC_Set_CLK(1);
*BytePtr = Byte;
return(1);
};
void ADC_Init( )
{
uint8_t ID;
// ................................... Reset all ADCs
ADC_SendByte( 0xFF );
ADC_SendByte( 0xFF );
ADC_SendByte( 0xFF);
ADC_SendByte( 0xFF );
///................................... Reset all ADCs
_delay_us(500);
ADC_SendByte(0x60);
ADC_GetByte(&ID);
tstw("ID=",ID); //форматный вывод результата
}
На выходе получаю в лучщем случае 0.
ЗЫ. Поиск юзал, темы читал, как вписано в ДШ делал, но не получается считать даже ID, про преобразования молчу...
глянул тут
http://electronix.ru/forum/index.php?showt...6&hl=ad7792 но не понял в каком смысле дернуть 32 раза?
32 раза моргнуть циклом 1/0 ногой Din?(32 еденицы, 32 нуля в итоге)