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

 
 
> 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
Ответов
ILYAUL
сообщение Jul 12 2012, 21:51
Сообщение #2


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

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



Цитата
ms? или us?
У него мс. Про тактовую Atmega молчок. Прерывание , как таковое , это ещё не вся обработка . Что там с ним делают дальше и сколь долго нет инфы. Зато есть инфа
Цитата
...сыплю... пакет.

Слово пакет подразумевает не один байт. Так , что slave надо ещё в эти 0.5мс (стиль автора) принять пакет неизвестной длины. Аппаратный SPI может "за раз" принять два байта.
Цитата
Чем добавочные ноги улучшат ситуацию?

SS - активирует работу аппаратного SPI. (Задача то сделать аппаратный) Ну в крайнем случае можно и отказаться и поискать другой путь. CLK- без комментов
MOSI MISO - это ( по моему мнению , лень ведь было написать ИМХО biggrin.gif ) единственное , что может синхронизировать работу мастера и slave т.к slave может одновременно ,с так некстати попыткой мастера отослать ему данные, вернуть ему код неготов . И мастер уйдёт на второй круг. Тем самым дать slave timeout. А slave даже и не узнает , что там "долбится" мастер , пока не разрешит своё прерывание SPI и не изменит код в буфере обмена на готов. Т.е не отвлёчется на этого .... мастера.


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

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
ReAl
сообщение Jul 14 2012, 10:19
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(ILYAUL @ Jul 13 2012, 00:51) *
Слово пакет подразумевает не один байт. Так , что slave надо ещё в эти 0.5мс (стиль автора) принять пакет неизвестной длины.
Там рядом со словом "пакет" есть слова "фиксированной длины 16 байт".

iiv, я правильно понял, что прибито гвоздями только число линий в интерфейсе, а с платой можно и поиграться?
Тогда можно поставить одновибратор с перезапуском (в простейшем случае состоящий из диода+резистора+конденсатора), который пачку импульсов SCK растянет в длинный SS.
Если правильно выбрать CPOL/CPHA, всё будет хорошо. Для устранения проблемы байтовой сихронизации достаточно будет гарантировать паузу между байтами больше времени выдержки одновибратора. Можно — между пакетами, внутри пакта все байты пойдут одной пачкой, если успевать кормить SPI на передаче, синхронизм врядли успеет куда-то деться, а успеет — на то CRC.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
iiv
сообщение Jul 30 2012, 21:01
Сообщение #4


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

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



Во-первых, всем огромное спасибо, что не оставили в беде и обсуждаете - я как раз отлаживал это все по-старинке, но, пока это ни к чему хорошему не привело.

У меня две атмеги 328, обе на 16МГц тактовой. Оптокоплер - быстрый, должен до 100МБит тянуть, то есть такт можно по нему посылать, но я так не делал.

Данные с посылщика я пока группировал по 16байт. Могу меньше, даже в 8байт с байтовым CRC можно вписаться.

Проблемы в том, что
1. посыльщик изредка перезагружается...
2. иногда глючит оптокоплер, наверное его пробивает sad.gif
3. приемник сильно занят другой работой,
4. время отправки посылки тоже очень важно, то есть важно не договориться о том, что посылаем каждую милисекунду, а, что посылщик шлет обычно два раза в милисекунду, но изредка, может послать когда захочет, и приемник должен принять.

Пока я делал так, получаю на одну ногу прерывание, дальше по другой ноге софтверный SPI c 4МГц тактовой, все можно уложить в 16мкс, но, для приемника даже 16мкс - очень критично, он не может в произвольный момент остановиться и сказать все, я только слушаю.

Цитата(ReAl @ Jul 14 2012, 15:19) *
iiv, я правильно понял, что прибито гвоздями только число линий в интерфейсе, а с платой можно и поиграться?


да, у приемника можно хоть все SPI-ные ноги куда-то пристроить. Сильно больше 4-х ног у меня нет, линий - только 2, прибиты гвоздями сквозь толстенную коробку с трансформаторным маслом sad.gif

Цитата(ReAl @ Jul 14 2012, 15:19) *
Тогда можно поставить одновибратор с перезапуском (в простейшем случае состоящий из диода+резистора+конденсатора), который пачку импульсов SCK растянет в длинный SS.
Если правильно выбрать CPOL/CPHA, всё будет хорошо. Для устранения проблемы байтовой сихронизации достаточно будет гарантировать паузу между байтами больше времени выдержки одновибратора. Можно — между пакетами, внутри пакта все байты пойдут одной пачкой, если успевать кормить SPI на передаче, синхронизм врядли успеет куда-то деться, а успеет — на то CRC.


идейно, спасибо, буду пробовать, может получится.
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
- - редактор   ЦитатаПри необходимости, можно и двумя обойтись: M...   Jul 12 2012, 07:30
|- - SmarTrunk   А (вопрос начинающего) как же без CS (SS)? Ведь эт...   Jul 12 2012, 09:35
|- - Палыч   Цитата(SmarTrunk @ Jul 12 2012, 13:35) А ...   Jul 12 2012, 10:02
|- - maksimp   Цитата(Палыч @ Jul 12 2012, 14:02) Можно ...   Jul 12 2012, 18:36
|- - ILYAUL   Цитата(Палыч @ Jul 12 2012, 14:02) .... п...   Jul 12 2012, 20:35
|- - _Артём_   Цитата(ILYAUL @ Jul 12 2012, 23:35) Там с...   Jul 12 2012, 20:54
- - ILYAUL   Он может такое делать ,чего-то там указывать. Посм...   Jul 12 2012, 09:44
- - Plain   Цитата(iiv @ Jul 10 2012, 14:01) SPI. Но ...   Jul 12 2012, 19:51
|- - _Артём_   Цитата(ILYAUL @ Jul 13 2012, 00:51) Про т...   Jul 12 2012, 22:45
|- - SmarTrunk   С одновибратором - это интересное решение. Если у ...   Jul 14 2012, 10:43
- - des00   а чем софтовый UART не подходит? во времена аврок ...   Jul 14 2012, 11:34
- - SmarTrunk   Но ведь программно реализованный интерфейс загружа...   Jul 14 2012, 13:01


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

 


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


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