Собрал, подключил. данные не идут. осциллографом вижу что они работают (картинка на 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; Пробовал ставить задержки при установки клоков. Результат не меняется.
Что это может быть?
|