Добрый день! Подскажите - как на С под Pic16 реализовать Slave -устройство по шине I2C. Для работы мастера есть встроенная библиотека, а как Slave сделать?
Последний раз редактировалось NorthStar 01 окт 2010, 21:46, всего редактировалось 1 раз.
подскажите - как на С под Pic16 реализовать Slave -устройство по шине I2C. Для работы мастера есть встроенная библиотека, а как Slave сделать?
"Си" - это простоя язык программирования. Встроенная библиотека для мастера где? в каком компиляторе или среде разработки?
I2C изначально МультиМастерная среда. Любой Мастер может "передавать" и "принимать". Если есть нормальная бибилиотека для Мастера, то ее можно и для Слейва использовать, применив только функцию приема "прием".
Я использую MikroC. Я вроде описание читал и из него не увидил, что там много мастеровможет быть. Как я понял алгоритм - мастер опрашивает модули, а Рабы отвечают и сами инициировать передачу не могут.
Если внимательнее вчитались бы то там написано примерное следующее: "... эта библиотека для протокола I2C с одним мастером для контроллера серии PIC16F..."
Для начала стоило ознакомиться с самим протоколом и на физическом и на логическом уровнях. Почитайте хотя бы: http://ru.wikipedia.org/wiki/I2C
Там рисунок кстати не совсем правильный приведен, а точнее частный случай, когда мастер один а ведомых много.
В тексте есть фраза перед ПРИМЕНЕНИЕМ: "...В любом случае, по спецификации шины все разрабатываемые устройства должны сбрасывать логику шины при получении сигнала СТАРТ или повторный СТАРТ и подготавливаться к приему адреса.
Тем не менее основные проблемы с использованием I2C шины возникают именно из-за того, что разработчики, «начинающие» работать с I2C шиной не учитывают того факта, что ведущий (часто — микропроцессор) не имеет монопольного права ни на одну из линий шины...."
Т.е. бибилиотека в МикроСи не предназначена и не учитывает возможность работы в шине нескольких мастеров. Ну не стали разработчики мучаться, хотя не так сложно проверку дописать.
На самом деле slave устройство проще сделать чем мастер. Достаточно проверять линию "клока" и после "старта" читать линию "дата" и т.п. Арбитраж и обработку коллизий делать не нужно. А вот нормальный мастер должен все это уметь