![Sad :(](http://roboforum.ru/images/smilies/sad.gif)
но код все равно покажи. напомню, если сам не забуду.
Добавлено спустя 8 минут 50 секунд:
млин. без второго минибота и наваять ничего не выйдет...
![Crying or Very sad :cry:](http://roboforum.ru/images/smilies/cray.gif)
но алгоритм выстроить можно. авось кому пригодится.
![]() |
roboforum.ruТехнический форум по робототехнике. |
|
|
Реклама | ||||
|
|
|||
![]() |
сли уходить от ТСОПов - все равно надо делать какую-то схему с модуляцией несущей
значит узкополосный фильтр.
Как его реализовывать?
Как отдельные биты выделять?
На МК, программно?
Скорость будет низкая.
с манчестерским кодом будет максимальная скорость порядка 1200 бит/с.
А распространенные светодиоды/фототранзисторы какую частоту несущей потянут?
Реклама | ||||
|
|
|||
![]() |
frig писал(а):с манчестерским кодом будет максимальная скорость порядка 1200 бит/с.
почему?
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'
' 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
обещанный код.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0