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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Soft RS-232, Ещё два UARTa. Програмно.
viktor4152
сообщение Nov 18 2008, 17:21
Сообщение #1





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Всем доброго времени суток.
Есть такая задумка, может кто чего посоветует.
Существует канал Компьютер=(RS-232)=Радиомодем------Радиомодем=(RS-232)=аппарат1.
Скорость обмена - 9600. (8N1)
Рядом с аппаратом1 стоит аппарат2 и может связываться с пультом дистанционного управления по тому же RS-232 с той же скоростью, через тот же радиомодем. Так вот, суть проблемы. Как можно эти 2 канала RS-232 объеденить в один, и пустить их по одному радиоканалу, пусть даже с увеличением скорости обмена ло 19200? Естественно но противоположном конце их потом нужно как-то разделить. Одним словом, как можно организовать два полноценных канала связи RS-232 через один канал на радиомодемах?
Есть задумка поставить Tiny2313, аппаратный UART будет работать на радиомодем 19200 (9N1), а через INT0 и INT1 отрабатывать прерывания по спаду (Приёмные линии програмных UARTов). Если принял байт от INT1, например, то последний бит в аппаратный UART устанавливать, и наоборот. На том конце также просто отделить. Весь пит-стоп в том, что не знаю, как мне предупредить одновременную передачу запроса с аппарата1 и ответа с аппарата2. И наоборот.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 18 2008, 17:51
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Можно сделать в лоб: платку с тремя UART, два на устройства, третий (на учетверённой скорости) - на модем. Платка всё, что принимает от устройств, валит в модем. И наоборот. В канале модема идут пары байтов - номер канала - байт из канала. Как-то так. Ну или байт-стаффинг сделать (это лучше), тогда скорость нужна только чуть больше чем удвоенная. Придётся модернизировать софт на PC. Как-то так...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 18 2008, 19:56
Сообщение #3


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Дежавю! http://electronix.ru/forum/index.php?showtopic=55002
Вам задали уже все наводящие вопросы.
Go to the top of the page
 
+Quote Post
rezident
сообщение Nov 18 2008, 21:09
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(SysRq @ Nov 19 2008, 00:56) *
Дежавю! http://electronix.ru/forum/index.php?showtopic=55002
Вам задали уже все наводящие вопросы.
У меня тоже возникло дежавю biggrin.gif Думаю, проблема в том, что ту тему топикстартер (сдуру? wink.gif ) закрыл, а открыть снова уже не может. Он. не является членом группы "свои".

Топкстартер, не нужно дублировать вопрос. Пишите что УЖЕ сделали? Какие решения приняли? Что не получилось? и т.д.
Go to the top of the page
 
+Quote Post
VDG
сообщение Nov 19 2008, 00:28
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193



Да ничего он сдуру не закрыл. Всё у него работает. Он тупо сделал копию, так как не услышал то, что хотел услышать. А ответ там один - НИЗЬЗЯ.

ЗЫ. из-за этого "чудака" с его копией у меня аж идиотская мысль в голове мелькнула что я в "День сурка" попал.

Сообщение отредактировал VDG - Nov 19 2008, 00:31


--------------------
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 20 2008, 00:25
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Или сделать одно из устройств роутером
Код
[Комп] -----[ У1 ]-----[ У2 ]


или использовать отдельный концентратор с тремя портами.

Код
[Комп]-------[ Концентратор ]
                 |    |
                У1    У2
Go to the top of the page
 
+Quote Post
=GM=
сообщение Nov 20 2008, 21:01
Сообщение #7


Ambidexter
*****

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



Цитата(viktor4152 @ Nov 18 2008, 17:21) *
Одним словом, как можно организовать два полноценных канала связи RS-232 через один канал на радиомодемах?

Вот ещё один вариантик. С обеих сторон ставите по тиньке АТTiny2313. Каждая тинька имеет 3 полноценных уарта, скажем программный и два аппаратных. Передача по радиоканалу в обе стороны идёт на удвоенной скорости 19200, остальные - 9600. Разделение байтов на каналы - по биту паритета, в первом канале он 0, а во втором - 1


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
viktor4152
сообщение Nov 21 2008, 18:23
Сообщение #8





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Всё правильно Вы поняли, VDG. Но впредь попросил бы в мою сторону всевозможные высказывания (по поводу чудака, например) исключить. Я действительно не услышал там чего хотел, и решил, что в тот раздел, видимо, заглядывают всё больше компьютерщики, и что я неверно выбрал раздел. (Я здесь новенький, и сразу не разобрался со всеми ветками.) И там всё это изложил. И извинился, что отнял впустую у людей время. После я нашёл нужную ветку, и скопировал сюда свой вопрос. Всё просто. У того, кто там внимательно читал, не должно было возникнуть дежа-вю.
По поводу наводящих вопросов: Обмен пакетами, запрос-ответ, адресации, видимо нет, т.к. изначально весь тракт работает на одно конкретное устройство. Но не факт. Это чисто моё предположение, т.к. что такое адресация, я не знаю. Могу только предположить.
По времени реакции тоже не знаю, и влезть ни в устройство, ни в софт на стороне запроса не могу. Есть только RS-232 на разъёмах, и обмен через радиомодемы. Но в процессе экспериментов, думаю, довольно быстро узнаю, о времени реакции. Для начала, видимо просто попробую принять 9600 и перенаправить всё на радиомодем.
Смогут ли радиомодемы сами разобраться, кому когда принимать данные, а когда передавать, и можно будет всё кидать в кучу на UART или всё это нужно будет разгребать програмно, и чётко отслеживать последовательнось данных, вот в чём вопрос. Не будет ли одновременной передачи с двух сторон?
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 22 2008, 02:12
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(viktor4152 @ Nov 21 2008, 20:23) *
Смогут ли радиомодемы сами разобраться, кому когда принимать данные, а когда передавать, и можно будет всё кидать в кучу на UART или всё это нужно будет разгребать програмно, и чётко отслеживать последовательнось данных, вот в чём вопрос. Не будет ли одновременной передачи с двух сторон?

