Добрый вечер,
у меня такая проблемка: mega8 и tiny2313 соединены по I2C. У меги8 интерфейс реализован на модуле TWI (Master), а у tiny2313 на USI(Slave). Оба МК работают от внешних кварцев на 8МГц.
Сделал я небольшой протокол по которому мега 8 отсылает байт tiny2313. Он принимает этот байт и решает че делать в зависимости от него: включить или выключить светодиод на одной из ног. Программа которую я зашил в мегу должна была в бесконечном цикле отправлять сначала байт включить светодиод, ждать секунду, затем отправлять выключить светодиод, потом опять ждать секунду и тд.
Проблема состоит в том что когда я все запустил, светодиод загорался и погасал в рэндомном порядке, так как практически через раз мастер пропускал ACK, слэйв пропускал или принимал с ошибками байт от мастера (все это я наблюдал на отладочных светодиодах). Вообщем мучался я мучался часа 4, все перепробовал и вот в конце решил сменить частоту шины со 100 Кгц до 400КГц. Врезультате все заработало.
Может кто объяснить почему мне помогла смена частоты? Неужели это все из за обрезанного по возможностям USI?
|