Собрал, подключил. данные не идут. осциллографом вижу что они работают (картинка на I/O выводе каждую секунду меняется, битики видны, генераторы тоже работают), но уровень сигнала в восемь раз меньше необходимого. Думаю AVR-ка именно поэтому их не видит. Игрался портами, пинами, особого разнообразия нет, не помогает.
Читаю секунды с DS так:
void WriteByte_DS130x(unsigned char Byte);
unsigned char ReadByte_DS130x(void);
unsigned char GetSec_DS130x(void)
{
unsigned char Sec;
PORT_DS130x_CE = 1;
WriteByte_DS130x(0x00);
Sec = ReadByte_DS130x();
PORT_DS130x_CE = 0;
return Sec;
}
void WriteByte_DS130x(unsigned char Byte)
{
unsigned char i;
DDR_DS130x_IO = 1;
for (i = 0; i < 8; i++)
{
PORT_DS130x_IO = Byte & 0x1;
PORT_DS130x_SCLK = 1;
PORT_DS130x_SCLK = 0;
Byte >>= 1;
}
}
unsigned char ReadByte_DS130x(void)
{
unsigned char i,Byte,TMP;
DDR_DS130x_IO = 0;
PORT_DS130x_IO = 1;
for (i = 0; i < 8; i++)
{
PORT_DS130x_SCLK = 1;
TMP |= PIN_DS130x_IO;
PORT_DS130x_SCLK = 0;
Byte |= (TMP << 7);
Byte >>= 1;
}
return Byte;
}
PORT_DS130x_IO, DDR_DS130x_IO … соответствующие порты AVR.
Пишу на IAR.
При чтении байта ставил и PORT_DS130x_IO = 1; и PORT_DS130x_IO = 0; Пробовал ставить задержки при установки клоков. Результат не меняется.
Что это может быть?