реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> MEGA И SPI
glebka
сообщение Sep 21 2006, 14:29
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Надо к mege прикрутить через SPI два устройства.Причем одно будет только в slave,другое будет и принимать и посылать данные.Если кто делал подобное подскажите как лучше реализовать chip select, и процедуру передвчи и получения данных.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Sep 21 2006, 14:44
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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). В даташитах довольно подробно расписанно


--------------------
Go to the top of the page
 
+Quote Post
glebka
сообщение Sep 21 2006, 15:52
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Всё прочитал, немного не понятно как MASTER MEGA будет принимать данные.Если можно поясните кодом.
Это получется каждый раз для приёма надо переводить из мастера в slave?
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Sep 21 2006, 16:18
Сообщение #4


За битами по регистрам гоняюсь
***

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



Цитата(glebka @ Sep 21 2006, 19:52) *
Всё прочитал, немного не понятно как MASTER MEGA будет принимать данные.Если можно поясните кодом.
Это получется каждый раз для приёма надо переводить из мастера в slave?

Переводить не нужно. Во время передачи данных SLAVE-устройствам MASTER принимает данные по линии MISO. Нужно только как-то развязывать выходы SLAVE-устройств, например мультиплексором, который также будет управляться сигналами SS.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
glebka
сообщение Sep 21 2006, 17:02
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 199
Регистрация: 22-06-05
Пользователь №: 6 217



Это понятно.Для этой цели собираюсь применить NC7SZ125M5.
Проблема немного в другом : отправить я смогу 16 бит, дергая cs когда надо, а как получить обратно 16 бит?
или читать два раза подряд SPDR?
Прошу прощение за непонимание.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Sep 21 2006, 17:38
Сообщение #6


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 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: производится без предупреждения
Go to the top of the page
 
+Quote Post
WHALE
сообщение Sep 21 2006, 20:17
Сообщение #7


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



А мультиплексор зачем?Если каждый из слэйвов управляется своим SS и MOSI и MISO порты настроены
как входы,то по моему можно и в лоб соединять,если эти пины больше никуда не задействованы.Или
я ошибаюсь?


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
muravei
сообщение Sep 22 2006, 06:48
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(WHALE @ Sep 22 2006, 00:17) *
как входы,то по моему можно и в лоб соединять,если эти пины больше никуда не задействованы.Или
я ошибаюсь?

Скорее всего ошибаетесь, не важно мастер-слейв , все равно один вывод будет входом, др. - выходом.
А неиспользуемые выходы, думаю, должны переводиться в 3 сост. каким- нить Чип Селект
Go to the top of the page
 
+Quote Post
Семён
сообщение Sep 22 2006, 06:50
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



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

Мультиплексор думаю, что нужен или программный или аппаратный, потому что на мастере аппаратный выход «SS» продеться использовать всегда, а выбор конкретного устройства нужно делать отдельно.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Sep 22 2006, 06:51
Сообщение #10


За битами по регистрам гоняюсь
***

Группа: Свой
Сообщений: 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: производится без предупреждения
Go to the top of the page
 
+Quote Post
muravei
сообщение Sep 22 2006, 07:41
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591



Цитата(Nanobyte @ Sep 22 2006, 10:51) *
MISO - Master In Slave Out, поэтому у всех SLAVE они всегда настроены на выход, пока разрешен SPI. Для того, чтобы они не устроили мордобой на линии и нужен мультиплексор.

Так почему бы "отдыхающим " SLAVEам самим не перевести свой выход в 3 сост. -программно?
По CS.
Go to the top of the page
 
+Quote Post
Семён
сообщение Sep 22 2006, 07:55
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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-дюемовых дискетах
Go to the top of the page
 
+Quote Post
Terminator
сообщение Sep 22 2006, 07:59
Сообщение #13


Местный
***

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



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

SS на slave как раз выполняет функцию CS и может переводить ноги в третье состояние.
Читайте доки.
Go to the top of the page
 
+Quote Post
Nanobyte
сообщение Sep 22 2006, 08:01
Сообщение #14


За битами по регистрам гоняюсь
***

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



Цитата(muravei @ Sep 22 2006, 11:41) *
Так почему бы "отдыхающим " SLAVEам самим не перевести свой выход в 3 сост. -программно?
По CS.

Если устройство имеет этот самый CS, то ничего, конечно, не мешает (АЦП, ПЗУ и др. пассивные устройства). Если-же связывать между собой два или более МК, то программно перевести направление линии на ввод SLAVE просто не успеет. MASTER никого не ждёт: установил SS и вперёд.

P.S. Да-а-а, мне стыдно blush.gif . Курить доки нужно чаще. Terminator прав, SS конечно-же будет CS-ом для SLAVE.


--------------------
Курсор влево, курсор вправо - считается хакерством. FORMAT C: производится без предупреждения
Go to the top of the page
 
+Quote Post
Семён
сообщение Sep 22 2006, 08:29
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 196
Регистрация: 19-07-06
Из: Москва
Пользователь №: 18 922



На мастере для выбора нужного слейва придется использовать 2 порта и программно их переключать. Второй вариант использовать один порт и один внешний инвертор, думаю, что подойдет инвертор даже на транзисторе. Второй вариант хуже потому, что один слейв всегда будет выбран. Если второй вариант усложнить и еще при выборе слейва использовать сигнал «ss» с мастера то такой вариант будет более правильным, но повлечет за собой использования дополнительных элементов. Вывод если на мастере есть свободные порты используйте их, если нет то второй вариант.


--------------------
Тяжелое детство - 8-битные игрушки на 8-дюемовых дискетах
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 07:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01478 секунд с 7
ELECTRONIX ©2004-2016