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

 
 
 
Reply to this topicStart new topic
> Связь 2-х контроллеров по SPI, Помогите разобраться
hd44780
сообщение Dec 2 2011, 07:19
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Привет всем.

Вот решил связать 2 МК по SPI. USART, конечно, в разы удобнее и понятнее (ИМХО), но на ведущем МК он занят обменом с компом. А лепить туда монстра типа AtMega128 с 2-мя USART-ами ой как не хочется - перепаивать плату - бр-р biggrin.gif .

Теперь по делу.
Ведущий МК - ATMega16, ведомый пока AtTiny2313. Slave должен передать master-у где-то 5 байтов по команде с мастера.

1.
Почитал я тут AVR151 (SPI для 2-х и более МК с полноценным SPI интерфейсом, типа AtMega). Есть даже по-русски - http://www.microcontrollerov.net/microcont...-interfejsa-SPI
Вроде всё понятно, но не понял, где слейв читает принятые данные или посылает их. Такое ощущение, что он просто сравнивает то, что принял, с тем, что у него в памяти... Ну Бог с ним, в принципе понятно.
По ходу вопрос - если я хочу в слейве передать n байт, я должен положить в SPDR 1-й байт, потом в прерывании класть туда остальные по очереди? Я правильно понял?

2.
С ATTiny2313 другая песнь... Тут вообще ни хрена мне не понятно sad.gif ...
Нормального SPI у него нету, есть какой-то USI. Надыбал я описалово AVR319, почитал.
В ихнем примере spiX_put передаёт байт. А следующий пихать тоже в прерывании?

Режим опроса пока не интересует.

Кто-то делал обмен между Mega и этим USI? Оно нормально работает?
Или проще плюнуть на этот 2313 вместе с USI и поставить туда 8-ю мегу с нормальным SPI?

Спасибо.

Сообщение отредактировал hd44780 - Dec 2 2011, 07:20


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Dec 2 2011, 19:19
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



mega162 чем не устраивает ?
Go to the top of the page
 
+Quote Post
LexaK
сообщение Dec 3 2011, 06:58
Сообщение #3


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

Группа: Свой
Сообщений: 118
Регистрация: 3-12-06
Из: Новороссийск
Пользователь №: 23 082



Вот, может поможет. Как-то стала задача снять обмен по RS232 между хостом и устройством. Был сделан за пару часов из подручных материалов аппаратный сниффер. Под рукой оказалась: макетная плата с ATmega128 и отдельно ATTiny2313. На меге линии RX обоих UARTов были подключены к линиям RX-TX исследуемого интерфейса. Весь полученный трафик отправлялся на тини2313 через SPI. Тини2313 конвертировала SPI в RS232 для анализа на ЭВМ. О целесообразности и рациональности такого решения прошу не судить, ибо все было сделано для разовой работы. А для топикстартера там есть все, что нужно.
Прикрепленные файлы
Прикрепленный файл  Sniffer.zip ( 30.14 килобайт ) Кол-во скачиваний: 44
 
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 3 2011, 09:13
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Цитата(Павлик @ Dec 2 2011, 22:19) *
mega162 чем не устраивает ?


На место которого?
В качестве моего главного (Mega16) - нету АЦП.
Вместо 2313 - слишком мощный. Туды или 2313 или Mega8 - самое оно. Там нужен SPI, компаратор и один внешний INT для ещё одного (внешнего) компаратора.

Цитата(LexaK @ Dec 3 2011, 09:58) *
Вот, может поможет.


Спасибо. Изучаю rolleyes.gif
Вот ещё накопал - http://www.recursion.jp/avrcdc/cdc-spi.html

Сообщение отредактировал hd44780 - Dec 3 2011, 09:14


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post
AlexFTF
сообщение Dec 5 2011, 01:01
Сообщение #5


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

Группа: Свой
Сообщений: 95
Регистрация: 11-11-10
Из: Новосибирск
Пользователь №: 60 808



Цитата(hd44780 @ Dec 2 2011, 14:19) *
1.
Почитал я тут AVR151 (SPI для 2-х и более МК с полноценным SPI интерфейсом, типа AtMega). Есть даже по-русски - http://www.microcontrollerov.net/microcont...-interfejsa-SPI
Вроде всё понятно, но не понял, где слейв читает принятые данные или посылает их. Такое ощущение, что он просто сравнивает то, что принял, с тем, что у него в памяти... Ну Бог с ним, в принципе понятно.
По ходу вопрос - если я хочу в слейве передать n байт, я должен положить в SPDR 1-й байт, потом в прерывании класть туда остальные по очереди? Я правильно понял?


Если просто, то SPI представляет собой не что иное как сдвиговый регистр (тот самый SPDR). В процессе обмена данные по SPI передаются всегда в обоих направлениях, как от MASTER к SLAVE так и наоборот (от MASTER к SLAVE по линии MOSI и от SLAVE к MASTER по линии MISO). Тактирование всегда осуществляет MASTER! Поэтому, отвечая на Ваш вопрос, если Вы хотите передать из SLAVE в MASTER 1 байт, то:

1. В регистр SPDR SLAVE-устройства надо загрузить передаваемый байт;
2. Аналогичную процедуру надо сделать для MASTER;
3. Произвести обмен данными.
4. По окончании обмена данными, в регистре SPDR MASTER-устройства будет байт данных переданный от SLAVE-устройства, а в регистре SPDR SLAVE-устройства будет байт данных от MASTER.

Для передачи n байт, выше описанную процедуру необходимо повторить n раз.

Что касается USI то он совместим с SPI. Вот что пишут в datasheet: The USI Three-wire mode is compliant to the Serial Peripheral Interface (SPI) mode 0 and 1....
В общем можно смело его использовать.

Сообщение отредактировал NSTU - Dec 5 2011, 01:10
Go to the top of the page
 
+Quote Post
s_black
сообщение Dec 14 2011, 17:12
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 27-04-09
Из: Крым
Пользователь №: 48 340



Описал как это сделать и выложил исходники.
Go to the top of the page
 
+Quote Post
hd44780
сообщение Dec 14 2011, 17:37
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980



Спасибо, изучу. Я пока переехал на UART и делаю рабочий алгоритм, потом вернусь к SPI.


--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса.
(с) Мария Эдуарда
Go to the top of the page
 
+Quote Post

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

 


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


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