roboforum.ru

Технический форум по робототехнике.

ИК и CSMA/CD - простой и дешевый метод связи

В разделе рассматриваются вопросы информационного обмена в робототехнике.
Аппаратный уровень, протоколы.

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение frig » 28 янв 2009, 15:39

это не то... :( в случае с полноценным множественным доступом каждый может начать передачу каждому. а так еще должен быть некий "активный монитор" который будет всем рулить. это уже маркерный доступ.

но код все равно покажи. напомню, если сам не забуду.

Добавлено спустя 8 минут 50 секунд:
млин. без второго минибота и наваять ничего не выйдет... :cry:
но алгоритм выстроить можно. авось кому пригодится.
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение blindman » 28 янв 2009, 15:49

2frig: как ты себе в общем представляешь такую систему? Если уходить от ТСОПов - все равно надо делать какую-то схему с модуляцией несущей,, значит узкополосный фильтр. Как его реализовывать? Как отдельные биты выделять? На МК, программно? Скорость будет низкая.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение frig » 28 янв 2009, 16:16

сли уходить от ТСОПов - все равно надо делать какую-то схему с модуляцией несущей


естественно.

значит узкополосный фильтр.


да, фильтр. только на счет сильно узкополосности.. не знаю.

Как его реализовывать?

а хоть даже и аппаратно. такой себе аналоговый фильтр.
Как отдельные биты выделять?


кодировать манчестерским кодом а потом выделять его точно также как он обрабатывается при разборе rc5.
На МК, программно?


код разбирать - да. фильтровать, пожалуй, нет.

Скорость будет низкая.


низкая это дело тоже относительное очень. просто разбирать манчестерский код будет достаточно быстро. имхо.

уходить от тсопов это программа максимум. она позволит модулировать другой частотой и защититься от распространенных помех. да и 36кГц - мало, имхо.

Добавлено спустя 13 минут 45 секунд:
хм. почитал про ирду - там немодулированный сигнал вообще :shock:
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение blindman » 28 янв 2009, 16:26

36 мало однозначно. с манчестерским кодом будет максимальная скорость порядка 1200 бит/с. А распространенные светодиоды/фототранзисторы какую частоту несущей потянут?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение frig » 28 янв 2009, 16:31

с манчестерским кодом будет максимальная скорость порядка 1200 бит/с.

почему?
А распространенные светодиоды/фототранзисторы какую частоту несущей потянут?


этого не скажу. не думаю, что там будут критические ограничения. в конце концов можно брать приемо-передатчики ирды, там до 16 мбит описано.

а вообще связь через com порты на ик работает, и даже встречал проект 10 Мбит ethernet через ИК. правда на столе, но как показатель верхнего предела - вполне.
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение blindman » 28 янв 2009, 16:38

frig писал(а):
с манчестерским кодом будет максимальная скорость порядка 1200 бит/с.

почему?

Ну я прикинул примерно. В манч. коде минимальное время, на которое может быть включен диод - половина времени передачи одного бита. Это время для ТСОПа должно быть не менее 10 периодов несущей (примерно - зависит от модели, но порядок такой). Время в течение которого несущая должна отключена - минимум 14 периодов. Отсюда получаем время передачи бита - 28 периодов несущей. 36000/28 = 1285
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение frig » 28 янв 2009, 16:47

хе. я подумал, что ты про обработку контроллером. так понятно, что на 36кГц сильно не разогнаться. но опробовать-то вполне можно!

да и для некоторых задач даже этой скорости хватит. особенно если стоить это будет как светодиод и тсоп.

Добавлено спустя 4 минуты 42 секунды:
а вот еще есть. пускай и не совсем по теме, но 10Мбит оптика. Атмосферный оптический канал. На сколько я знаю - некоторое их количество было построено и эксплуатируется.

но нам то 10мбит совсем не впало, еще и на какие-то такие космические расстояния. это я для вселения уверенности в возможность реализации. :D
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение EdGull » 28 янв 2009, 23:38

обещанный код.
он очень сырой.
Код: Выделить всёРазвернуть
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' Minibot beacon code file.
'
' Правила поведения маяка:
' 1. Маяк слушает эфир все время.
' 1. Во время ответа прием сигналов маяку запрещен.
' 2. При получении адресного запроса маяк отвечает немедленно на запрашиваемой
'    мощности.
' 3. При получении широковещательного запроса (адрес 00000) маяк отвечает
'    с задержкой равной (20 мс * (<номер мяка> - 1)) на запрашиваемой мощности.
'
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' История изменений:
'
' 10/03/2008   ЭГ: Оригинал. Таблица мощностей ответа.
' 10/03/2008   СФ: Задержка для широковещательного адреса.
'                  Запрет приема во время передачи
' 11/03/2008   СФ: Исправлен формат ответа при широковещательном запросе.
' 12/03/2008   СФ: Вставлена рабта с WatchDog. Включение TSOP.
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' План днйствий:
' 1.+11/03/2008 Проверка работоспособности при запрете приема при передаче
' 2.+11/03/2008 Организовать прием по прерыванию.
' 3.+12/03.2008 Перевод МК в режим пониженного энергопотребления.
' 4. 12/03/2008 Проверка работоспособности маяка.
'
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

' generated. Take care that the chip supports all fuse bytes.
$prog &HFF , &HAE , &HD7 , &H00

' Заголовок файла для кристалла
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 2400

' Адрес маяка
Const Adress = &B00001000

' Задержка при адресном ответе
Const Waittime = 20 *(adress - 1)

' Конфигурация пина С.0 для инфракрасного светодиода
Config Pinc.0 = Output : Ir_led Alias Portc.0

Dim A1 As Byte                                              ' Переменная для хранения адреса маяка
Dim P1 As Byte                                              ' Переменная для хранения команды
Dim Tmp_input As Byte                                       ' Буфер для временного хранения посылки
Dim Flag As Byte                                            ' Флаг присутствия символа в буфере

' Конфигурация пина для включения питания ТСОП
Config Pinb.1 = Output : Tsop_power Alias Portb.1
Tsop_power = 0

' Конфигурируем АЦП для измерения значения напряжения батареи
Config Adc = Single , Prescaler = Auto , Reference = Internal

'Конфигурируем WatchDog
Config Watchdog = 512

' Ниже следует отладочное сообщение в RS-232 порт
Print "start beacon"

Ucsrb.6 = 0

Do

' SF: Next string is for power saving
'   Gosub _beacon_wakeup
'
'   ' Опрос ТСОПа осуществляем 5 раз
'   For Dim I = 0 To 5 Step

   ' Остальные действия выполняем, если в буфере есть символ
   Flag = Ischarwaiting()
   If Flag = 1 Then

      ' Получаем байт с ТСОПа. Он подвешен на USRAT порт на линию приема.
      Tmp_input = Inkey()

      ' Ниже следует отладочное сообщение в RS-232 порт
      If Tmp_input > 0 Then Print Bin(tmp_input)

         A1 = Tmp_input And &B11111000

         ' Принятый символ для данного маяка
         If A1 = Adress Or A1 = 0 Then

            ' Если это широковещательный запрос, задержать ответ на заданное время
            ' и вставить адрес для ответа.
            If A1 = 0 Then
               Waitms Waittime
               Tmp_input = Tmp_input Or Adress
            End If

            ' Выделяем запрашиваемое значение мощности
            P1 = Tmp_input And &B00000111

            Ucsrb.4 = 0                                     ' Запрещаем прием данных на время передачи
            Gosub _out_ir                                   ' Отвечаем
            Ucsrb.4 = 1                                     ' Разрешаем прием данных

            ' Ниже следует отладочное сообщение в RS-232 порт
            Print "Adress-" ; Bin(a1) ; " Power-" ; Bin(p1)


         End If

      Tmp_input = 0

   End If

' SF: Next string is for power saving

'   Next

'   Gosub _beacon_sleep

Loop


' Процедура погружения маяка в сон
_beacon_sleep:
   ' Запускаем Watchdog и выключаем ТСОП
   Tsop_power = 0
   Start Watchdog
   ' Переводим маяк в режим пониженного энергопитания.
   Powerdown
Return


' Процедура пробуждения маяка
_beacon_wakeup:
   ' Останавливаем Watchdog и включаем ТСОП
   Stop Watchdog
   Tsop_power = 1
Return


' Процедура вывода сообщения через ИК диод
_out_ir:
   Waitms 250
   Ucsra.6 = 1
   Loadadr Tmp_input , X
   ld r16 , x
   !Out Udr , R16
   While Ucsra.6 = 0
      If Pind.1 = 0 Then
         Gosub Power_ir
      End If
   Wend
Return

' Процедура модуляции сигнала частотой 38kHz с установкой мощности
Power_ir:
If P1 = &B00000001 Then                                    '5%
   Ir_led = 0
   Waitus 80
   Ir_led = 1
   Waitus 76
Elseif P1 = &B00000010 Then                                '25%
   Ir_led = 0
   Waitus 18
   Ir_led = 1
   Waitus 15
Elseif P1 = &B00000011 Then                                '50%
   Ir_led = 0
   Waitus 16
   Ir_led = 1
   Waitus 12
Elseif P1 = &B00000100 Then                                '100%
   Ir_led = 0
   Waitus 12
   Nop : Nop
   Ir_led = 1
   Waitus 8
   nop
End If
Return


' Таблиица мощности излучения ИК диода. Принцип ШИМ.
Power_100:                                                  '38 KHz
   Ir_led = 0
   Waitus 12
   Nop : Nop
   Ir_led = 1
   Waitus 8
   nop
Return

Power_75:
   Ir_led = 0
   Waitus 14
   Ir_led = 1
   Waitus 10
Return

Power_50:
   Ir_led = 0
   Waitus 16
   Ir_led = 1
   Waitus 12
Return

Power_25:
   Ir_led = 0
   Waitus 18
   Ir_led = 1
   Waitus 15
Return

Power_10:
   Ir_led = 0
   Waitus 21
   Ir_led = 1
   Waitus 17
Return

Power_5:                                                    ' KHz
   Ir_led = 0
   Waitus 80
   Ir_led = 1
   Waitus 76
Return
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение frig » 29 янв 2009, 10:33

обещанный код.


спасибо. а код который маяками рулит? это ж как я понимаю - код маяка?
frig
 
Сообщения: 1640
Зарегистрирован: 12 фев 2007, 12:25
Откуда: Днепр

Re: ИК и CSMA/CD - простой и дешевый метод связи

Сообщение EdGull » 29 янв 2009, 12:34

там передающая-принамющая часть такая же
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Пред.

Вернуться в Коммуникации

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2