Цитата(WHALE @ Aug 12 2007, 21:10)

Милейший,вы что,издеваетесь?Илм действительно не понимаете,что пишете полный бред?Как может севшая батарея RTC повесить шину!?Ведь при включении питания девайса RTC должны перейти с бата-
рейного питания на рабочее.Имхо,у вас или диод на рабочее питание неправильно стоит или его нет во-
все.
Так-что вы меня пока што убедили тока в старой истине-умелыми руками мона и столб уронить.
Цитата(singlskv @ Aug 12 2007, 20:26)

Открою Вам небольшой секрет на TWI_BUS_ERROR необходимо
отвечать выставлением TWSTO в TWCR в 1 , это сбрасывает ошибку шины.
Подробнее не смотрел, это просто сразу бросилось в глаза.
Так что, куририте даташиты внимательней, а потом обвиняйте производителя в глючности.
Похоже на наличие перекоса в сторону избытка ума за счет дефецита вежливости.
Претворим бред в реальность.
0. Если суслика не видно, это не значит, что его нет. Так же и глюки.
1. Как подвесить TWI у Меги8/16/32 ( я думаю и другие также):
а)создать прецедент ошибки - можно просто не впаивать слэйв.
б)Сгенерировать старт-условие и передать адрес.
в)При этом модуль, есс-но выдаст ошибку, которую мы, закурировав до дыр даташит, пытаемся
сбросить, сгенерировав стоп-условие.
г)Если не подождать примерно 12-15 мС, и попытаться опять выйти на шину, модуль навечно
зависнет условии старт-стоп. Если подождать указанное время, то модуль отвисает, и с ним можно работать.
Теперь о том, как разряженная батарейка завешивает систему.
PCF8563, в отличии от PCF8583 умеет работать на 400 кГц. Но в схему вкралась ошибка, ирезуки поставили для скорости 100кГц, т.е 10 или 15к, создав тем самым прецедент для ошибок. Ситема была построена следующим образом: PCF вырабатывает для проца внешнее прерывание 1/64 сек, а проц считывает по шине данные. При считывании данных ошибка не обрабатывалась. После считывания данных анализировался флаг валидности данных и, в случае обнаружении сбоя данных ( что означало бы, что был сбой по питанию), производилась попытка проинициализировать PCFку. В этом месте анализ ошибки производился и, в случае ее возникновения, производились прописаные в даташите действия и повторная попытка записи. В этом месте все остальные действия притормаживались, поскольку залить 16 байт на скорости 400кбит не должно было быть заметно.
Результат:
На шине периодически возникали ошибки но, поскольку повторное старт условие генерировалось не чаще 15 мС, то модуль успевал отвисать и ошибка не проявлялась. Ошибки могли возникать( и, скорее всего возникали) в процессе запуска первого и наладки последующих. Но эти ошибки не были перехвачены - при запуске проги, если прога повисла, это нормальная ситуация, а наладчики, может пару раз и удивились, но включив-выключив устройство пару раз PCFка инициализировалась и зависоны прекращались. После того, как у пользователей разрядилась батарейка, после каждого включения потребовалась инициализация со всеми вытекающими.
Ну вот, надеюсь что бред, претворенный в реальность не вызовет ни у кого ночных кошмаров о неожиданном подвисании модуля TWI в устройстве, находящемся от вас на расстоянии нескольких сот километров.
З.Ы. А сравнивать PIC24 или dsPIC33 с АВРами, по моему, некорректно - железяка совсем другого уровня. Как и ARM. PICи больше подходят для работы с сигналами, у них для этого все есть, а АВРы и ARMы хороши для применений в UI - здесь они даже удобнее PICов.