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

 
 
> SPI по двум ногам в одну сторону между двумя 328, можно ли железно?
iiv
сообщение Jul 10 2012, 11:01
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

есть два контроллера atmega328p, соединенные двумя ногами через оптокоплер. Оптокоплер направлен только в одну сторону, пусть с первого на второй контроллер. Мне надо непрерывно передавать с первого на второй пакет фиксированной длины в 16 байт. Чем чаще, тем лучше, не реже 0.5мс.

Процессоры работают на одинаковой, но не синхронизированной частоте.

Приемник занят другой работой.

Попробовал посылать так:

по первой ноге по прерыванию приходит команда начала, дальше с частотой 4мГц сыплю на вторую ногу свой пакет.

Так как есть CRC, есть небольшая избыточность, то все работало. Единственно, при начале прерывания приемник должен был 32мкс только принимать данные. Раньше я мог это себе позволить, а сейчас уже нет.

Хочется чего-то аппаратного. Понятно - SPI. Но у него 3 ноги, а у меня только две закоммутировано. Реально ли как-то организоввать протокол передачи на двух ногах или это для таких процессоров не реально? Очень не хочется ставить 3-4 опторазвязанные ноги...

Спасибо

ИИВ
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
редактор
сообщение Jul 12 2012, 07:30
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Цитата
При необходимости, можно и двумя обойтись: MOSI и SCK.


Совершенно верно, если передача идет в одну сторону, двух ног достаточно. Одна - тактовая (SCK), вторая - данные (MOSI).


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
SmarTrunk
сообщение Jul 12 2012, 09:35
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 406
Регистрация: 22-05-11
Из: Москва
Пользователь №: 65 195



А (вопрос начинающего) как же без CS (SS)? Ведь этот сигнал начинает и заканчивает передачу? Передатчику-то все равно, а вот приемнику же надо указать начало и конец передачи? Разве для аппаратного SPI это не обязательно?
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jul 12 2012, 10:02
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(SmarTrunk @ Jul 12 2012, 13:35) *
А (вопрос начинающего) как же без CS (SS)?

Можно на этот сигнал "повесить" нужный уровень. При таком решении можно "отгрести геморрою" при помехах и плохой согласованности работы master и slave... Рекомендовать такое решение можно, только в крайнем случае - если уж "деваться" некуда...
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 12 2012, 20:35
Сообщение #5


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

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(Палыч @ Jul 12 2012, 14:02) *
.... плохой согласованности работы master и slave...

Там с согласованностью и так может возникнуть проблема, если slave не успеет обработать принятый байт за 0.5ms. Не говоря уже о втором.И что-то мне подсказывает , что для ее решения потребуются все 4 ноги SPI
Или уж в самом крайнем случае три. Хотя топикстартера мы похоже уже потеряли. laughing.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jul 12 2012, 20:54
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ILYAUL @ Jul 12 2012, 23:35) *
Там с согласованностью и так может возникнуть проблема, если slave не успеет обработать принятый байт за 0.5ms.

ms? или us?
Если ms, то сложно не успеть на 16МГц.
Если us, то можно и не успеть, но в прицыпе можно справиться: за 32 команды можно как-нибудь прочитать данные - прерывание ведь совсем короткое:
Код
unsigned char *ptr;
#pragma vector=SPI_STC_vect
__interrupt void SpiRxCIsr()
{
*ptr++=SPDR;
}


Цитата(ILYAUL @ Jul 12 2012, 23:35) *
Не говоря уже о втором.И что-то мне подсказывает , что для ее решения потребуются все 4 ноги SPI Или уж в самом крайнем случае три.

Чем добавочные ноги улучшат ситуацию?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- iiv   SPI по двум ногам в одну сторону между двумя 328   Jul 10 2012, 11:01
- - Палыч   Цитата(iiv @ Jul 10 2012, 15:01) Хочется ...   Jul 10 2012, 11:09
|- - iiv   Цитата(Палыч @ Jul 10 2012, 16:09) Может ...   Jul 10 2012, 11:19
- - Палыч   Цитата(iiv @ Jul 10 2012, 15:19) забыл ск...   Jul 10 2012, 11:48
|- - maksimp   Цитата(Палыч @ Jul 12 2012, 14:02) Можно ...   Jul 12 2012, 18:36
- - ILYAUL   Он может такое делать ,чего-то там указывать. Посм...   Jul 12 2012, 09:44
- - Plain   Цитата(iiv @ Jul 10 2012, 14:01) SPI. Но ...   Jul 12 2012, 19:51
- - ILYAUL   Цитатаms? или us?У него мс. Про тактовую Atmega мо...   Jul 12 2012, 21:51
|- - _Артём_   Цитата(ILYAUL @ Jul 13 2012, 00:51) Про т...   Jul 12 2012, 22:45
|- - ReAl   Цитата(ILYAUL @ Jul 13 2012, 00:51) Слово...   Jul 14 2012, 10:19
|- - SmarTrunk   С одновибратором - это интересное решение. Если у ...   Jul 14 2012, 10:43
|- - iiv   Во-первых, всем огромное спасибо, что не оставили ...   Jul 30 2012, 21:01
- - des00   а чем софтовый UART не подходит? во времена аврок ...   Jul 14 2012, 11:34
- - SmarTrunk   Но ведь программно реализованный интерфейс загружа...   Jul 14 2012, 13:01


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

 


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


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