Цитата
1. Добавить на последнем устройстве конденсаторы на SDA, SCL к земле.
А зачем? Фронты "зализать"?
Попробую внятней.
Цитата
При подключении к SDA (либо SCL) еще одного проводника для ds1621 виснет на старте
1.Проводник - значит внесена помеха. Обычно это дает о себе знать при высоком сопротивлении нагрузки. Если в шину качается нормальный ток(а именно он задается резистором), наводки незаметны на фоне полезного сигнала.
2.Зависание само по себе. Обусловлено тем простым фактом, что I2C это не SPI. В SPI можно вытолкнуть данные и, если все физически исправно, быть увереннным, что они зайдут в слэйв. I2C - протокол адресуемый, протокол с командами и квитированием.Т.е. если помеха наложится на SPI пострадают отдельные биты, если на I2C - последовательность адресов, команд и подтверждений скорее всего будет нарушена. Т.е. вся транзакция пройдет неправильно.
Как делается обмен в АВР?
Выполняется команда (отсылаются данные) -> получается подтверждение -> по регистру статуса смотрится результат -> принимается решение: продолжение/выход/рестарт.
Обычно во всех конченных библиотечках, поставляемых с компиляторами получение подтверждения делается в цикле
Код
while(TWI_SR & some_const)
Если состояние номер some_const по каким-то причинам не прошло, контроллер будет крутится в бесконечном цикле. Чтобы избежать такой ситуации, надо обрабатывать все возможные коды возврата или (что лучше и проще) делать все на прерываниях. Только прерывания в библиотечку не уложишь, поэтому придется либо писать самому, либо портировать чужой код.
P.S. В который раз убеждаюсь, что CV это костыли, которые подкупают мнимой простотой, а впоследствии заводят на серьезные грабли.