Одновременной передачи не будет, точнее будет, но модемы сами разберутся как эту коллизию обойти.

А вот разгребут ли другие устройства это вопрос. Сами - наврятли. Все зависит от протокола по которому комп общается с этими устройствами..

Цитата
Обмен пакетами, запрос-ответ, адресации, видимо нет, т.к. изначально весь тракт работает на одно конкретное устройство. Но не факт.

Адресация - аналогия почты, пишете письмо, указываете адрес доставки. Письмо доставят абоненту. Нет адресации - это все равно, что отправить конверт без адреса получателя, такой конверт либо выбросят либо зачитают для всех. Так вот без адресации ваша задумка работать не будет.
Go to the top of the page
 
+Quote Post
viktor4152
сообщение Nov 22 2008, 16:00
Сообщение #10





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Другие устройства - это моя Tiny2313, которая будет формировать адресацию, если это можно так назвать, 9-м битом (после 8 бит данных) или битом чётности, если только бит чётности не влияет на работу модемов. Ежели байт данных пришёл на Tiny2313 от аппарата1, то устанавливаем 9-й бит при передаче через UART, или устанавливаем бит чётности. На приёмном конце это дело отслеживаем и направляем на нужные аппараты. Как-то так.
Go to the top of the page
 
+Quote Post
defunct
сообщение Nov 22 2008, 19:05
Сообщение #11


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(viktor4152 @ Nov 22 2008, 18:00) *
Другие устройства - это моя Tiny2313, которая будет формировать адресацию, если это можно так назвать, 9-м битом (после 8 бит данных) или битом чётности, если только бит чётности не влияет на работу модемов. Ежели байт данных пришёл на Tiny2313 от аппарата1, то устанавливаем 9-й бит при передаче через UART, или устанавливаем бит чётности. На приёмном конце это дело отслеживаем и направляем на нужные аппараты. Как-то так.

Не надо никаких 9-х бит. ибо это гонево. Модемы точно не поймут, т.к. работают с 8-ми битными кадрами. Просто добавьте вперед один байт адреса - это и будет адресация.
Go to the top of the page
 
+Quote Post
viktor4152
сообщение Nov 23 2008, 13:17
Сообщение #12





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Да, такой вариант рассматривался, но я его исключил сразу, т.к. для сохранения всех временных интервалов (ну более-менее) придётся учетверить скорость передачи. А это увеличит вероятность ошибки. А формат данных на конкретно моих модемах может выбираться как 8-ми, так и 9-ти битный. И наличие бита чётности и длину стопового бита тоже можно выбрать при кофигурации модема.
Так что, думаю, осталось только намалевать программку и всё это дело испытать. Две платы уже слепил. Только процы взять осталось и кварцы (нет в магазинах в нашем солнечном Чуркестане, говорят недели через 2-3 будет).

Сообщение отредактировал viktor4152 - Nov 23 2008, 13:21
Go to the top of the page
 
+Quote Post
viktor4152
сообщение Jan 7 2009, 14:03
Сообщение #13





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Люди добрые, не дайте сойти с ума, помогите, кто чем может. Уже неделю бьюсь на программой, не работает. Все фьюзы прописал правильно, если в программе написать отправку в UDR конкретного байта, то этот байт на компе я и принимаю. Питание от трансформаторного блока питания через кренку. Урезал уже всё, запустить бы для начала линию софтового приёмника (INT0) с последующей передачей на UART. А в приведённой программе софтовым UARTом я принимаю какую-то кашу. И не пойму, где я ошибаюсь.
Вход соф UARTa - PD2 - Определение стартового бита - прерывание по спаду INT0. Тут же запускается таймер T/C0 на 1,5 бита. Каждый обработчик прерывания по таймеру (по совпадению) начинается с записи в OCR0A числа, соответствующего длительности 1 бита. По окончанию приёма принятый байт нужно передать в аппаратный UART.
Прикрепленные файлы
Прикрепленный файл  Proga.txt ( 4.77 килобайт ) Кол-во скачиваний: 80
 
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 7 2009, 14:22
Сообщение #14


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Почему 1,5 бита?
Надо:
0) По прерыванию задать 0,5 бита задержку и инициализировать таймер0 (в общем, остальное нормально)
1) Первое прерывание по Тайм0 - проверить линию на "все_еще_0", если да - то устанавливать уже полновесный 1 бит. Ессно, все наоборот - сначала устанавливаем таймера, потом принимаем решения. smile.gif
Если у нас FAIL - поставить все на ИНТ0 обратно. То же касается и проверки стоп-битов.
Go to the top of the page
 
+Quote Post
viktor4152
сообщение Jan 7 2009, 20:07
Сообщение #15





Группа: Новичок
Сообщений: 14
Регистрация: 8-11-08
Пользователь №: 41 476



Всё равно не работает. Принимается что-то рядом, но всё равно не то. Иногда приходит по два байта. Логично предположить, что либо контролер делает что-то ещё между прерываниями от таймера (где-то же он берёт эти лишние биты), либо я неправильно посчитал временные интервалы. Непонятно.
Go to the top of the page
 
+Quote Post

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

 


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


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