Я так понимаю время задержки между тактами значения не имеет. Главное чтобы оно было больше минимального.
Когда программа получает АСК, пока SCL в "1" ACK никуда не денется до тех пор пока SCL не станет "0"?
Есть шаг №2. Читаю с регистров 0. Пошли часы)
Не получается записать в регистры новые значения.
текущий программа для записи:
Код
void i2c_tx_soft(unsigned char byte)
{
unsigned char count;
RTC_DATA_DIR_SET;
if(i2c_error_soft)
return;
for(count=0;count<8;count++)
{
if(byte&0x80)
RTC_DATA_SET;
else
RTC_DATA_CLR;
RTC_SCL_UP;
delay_ms(5);
RTC_SCL_DOWN;
delay_ms(5);
byte<<=1;
}
RTC_DATA_DIR_CLR;
RTC_SCL_UP;
delay_ms(5);
while(in_sda());
delay_ms(5);
RTC_SCL_DOWN;
delay_ms(5);
RTC_DATA_DIR_SET;
}
Вызов ее вот отсюда
Код
void rtc_set_time(unsigned char hours, unsigned char minutes, unsigned char seconds)
{
i2c_start_soft();
i2c_tx_soft(DS1338_ADDR|WR);
i2c_tx_soft(0);
i2c_tx_soft(dec2bcd(seconds));
i2c_tx_soft(dec2bcd(minutes));
i2c_tx_soft(dec2bcd(hours));
i2c_stop_soft();
}
void rtc_set_date(unsigned char date, unsigned char month, unsigned int year)
{
i2c_start_soft();
i2c_tx_soft(DS1338_ADDR|WR);
i2c_tx_soft(3);
i2c_tx_soft(dec2bcd(rtcTime.day));
i2c_tx_soft(dec2bcd(date));
i2c_tx_soft(dec2bcd(month));
i2c_tx_soft(dec2bcd(year));
i2c_stop_soft();
}
Сообщение отредактировал Pavel_Bor - Jul 8 2011, 12:11