Радиоканал - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Радиоканал (Rt6-433)
Радиоканал
dimmer Дата: Пт, 21.02.2014, 02:08  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Всем привет.
Появилась необходимость в удаленном управлении прибором.
Можно,конечно, пойти по пути наименьшего сопротивления и купить китайский модуль, но хочется самому догнать.
Имею передатчик RT6-433, с подключением вопросов нет. А вот с отправкой на него данных - проблема.
Даже не знаю с чего начать спрашивать, поэтому сформулирую так.

Быть может кто-то делал подобное и готов поделиться опытом или написать код  (если не трудно - чисто символическое, в качестве благодарности, могу мальца на телефон закинуть)

Задача следующая.

Передать пакет - 01000010, да или любой другой при нажатии кнопки.

Проц pic16f684

заранее спасибо
ЯНДЕКС Дата: 21.02.2014
MiXaS Дата: Пт, 21.02.2014, 10:18  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Я быстро глянул даташит понял, что это что-то вроде этого .

Тогда все просто. Но есть еще вопрос. Тот прибор, о котором Вы упомянули, это законченное устройство или для него тоже нужно собрать приемник на 433,92?

Был у меня опыт передавать данные в эфир по амплетудной модуляции. Код давать не буду, ибо все очень просто.

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

Я не буду вдаваться в подробности как опрашивать кнопки....

Вот Вам пример на пальцах:

1.Контроллер спит;
2.Произошло нажатие кнопки N, контроллер проснулся;
3.определил какая кнопка нажата;
4.сгенерил код;
5.и с помошью команды Rsout отправил в эфир.

Если Вы хотите еще и принять данные, тогда советую использовать камень, на борту у которого есть модуль USART. Тогда Вы настраиваете прерывания по USART и проверяете что пришло в буфер. Если пришло что надо, выполняете действие. Так как 433,92 очень заср.. тая частота, там очень много разного оборудования висит, поэтому Вам нужно подумать как защитить себя от ложных срабатываний, CRC8 или CRC16 думаю лучший вариант.

Цитата dimmer ()
если не трудно - чисто символическое, в качестве благодарности, могу мальца на телефон закинуть
Это конечно заманчиво, но мы тут друг другу и так помогаем чем могём. Ну уж если совсем хочется отблагодарить, можно репутацию изменить. Будут вопросы пишите. Удачи
dimmer Дата: Пт, 21.02.2014, 14:17  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Спасибо огромное!
я правильно понимаю часть отправки данных:

