|
MEGA И SPI |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
Sep 21 2006, 14:44
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(glebka @ Sep 21 2006, 22:29)  Надо к mege прикрутить через SPI два устройства.Причем одно будет только в slave,другое будет и принимать и посылать данные. Если другое будет и посылать и принимать данные, а инициатором обмена будет МЕГА, то оно тоже имеет право быть Slave... Цитата(glebka @ Sep 21 2006, 22:29)  Если кто делал подобное подскажите как лучше реализовать chip select, и процедуру передвчи и получения данных. Возможно, удобнее Chip Select для двух устройств реализовать с помощью двух свободных пинов на МЕГЕ, если она МАСТЕР и свободных пинов хватает. Если в качестве СЛЭЙВОВ используется тоже МЕГИ, можно в них задействовать пины SS (Slave Select). В даташитах довольно подробно расписанно
--------------------
|
|
|
|
|
Sep 21 2006, 16:18
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(glebka @ Sep 21 2006, 19:52)  Всё прочитал, немного не понятно как MASTER MEGA будет принимать данные.Если можно поясните кодом. Это получется каждый раз для приёма надо переводить из мастера в slave? Переводить не нужно. Во время передачи данных SLAVE-устройствам MASTER принимает данные по линии MISO. Нужно только как-то развязывать выходы SLAVE-устройств, например мультиплексором, который также будет управляться сигналами SS.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Sep 21 2006, 17:38
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(glebka @ Sep 21 2006, 21:02)  Это понятно.Для этой цели собираюсь применить NC7SZ125M5. Проблема немного в другом : отправить я смогу 16 бит, дергая cs когда надо, а как получить обратно 16 бит? или читать два раза подряд SPDR? Прошу прощение за непонимание. Регистры SPDR MASTER и SPDR SLAVE образуют общий кольцевой регистр сдвига, поэтому если SLAVE ничего не записывал в свой SPDR, MASTERу вернётся предыдущий отправленный им байт. Если ваш алгоритм SLAVE-устройства предусматривает какую-либо обработку принятых данных, то лучше, наверное, начать считывать данные MASTER-ом после отсылки данных SLAVE-у путём передачи каких-то дополнительных байтов/команд. Я делаю это таким образом: 1. Отправляю команду/данные (несколько байтов) SLAVE-устройству. 2. Отправляю в цикле байт запроса 0xFD (можно любой другой), и читаю принятые от SLAVE данные. Если ответный байт равен 0xFD, то SLAVE ещё не готов. 3. Как только SLAVE подготовил данные для ответа, он записывает в свой SPDR байт готовности к ответу 0x80 (можно и другой, не совпадающий с 0xFD) и по приёму следующего байта от мастера, подтаскивает в SPDR следующие байты ответных данных. 4. MASTER, продолжая посылать запросы, вычитывает нужное число байтов из SLAVE. Может, написал сложно и запутанно, но этот способ оказался наиболее удобным и устойчивым.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Sep 22 2006, 06:50
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Цитата(WHALE @ Sep 22 2006, 00:17)  А мультиплексор зачем?Если каждый из слэйвов управляется своим SS и MOSI и MISO порты настроены как входы,то по моему можно и в лоб соединять,если эти пины больше никуда не задействованы.Или я ошибаюсь? Мультиплексор думаю, что нужен или программный или аппаратный, потому что на мастере аппаратный выход «SS» продеться использовать всегда, а выбор конкретного устройства нужно делать отдельно.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Sep 22 2006, 06:51
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(WHALE @ Sep 22 2006, 00:17)  А мультиплексор зачем?Если каждый из слэйвов управляется своим SS и MOSI и MISO порты настроены как входы,то по моему можно и в лоб соединять,если эти пины больше никуда не задействованы.Или я ошибаюсь? MISO - Master In Slave Out, поэтому у всех SLAVE они всегда настроены на выход, пока разрешен SPI. Для того, чтобы они не устроили мордобой на линии и нужен мультиплексор. А сигнал SS - это не CS, выводы в третье состояние он не переводит.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Sep 22 2006, 07:55
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
Когда писал программу для Mege8 ,она была мастером, пока не сконфигурировал SS как выход передачи информации небыли не в AVR STUDIO не на железе. Одним этим сигналом выбрать два устройства невозможно, поэтому и потребуется дополнительный сигнал выбора слейва. Цитата(muravei @ Sep 22 2006, 11:41)  Цитата(Nanobyte @ Sep 22 2006, 10:51)  MISO - Master In Slave Out, поэтому у всех SLAVE они всегда настроены на выход, пока разрешен SPI. Для того, чтобы они не устроили мордобой на линии и нужен мультиплексор.
Так почему бы "отдыхающим " SLAVEам самим не перевести свой выход в 3 сост. -программно? По CS. ИМХО: отдыхающими слейвы быть не могут, потому, как не знают когда мастер им что-то захочет передать.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
|
Sep 22 2006, 07:59
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(Nanobyte @ Sep 22 2006, 13:51)  ... MISO - Master In Slave Out, поэтому у всех SLAVE они всегда настроены на выход, пока разрешен SPI. Для того, чтобы они не устроили мордобой на линии и нужен мультиплексор. А сигнал SS - это не CS, выводы в третье состояние он не переводит. SS на slave как раз выполняет функцию CS и может переводить ноги в третье состояние. Читайте доки.
|
|
|
|
|
Sep 22 2006, 08:01
|

За битами по регистрам гоняюсь
  
Группа: Свой
Сообщений: 457
Регистрация: 24-04-06
Из: Таганрог
Пользователь №: 16 446

|
Цитата(muravei @ Sep 22 2006, 11:41)  Так почему бы "отдыхающим " SLAVEам самим не перевести свой выход в 3 сост. -программно? По CS. Если устройство имеет этот самый CS, то ничего, конечно, не мешает (АЦП, ПЗУ и др. пассивные устройства). Если-же связывать между собой два или более МК, то программно перевести направление линии на ввод SLAVE просто не успеет. MASTER никого не ждёт: установил SS и вперёд. P.S. Да-а-а, мне стыдно  . Курить доки нужно чаще. Terminator прав, SS конечно-же будет CS-ом для SLAVE.
--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
|
|
|
|
|
Sep 22 2006, 08:29
|
Частый гость
 
Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922

|
На мастере для выбора нужного слейва придется использовать 2 порта и программно их переключать. Второй вариант использовать один порт и один внешний инвертор, думаю, что подойдет инвертор даже на транзисторе. Второй вариант хуже потому, что один слейв всегда будет выбран. Если второй вариант усложнить и еще при выборе слейва использовать сигнал «ss» с мастера то такой вариант будет более правильным, но повлечет за собой использования дополнительных элементов. Вывод если на мастере есть свободные порты используйте их, если нет то второй вариант.
--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|