Перейти к содержанию
    

Программная реализация интерфейса

Добрый вечер форумчане!!!!

Есть вот такая задачка

Необходимо программно реализовать интерфейс типа ARINC-429.

Последовательный интерфейс. По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГЦ).

Слово данных состоит из 22 разрядов -> 1...6 - адрес (1-младший бит адреса, 6 - старший бит адреса) + 7...22 - данные (7 - младший, 22 - старший).

Помогите реализовать выдачу и прием такого слова микроконтроллером. Желательно на ассемблере.

Заранее спасибо.

Если нужны уточнения пишите.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо программно реализовать интерфейс типа ARINC-429.

Обязательно программно ? Если в МК этот интерфейс не поддерживается аппаратно, то программная реализация вас не спасет. 1.25 МГц - это слишком быстро. МК почти наверняка не справится. Или справится, но ресурсов больше ни на что не хватит. Проще говоря, как ни делай, а все равно выйдет посредственно или (скорее всего) не выйдет вообще. Это типичная задачка для простой CPLD. Какая-нибудь MAX3032 + код на AHDL. За день-другой вполне справитесь ...

Изменено пользователем kovigor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А больше не чего реализовывать и не надо. Тупо прочитать слова (порядка 37 шт 22 разрядных слов), записать их в ОЗУ, и в определенный момент выкинуть все уартом в комп. Интервал между пачками (37 слов) 7*1,28 мс

 

И согласитесь говорить что не получиться не сделав даже попытки это как то не спортивно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И согласитесь говорить что не получиться не сделав даже попытки это как то не спортивно

 

Попробовать можно, запустив шустрый AVR на предельной частоте и написав код на асме. А ведь надо бы еще и обработку ошибок реализовать, хотя бы минимальную. Пробуйте,только уж больно все это сомнительно выглядит ...

Изменено пользователем kovigor

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Шустрый AVR уже выбрал - ATmega88. Предельная частота по документации 20 МГц.

Если не трудно подскажите как 22разрядный код описанный код можно первое выдать и второе принять

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Необходимо программно реализовать интерфейс типа ARINC-429.

Последовательный интерфейс. По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГЦ).

Слово данных состоит из 22 разрядов

Точно 22 ? Википедия говорит о 32... 37 принимаемых слов идут подряд без разрывов или хоть какая-та пауза есть ? Если с разрывом, то AVR на 16...20 MHz пожалуй справится - поллингом (sbis/sbic) определяем фронт тактировки, принятый бит заносим в аккумулятор (ori), при этом на организацию цикла приема времени не остается, и для каждого принимаемого бита свой цикл и своя маска ori. А если плотно, без разрыва между словами - может быть, на 20 MHz и удастся, но придется репу почесать...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это сильно урезанный и переделанный ARINC 429

разрывы между словами есть. завтра измерю точное значение (порядка десятка микросекунд.)

а если не трудно можно пример кода для приема а то не очень понятно

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Шустрый AVR уже выбрал - ATmega88. Предельная частота по документации 20 МГц.

Если не трудно подскажите как 22разрядный код описанный код можно первое выдать и второе принять

 

Первым делом - не использовать прерываний. Любое прерывание, возникшее при приеме, снесет приемнику башку. А дальше - вообще не совсем ясно, как это впихнуть в МК, поскольку, если верить описанию интерфейса, он дифференциальный и трехуровневый. Потребуются трансиверы. Они есть ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть согласующая схема на ее выходе ТТЛ сигнал Данные (Адрес+Данны) и синхросигнал

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а если не трудно можно пример кода для приема а то не очень понятно

Ну что-то типа:

b7_0:

sbis port,synch

rjmp b7_0

ori acc1,$80

b7_1:

sbic port,synch

rjmp b7_1

b6_0:

sbis port,synch

rjmp b6_0

ori acc1,$40

b6_1:

sbic port,synch

rjmp b6_1

