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

 
 
> приемник/передатчик ARINC 429, ктонить делал?
klen
сообщение Nov 26 2008, 19:19
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



свалилось на мою голову перед новым годом ...
жеско объявлено - микросхемы интерфейсы ARINC 429 стоят дорого, поэтому и не мечтай.

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

mega64, 14Мгц

приемник кроме слушания шины, должен фильтровать пакеты и зажигать светодиоды

это ваще можно сделать? а то я уже чуствую что без асма в преоываниях непролезет с такой скоростью ..
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Nov 27 2008, 00:29
Сообщение #2


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(klen @ Nov 26 2008, 19:19) *
это ваще можно сделать? а то я уже чувствую что без асма в прерываниях не пролезет с такой скоростью

Не надо паниковать раньше времени. Сделать можно, и даже на си. Как сделать приём. Подключаете сигнал к ноге INT0 и для простоты ещё к какому-нибудь пину (можно и одной ногой обойтись). По приходу прерывания настраиваете таймер1 на инверсные 437 тактов (1,5*То), таймер1 работает от клоков проца. По прерыванию от таймера сдвигаете 32-битное слово, опрашиваете входную ногу, запоминаете принятый бит, затем настраиваете таймер на 292 (длительность бита То). Ну, про передачу и так понятно. По такому алгоритму у вас проц будет стоять 90% времени.

Единственная возможная проблема может возникнуть - стабильность частот прм-прд должна быть порядка 0,7%.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
galjoen
сообщение Nov 27 2008, 07:29
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(=GM= @ Nov 27 2008, 03:29) *
Не надо паниковать раньше времени. Сделать можно, и даже на си. Как сделать приём. Подключаете сигнал к ноге INT0 и для простоты ещё к какому-нибудь пину (можно и одной ногой обойтись). По приходу прерывания настраиваете таймер1 на инверсные 437 тактов (1,5*То), таймер1 работает от клоков проца. По прерыванию от таймера сдвигаете 32-битное слово, опрашиваете входную ногу, запоминаете принятый бит, затем настраиваете таймер на 292 (длительность бита То). Ну, про передачу и так понятно. По такому алгоритму у вас проц будет стоять 90% времени.

Единственная возможная проблема может возникнуть - стабильность частот прм-прд должна быть порядка 0,7%.

Вместо INT0 лучше использовать вход захвата 16-ти разрядного таймера. Тогда в программе можно будет прерывания запрещать, и это на приём влиять не будет. А потом этот-же вход опрашивать по тому-же таймеру. Но приёмник, выполненный таким способом (хоть INT0, хоть захват), будет иметь крайне плохую помехоустойчивость. Будет запускаться от короткой помехи, и при наличии помехи в середине принимаемого бита примет его неверно.

Если-уж экономить процессорное время и писать на C, то сигнал приёмника нужно на входы захватов обоих 16-ти разрядных таймеров завести (не помню как они у меги номеруются). Один настроить на передний, другой на задний фронт, прерывания разрешить от обоих. Запускать оба таймера нужно синхронно (железо позволяет), считать они должны тактовую частоту. При таком подключении без проблем можно весь сигнал восстановить при минимальных затратах процессорного времени. В т.ч. на C. Я таким образом сделал анализатор шины RS-485. Скорость, чётность, кол-во стоповых - всё на лету определялось. Байты потом восстанавливались. А здесь задача не в пример легче - формат уже известен.
В первом посте я имел ввиду, что даже просто по таймеру сделать можно. С мажоритарной проверкой каждого бита. В этом случае программа существенно проще. Если на асме, то 200 слов, не больше, и проще, чем на C. Но процессор загружать конечно сильнее будет, чем вариант с входами захвата таймеров.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 27 2008, 12:58
Сообщение #4


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(galjoen @ Nov 27 2008, 07:29) *
Вместо INT0 лучше использовать вход захвата 16-ти разрядного таймера. Тогда в программе можно будет прерывания запрещать, и это на приём влиять не будет. А потом этот-же вход опрашивать по тому-же таймеру. Но приёмник, выполненный таким способом (хоть INT0, хоть захват), будет иметь крайне плохую помехоустойчивость. Будет запускаться от короткой помехи, и при наличии помехи в середине принимаемого бита примет его неверно.

Вход захвата ничем не лучше INT0. Челу не надо определять скорость, он её и так знает. К тому же, ресурсов проца потребуется больше.

Что касается помехоустойчивости rs232. Не хотелось бы затевать полемику, но, похоже, это становится общепринятым заблуждением, что якобы можно как-то улучшить устойчивость rs232 к помехам. Последовательный интерфейс rs232 НЕ помехоустойчив ПРИНЦИПИАЛЬНО, независимо от того, делаете вы трёхкратное мажорирование или нет. Да хоть согласованный фильтр ставьте.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post



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

 


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


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