Технический форум по робототехнике.
Digit » 01 дек 2004, 00:41
setar писал(а):Боюсь вас разочаровать но в ATtiny26 нет интерфейса TWI
В этом МК есть USI - он с минимальными вмешательствами со стороны человека работает в режиме TWI. Просто в моей задаче мегу совать - больно жирно...
Виталий » 01 дек 2004, 01:11
Digit писал(а):setar писал(а):Боюсь вас разочаровать но в ATtiny26 нет интерфейса TWI
В этом МК есть USI - он с минимальными вмешательствами со стороны человека работает в режиме TWI. Просто в моей задаче мегу совать - больно жирно...
А можно пару примеров для поколений? =)
Digit » 01 дек 2004, 23:54
Э-э-э-э С примерами, наверное, будет беда, потому что я сам еще ничего с использованием USI не делал... :oops:
Где-то было описание USI... Еще на Атмеловском сайте видел. Если память не изменяет, то звалось это дело как-то так:
AVR310 - Using the USI module as a TWI master
Больше сказать ничего не могу. По крайней мере, сегодня...
Mike_MA » 07 фев 2005, 18:32
Я искренне считаю, что для Atmel лучшим решением будет интерфейс SPI который позволяет и довольно быстро общаться и выявлять свободна ли линия ....
:wink:
Змей-Горыныч » 02 мар 2005, 07:33
Mike_MA писал(а):Я искренне считаю, что для Atmel лучшим решением будет интерфейс SPI который позволяет и довольно быстро общаться и выявлять свободна ли линия ....
:wink:
Поправь, если ошибаюсь, но разве можно по SPI несколько устройств соединить? Как их выбирать? Если дополнительно отдельную линию на каждое устройство тянуть, то это не прикольно :cry:
А вот TWI (i2c) там всего две линии, не важно слолько ты устройств прицепишь к шине. Кстати здесь при добавлении нового устройства не придется менять схему. В AVR весь протокол обмена по этой шине на аппаратном уровне реализован. А если нет в младших моделях, то я видел примеры програмной его реализации.
У меня примерно та же задача, что и у автора темы, поэтому я всё-таки после размышлений долгих пришел к выводу использовать TWI для обмена данными между AVR контроллерами.
Mike_MA » 02 мар 2005, 12:02
Змей-Горыныч писал(а):Поправь, если ошибаюсь, но разве можно по SPI несколько устройств соединить? Как их выбирать? Если дополнительно отдельную линию на каждое устройство тянуть, то это не прикольно :cry:
Ты правильно заметил "... если ошибаюсь, ...".
Интерфейс SPI имеет сигнал SS который ведущий ставит в "1",а ведомый при "1" пассивно принимает данные. После передачи ведущий сбрасывает сигнал SS в "0" и линия свободна...
Digit » 02 мар 2005, 22:49
т.е. между поднятием в "1" и бросанием в "0" по SS мастер может передать адрес всем ведомым шины, а ведомые проверят адрес сами и разберутся, для кого инфа?
А сколько на такую шину можно навешать девайсов? У TWI есть ограничения, накладываемые протоколом (8-и и 10-битная адресация) и шиной (тим емкость что ли должна быть какая-то - не помню уже). А тут как?
Stepan » 16 апр 2005, 21:07
Digit писал(а):т.е. между поднятием в "1" и бросанием в "0" по SS мастер может передать адрес всем ведомым шины, а ведомые проверят адрес сами и разберутся, для кого инфа?
А сколько на такую шину можно навешать девайсов? У TWI есть ограничения, накладываемые протоколом (8-и и 10-битная адресация) и шиной (тим емкость что ли должна быть какая-то - не помню уже). А тут как?
Не совсем так. У каждого устройства есть
своя отдельная линия CS (или SS как обозвали в Атмеле)- выставлением ее в 0 у конкретного устройства мастер обращается только к нему (у всех остальных ведомых CS=1) соответственно можно съэкономить на процедуре анализа к кому конкретно обратился мастер. С другой стороны -увеличивается количество проводов- на одно устройство 4- на 2 - 5 и так далее. Ещё из плюсов- лёгкая программная реализация этого интерфейса.
AlphA » 21 апр 2005, 02:39
Есть идея, как избавить МК от анализа чужих пакетов.
На одной ЛА7, конденсаторе и резисторе можно собрать селектор начала кодовой посылки. В результате МК будут ловить только самое начало пакета, где содержится адрес приёмника. Поняв, что это не их адрес, быстренько отваливаются от шины и продолжают основную деятельность. Тот же МК, который признает адрес за свой, продолжит приём пакета до тех пор, пока сам не сочтёт, что пакет закончился.
Данное устройство представляет собой простой аналоговый интегратор + RS-триггер. Он устанавливается когда по линии синхронизации придёт удлиннёный синхроимпульс, означающий начало пакета. Далее идут короткие (нормальные) импульсы (скваженностью >3-4), тактирующие данные пакета. Сброс триггера выполняет сам МК, когда адрес будет идентифицирован как чужой. В случае обнаружения своего адреса, пакет принимается полностью, после чего так же происходит сброс триггера.
У меня есть теоритическая (частично проверенная в системах моделирования) разработка универсальной последовательной шины для обмена данными внутри робота. Шина 3-х проводная (для устройств "только на приём" нужны только 2), с логически исключёнными коллизиями. Т.е. пока ничего аппаратно не сломалось, коллизий быть не должно в принципе. Возможно построение мостов между макро-блоками с использованием дифференциальных каналов (RS-485).
setar » 21 апр 2005, 11:35
2
AlphAклассная идея!
как буду расширять уже имеющиеся платки и возникнет вопрос коммуникации - буду дёргать вас на предмет поделиться наработками
nest » 21 апр 2005, 12:36
Альфа, а это разве нельзя сделать на аппаратном уровне ? ... мне думается можно достаточно просто
и ещё плюс в пользу RS232 : можно неглядя сунуть его в комп и посмотреть, что твоится ...
для наладки оч полезно...
а с i2c ... это что то ковырять дополнительно надо, переходники, драйвераа ... не , некатолично это
Digit » 21 апр 2005, 13:11
AlphA, если не сложно, то можно подробнее и с картинками? 8)
AlphA » 21 апр 2005, 21:42
2 nest:
Непоянл, что именно сделать на аппаратном уровне? Распознавание своего адреса? Да не так уж это и просто. На рассыпухе это 3-4 доролнительных корпуса.
2 Digit:
Можно и с картинками.
- Вложения
-
- Принципиальная схема детектора начала пакета.
У МК импользуются 2 бита портов и вход внешнего прерывания.
Тактовый сигнал поступает на вход прерывания через "шлюз" ввиде элемента "И", управляемого RS-триггером. Как видно из осцилограм сигналов, первый т
- Интегратор.GIF (4.17 КиБ) Просмотров: 4103
-
- На этой картинке мы можем лицезреть тот же детектор, но ввиде виртуальной модели на ElectronicsWorkBench.
В левом нижнем углу виднеется "экран" логического анализатора. Цвет сигнала соответствует цвету провода на схеме. Синий - это тактовый сигнал поступ
AlphA » 21 апр 2005, 21:54
Sorry, подписи к картинкам оказывается, не могут быть такими длинными. Так, что продублирую их тут.
Принципиальная схема детектора начала пакета.
У МК импользуются 2 бита портов и вход внешнего прерывания.
Тактовый сигнал поступает на вход прерывания через "шлюз" ввиде элемента "И", управляемого RS-триггером. Как видно из осцилограм сигналов, первый тактовый импульс значительно длинее нормальных. За время его действия успевает зарядится конденсатор и триггер устанавливается, что позволяет тактовым импульсам проходить в МК, генерируя прерывание на обработку поступившего бита данных. Биты записываются в буфер. По накоплению полного адресного слова происходит сравнение его со "своим" адресом. Если совпало, то ничего не предпринимаем, продолжаем слушать пакет до конца (далее в заголовке пакета должна быть его длина). Если же адрес не признан за "свой", то выдаём короткий импульс на бит М порта Px, который вызвает сброс триггера и запрет поступления прерываний.
Бит N порта Px служит для приёма битов данных (как несложно догадаться).
На этой картинке мы можем лицезреть тот же детектор, но ввиде виртуальной модели на ElectronicsWorkBench.
В левом нижнем углу виднеется "экран" логического анализатора. Цвет сигнала соответствует цвету провода на схеме. Синий - это тактовый сигнал поступающий с управляющего (master) контроллера, в таком виде, какой он в проводе. Красным обозначен сигнал на входе S RS-триггера. Чёрный - это выход RS-триггера (инверсный). Пурпурный - выход slave-МК (бит M порта Px, на предыдущей картинке). Зелёному цвету соответствует тактовые сигналы, прошедшие через "шлюз", т.е. те, что попадут на вход INT slave-МК.
В правом нижнем углу картинки есть осциллограф. На нём хорошо видны процессы заряда-разряда интегрирующего конденсатора (красынй - напряжение на конденсаторе, синий - импульсы CLC от master-МК).
Буферный элемент (ввиде треугольника в разрыве красного провода перед триггером) нужен только на этапе моделирования и в реальной конструкции может быть исключён. Таким образом, мы получаем устройство из 4-х элементов "2И-НЕ", входящих в состав одной М/С К561(1561)ЛА7.
Digit » 22 апр 2005, 00:26
AlphA, спасибо! 8)
А подключение к шине такое же, как и I2C? И ограничения те же? Или как?