Описание бибилиотеки:
The Arduino programming language Reference, organized into Functions, Variable and Constant, and Structure keywords.
www.arduino.cc
setClock() -меняет частоту. Но это все тыканье.
Надо вот как проверить: включить устройство дома, подключить к пк по USB и посмотреть будет ли так зависать. Если нет, то проблема скорее всего в питании. Если да, то хорошо, можно использовать Serial и монитор порта для отладки.
Если открыть пример I2C сканера (Wirescan), то там есть такой кусок кода:
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0){
Serial.printf("I2C device found at address 0x%02X\n", address);
nDevices++;
} else if(error != 2){
Serial.printf("Error %d at address 0x%02X\n", error, address);
}
Он проверяет на доступность устройство с указанным адресом.
В начале все хорошо работает, значит достаточно перед получением данных проверить устройство. Если все ок, то выводить ничего не надо, достаточно выводить при ошибке.
Далее если ошибка выключай Wire как в моем примере, сделай паузу в 200 мс, включай и еще паузу в 200 мс. Далее опять проверь кодом из сканера. Если опять нет устройства - ошибка.
Еще если часы не отвечают, то если на них есть пин ресет, то можно его дернуть.
Если часы ответили, то получаешь время, проверь его на валидность , т.е. Время должно быть больше времени компиляции и не больше скажем времени компиляции плюс 10-20 ЛЕТ! Если нет - ошибка модуля, его надо перезапускать или менять.
Так же можно выводить полученное время в монитор порта, но не каждую секунду, а только после получения для визуального контроля.