.....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 тактов на прием одного бита - сомнительно, на грани фола

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 тактов на прием одного бита - сомнительно, на грани фола

+1 вот-вот

+ время на укладку байтов в FIFO. Да еще и в UART надо запхнуть.

 

Время между пачками скока? 1.28*7 = 8.96 милисек. Вам, чтоб выпхнуть 37 слов на скорости 115200 потребуется 37*(22/8)*1000/(115200/10) = 9.63 милисека. Нужно параллельно с приемом данных, отправлять в UART. Без прерываний параллельную отпраку не сделать нормально. С прерываниями - софтверный прием обосрётся. Выводы неутешительны. Хотя можно подвесить FTDI-232 и запулить на 1Mbit.

 

Вижу 3 варианта -

1. Внешний сдвиговый регистр, лучче CPLD, как посоветовал kovigor + UART на повышенной скорости.

2. Берите ARM

3. Cлабая надежда есть, на нестандартное использование модуля TWI - кмк, единственный шанс реализовать на AVR, без внешних схем.

PS: 3-й вариант возможен тока на TWI tinyAVR. Еслиб было 24 бита - можно было-бы использовать SPI, но это не наш случай.

PPS: Щас еще раз глянул даташиты - на tiny должно получиться c TWI. На mega TWI шибко умный, ничего не выйдет.

Изменено пользователем nk@

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

+1 вот-вот

+ время на укладку байтов в FIFO. Да еще и в UART надо запхнуть.

 

Время между пачками скока? 1.28*7 = 8.96 милисек. Вам, чтоб выпхнуть 37 слов на скорости 115200 потребуется 37*(22/8)*1000/(115200/10) = 9.63 милисека. Нужно параллельно с приемом данных, отправлять в UART. Без прерываний параллельную отпраку не сделать нормально. С прерываниями - софтверный прием обосрётся.

Как раз наоборот - ведь вывод одного набранного байта это всего лишь один out, один лишний такт (а там определенный запас есть). Хотя одним не обойтись - если данные буферизовать в SRAM, то и на сохранение по два такта на байт, и на извлечение 2 (+1 на out). Однако на 20 MHz, пожалуй, реально. Реально даже если входные пакеты идут без пауз, непрерывно. А вот уложиться в паузу 9 mS - трудновато.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По 1 проводу идут данные, по 2 проводу - синхросигнал (Частота 1,25 МГц). Слово данных состоит из 22 разрядов -> 1...6 - адрес (1-младший бит адреса, 6 - старший бит адреса) + 7...22 - данные (7 - младший, 22 - старший). Если нужны уточнения, пишите

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как раз наоборот - ведь вывод одного набранного байта это всего лишь один out

Это если у Вас скорость порта заведомо выше скорости поступления данных, но у нас как раз наоборот(1.25Mbit ! против даже 1Мbit c FT-232). Прийдется организовывать FIFO, и по прерываниям с UART забирать данные, либо полингом смотреть статус UART в основном цикле, а это несколько больше одного out :)

Однако на 20 MHz, пожалуй, реально. Реально даже если входные пакеты идут без пауз, непрерывно. А вот уложиться в паузу 9 mS - трудновато.

На 20 MHz отправить в UART нереально. Т.е. отправить реально, а принять без ошибок, на 115200 - не выйдет. Сейчас у мамок com-порты отвратительные, с подстройкой фазы все очень плохо (особенно "радуют" мамки на nForce - чуть в сторону и приехали). Потери - гарантированы. Нужно либо кварц типа 14.7456 или 18.432, либо паять FT-232 и на нестандартной скорости шпарить через "виртуальный com port".

И все-же советую tiny (например 2313) и заюзать TWI. Я уже так делал - нужно было принимать последовательности по 28 бит. Почему не использовать аппаратный сдвиговый регистр? Код найти постараюсь сегодня вечером, по крайней мере, метода проверена:)

PS: Я уже решал подобную задачу, и тут прийдется сильно поэкономить тактики :)

Изменено пользователем nk@

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...