data_1 = %01000010
Serout portb.5, n2400, [#data_1]
MiXaS Дата: Пт, 21.02.2014, 16:32  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Так точно! Вот только пока Вы сильно не углубилсь в познаниях PicBasicPro, рекомендую Вам сразу на протоне учиться. Эта тема уже поднималась не 1 десяток раз уже. Литература есть, спасибо нашим форумчанам: Анатолию Медведеву и Владимиру Хилинскому.
dimmer Дата: Ср, 13.08.2014, 21:56  |                                                                                                                Сообщение # 5
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Помогите плиз

Все такие не совсем понял как передать.

вернее передал, но не сработало 

shiftout portb.1, 1, [test]( на передатчике)

shiftin portb.1, 1, [test](на приемнике)

Кто из готового кода может показать кусок (если вдруг кто делал) особенно если с Encode Manchester
MiXaS Дата: Чт, 14.08.2014, 09:46  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Цитата dimmer ()
shiftout portb.1, 1, [test]( на передатчике)
Это команда для передачи данных по последовательной шине SPI. Ваш АМ передатчик, я полагаю, должен работать по UART.
Я работал с подобными, ссылку уже давал.

Расскажу на пальцах, так как писал на протоне, а вы уже переведите в код.

Лучше всего использовать аппаратный USART модуль, если его нет на стороне передачи, то это не страшно, можно и без него, а вот на стороне приема без него будет сложнее, но всё же можно.
Итак, нужно передать переменную А формат байт, которая содержит, допустим состояние кнопок.

Serout порт.х, 2, [a]

Приемник тем временем постоянно читает и разбирает принятые данные.

Хочу сразу отметить, что данный вид связи нужнается в протоколе обмена, так как если вы подцепите динамик (высокоомный или низкоомный через кондер), то вы услышите, что приемник ловит все. Брелки от сигнализации, рации, радиотелефоны..... все, что работает в этом диапазоне или рядом.
Поэтому возможны потери данных или ложные срабатывания. Я делал двумя способами:
1. Это самый простой, но мне кажется не совсем надежный, хотя у меня все работало: Передатчик сначало передает несколько байт определенного значения( лучше всего чередовать 10101010, страться избегать все 1 и все 0), а потом ценные данные.
Приемник при этом значет, что его пакет состоит из, допустим 4 байт, причем первые 3 это что-то типа преамбулы. Также приемник знает, что преамбула имеет четкое значение, например, 127, 80, 206. когда прилетит ваш пакет от передатчика к приемнику в формате 127,80,206,переменная А, то приемник должен проверить все содержимое пакета
if buf[0]=pre1 then
if buf[1]=pre2 then
if buf[2]=pre3 then
то можете смело производить действие с использованием переменной А.

Второй вариант сложнее, но гораздо надежнее. Это использование протоколов связи с контрольной суммой. Если вы собираетесь передавать одновременно менее 8 байт, то вам достаточно CRC8. На нашем форуме есть этот код по расчету контрольной суммы для ds18b20.

Можно использовать готовые протоколы, а можно и самому придумать. Это не сложно. Например, адрес устройства, формат данных, данные, CRC8.

Всем соль? В том, что когда вы хормируете так называемый фрэйм, вы отправляете много данных, что позволяет приемнику не отвлекаться, и самое главное это контрольно избыточный код (CRC). Дело в том, что приемник, получив пакет, отбразывает CRC передатчика и производит собственный расчет crc? а потом сравнивает. Если CRC приемника = CRC передатчика, значит ВСЕ данные пришли без повреждения и их можно применять.

Второй вариант более надежный, но при этом сложнее. Я первое время пользовался первым вариантом, тоже работает, нет помех, ложных срабатываний, правда преамбула была 5 байт.

Самое сложное это настроить приемник под передатчик. Для этих целей лучше всего использовать USART и прерывания, но если очень захотеть, то можно и через serin.
Удачи
dimmer Дата: Вс, 17.08.2014, 21:27  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

MiXaS, можете код из Протона скинуть на нем я быстрее разберусь. ( на приемике и на передатике)

Смысл я понял, но теперь реализовать нужно грамотно.

Буду очень благодарен

Спасибо
MiXaS Дата: Вс, 17.08.2014, 23:19  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 615
Репутация: 26   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

я постараюсь найти, но не обещаю. 

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

Сформируйте посылку с преамбулой, например, 123, 12, 6, 128, ваши данные, после передаете ее в эфир.

приемнит в это время слушает эфир, как только приемник обнаружил первый байт преамбулы, он проверяет его, ели он 123, проверяет следующий, если он 12, следующий и т.д если хоть один не совпадает, слушаем опять эфир. Как только все байты пришли и совпали, то читаем наши данные и делаем соответствующие действия
dimmer Дата: Вс, 17.08.2014, 23:44  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Начал соображать
Сообщений: 31
Репутация: 0   ±
Замечания:   ±
На сайте с 22.11.2013

Статус: Offline

Вот что у меня вышло:

Скорее всего неправильно, но простите заранее) 

Передаю: 

Код
'*************************************************************    
'*************************************************************
'********************* MAIN PROGRAM **************************
'*************************************************************
start:

high led
pause 300
low led

b0 = 232
b1 = 123
      
post_loop:    

if trigger = 0 then button_pressed  

endf         
                    

    goto post_loop

button_pressed:     
'-----------------------------------------------
serout portc.5, 2, [b0,b1]

high led
pause 100
low led

button_wait:         
     PAUSE 30
     IF trigger = 0 THEN button_wait
     PAUSE 30
     GOTO start     

end


Принимаю:

Код
'*************************************************************    
'*************************************************************
'********************* MAIN PROGRAM **************************
'*************************************************************
start:

b0 = 232

high led
pause 300
low led

      
find_loop:    

serin portA.2, 2, [b0], b1 ' тут B0  ключ
        
   
if b1  = 123 then
gosub  led1

endif
     
goto find_loop    
      
led1:

high led
pause 100
low led

return

end

Добавлено (17.08.2014, 23:35)
---------------------------------------------
При появлении в эфире ключа в0 записываем следующее значение в переменную в1

если она равна заданному числу - зажигаем светодиод

переписывал по разному эту программу, бывало что приемник ловил кучу помех, до чего досидел и помехи уже вернуть не смог)

Добавлено (17.08.2014, 23:44)
---------------------------------------------

Форум Picbasic.ru » Программирование МК » PicBasicPro » Радиоканал (Rt6-433)
Страница 1 из 11
Поиск: