Просматривая товары в китайском интернет магазине, наткнулся на комплект радиомодулей, состоящий из приемника WL101-341 и передатчика WL102-341, недолго думая решил заказать их, чтобы протестировать. Внешне модули выглядят качественно, и имеют минимальные размеры, построены на специализированных микросхемах, на платах присутствуют кварцевые резонаторы. Передача данных осуществляется с помощью амплитудной модуляции (ASK).
Модуль передатчика имеет четыре вывода: “+” и “–” для подключения питания, EN – линия включение передатчика, DAT – вход для передачи данных. В моих экземплярах линия EN была неактивной, так как на плате установлена перемычка, соединяющая 1-й вывод микросхемы (EN) с линией питания, то есть модуль постоянно работал при подаче питания. Я отпаял перемычку, чтобы иметь возможность управления передатчиком. Напряжение питания может варьироваться в пределах 2-3,6В. В режиме передачи данных, потребление при низком логическом уровне на линии DAT составляет 5 мА, при высоком 17 мА, в отключенном состоянии (низкий уровень на линии EN) потребление менее 1 мкА.
Модуль приемника также имеет четыре вывода: VIN и GND – линии питания, остальные два вывода DO соединены между собой и представляют собой выход демодулированных данных. Пределы напряжения питания составляют 3-5В, потребление 6,5 мА. Заказать модули можно здесь, где я их и брал.
Я применил тот же протокол передачи данных, описанный в статье Подключение радиомодулей к микроконтроллеру, протокол основан на фиксированных временных задержках логических сигналов.
Ниже приведены схемы передатчика и приемника на микроконтроллерах PIC12F629:
Светодиод HL1 в передатчике служит в качестве индикатора передачи данных. В приемнике с помощью переключателя SA1 можно выбрать два режима работы: режим кнопки (разомкнутое состояние SA1) – поочередное включение и выключение светодиода при поступлении команды с передатчика, и режим повторения (замкнутое состояние SA1) – светодиод светится, пока нажата кнопка на передатчике.
Антенны для передатчика и приемника изготовил из медного обмоточного провода диаметром 1 мм, антенны спиральные, намотаны на цилиндрической оправе диаметром 3 мм, количество витков 21, подобные антенны также можно приобрести в интернет магазинах. В отличие от штыревой антенны, спиральная имеет меньшие габариты.
Ниже представлены код программы передатчика:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | #include <p12f629.inc> LIST p=12F629 ; Установка типа микроконтроллера. __CONFIG 03F81H ;внешний кварцевый генератор 4Мгц Sec equ 20h ;промежуточные регистры счета Sec0 equ 21h ; Sec1 equ 22h ; kod equ 24h ;регистр хранения кода shetbit equ 25h ;счетчик битов ;присвоение названий линиям ввода-вывода #define knp GPIO,0 ;кнопка #define dat GPIO,2 ;выход данных на передатчик #define enab GPIO,1 ;линия включения передатчика ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0 ; Начать выполнение программы с адреса 0 PC. goto Start ; Переход в ПП Start. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Start movlw b'00000111' ;выключение компараторов movwf CMCON ; movlw b'00000000' ;запись нулей в выходные защелки порта GPIO movwf GPIO ; bsf STATUS,RP0 ;выбрать 1-й банк movlw b'00111001' ;настройка линий ввода\вывода порта GPIO movwf TRISIO ;GP1,GP2 - на выход, остальные на вход bsf IOCB,IOCB0 ;разрешение прерываний по изменению уровня на входе GP0 bcf STATUS,RP0 ;выбрать 0-й банк son movf GPIO,W ;чтение регистра GPIO для устранения несоответствия bcf INTCON,GPIF ;сброс флага прерывания по изменению уровня сигнала GP0-GP5 bsf INTCON,GPIE ;разрешение прерываний по изменению уровня сигнала GP0-GP5 SLEEP ;переход в спящий режим metka3 btfsc knp ;опрос состояния кнопки goto metka4 ;высокий уровень(кнопка отжата):переход на метку metka4 call nagat ;низки уровень(кнопка нажата):вызов подпрограммы comm_psk call paus200 ;вызов подпрограммы паузы 200мс goto metka3 ;переход на метку metka3:очередной опрос кнопки metka4 call pausknp ;вызов подпрограммы паузы 10мс goto son ;переход на метку son nagat bsf enab ;включение передатчика call pausknp ;вызов подпрограммы паузы 10мс call preamb ;вызов подпрограммы передачи преамбулы movlw .196 ;передача числа 196 на передатчик call send ; movlw .46 ;передача числа 46 на передатчик call send ; bcf enab ;выключение передатчика return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма передачи байта на передатчик ;скорость передачи 833 Бит/сек send movwf kod ;сохранение кода команды в регистре kod movlw .8 ;запись числа 8 в регистр shetbit, для отсчета movwf shetbit ;количества отправленных бит opros btfsc kod,7 ;опрос 7-го бита регистра kod goto prdedin ;бит равен 1:переход на метку prdedin prdnol bcf dat ;бит равен 0:передача логического нуля call paus800 bsf dat call paus400 goto metka1 prdedin bcf dat ;передача логической единицы call paus400 bsf dat call paus800 metka1 rlf kod,F ;смещение содержимого регистра kod влево для передачи ;очередного бита decfsz shetbit,F ;декремент счетчика отправленных бит goto opros ;счетчик не равен нулю:переход на метку opros bcf dat ;счетчик равен нулю: сброс вывода dat(установка низкого ;логического уровня на входе передатчика) return ;выход из подпрограммы ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;подпрограмма передачи преамбулы preamb movlw .12 ;подпрограмма передачи преамбулы в виде- movwf shetbit ;-последовательности нулей и единиц bb1 bcf dat ;(010101...01) 24 бит - 3 байта call paus400 bsf dat call paus400 decfsz shetbit,F goto bb1 return ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; pausknp movlw .13 ;подпрограмма паузы 10 мс movwf Sec a2 movlw .255 movwf Sec0 a1 decfsz Sec0,F goto a1 decfsz Sec,F goto a2 return paus400 movlw .132 ;подпрограмма паузы 400мкс movwf Sec0 aa1 decfsz Sec0,F goto aa1 return paus800 movlw .4 ;подпрограмма паузы 800мкс movwf Sec0 aa3 movlw .66 movwf Sec aa2 decfsz Sec,F goto aa2 decfsz Sec0,F goto aa3 return paus200 movlw .4 ;подпрограмма паузы 200мс movwf Sec as2 movlw .65 movwf Sec0 as3 movlw .255 movwf Sec1 as1 decfsz Sec1,F goto as1 decfsz Sec0,F goto as3 decfsz Sec,F goto as2 return End ;конец всей программы |
Ниже представлены код программы приемника:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | #include <P12F629.INC> LIST P=12F629 __CONFIG H'3F81' ;внешний тактовый генератор 4Мгц flag equ 20h ;дополнительный регистр флагов vremya equ 21h ;регистр хранения фактического времени kolbyte equ 22h ;регистр кол-ва принятых байт reg equ 23h ;регистр приема данных от приемника shets equ 24h ;регистр кол-ва принятых бит FSR_osn equ 25h ;регистры для временного хранения значений FSR_prer equ 26h ;во время прерываний W_TEMP equ 27h ; STATUS_TEMP equ 28h ; data1 equ 50h ;первый регистр хранения принятых команд ;присвоение названий линиям ввода-вывода #DEFINE dat GPIO,0 ;вход данных от приемника #DEFINE led GPIO,2 ;светодиод индикации #DEFINE regim GPIO,3 ;выбор режима ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ;начать выполнение программы с адреса 0000h goto Start ;переход на метку Start ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Подпрограмма обработки прерываний ;скорость приема данных 833 Бит/сек, длительность одного бита 1,2 мс org 0004h ;начать выполнение подпрограммы с адреса 0004h ; btfss PIR1,TMR1IF ;опрос флага прерывания по переполнению TMR1 goto int0 ;прерывания не было:переход на метку int0 bcf T1CON,TMR1ON ;зафиксировано прерывание:выключаем таймер TMR0 bcf PIR1,TMR1IF ;сброс флага прерываний по переполнению TMR1 bcf led ;выключаем светодиод retfie ;выход из подпрограммы обработки прерывания int0 movwf W_TEMP ;сохранение значений ключевых регистров swapf STATUS,W ; clrf STATUS ; movwf STATUS_TEMP ; movf TMR0,W ;сохранение значения счетчика TMR0 movwf vremya ;в регистр vremya movlw .0 ;запись числа 0 в счетчик TMR0 movwf TMR0 movf FSR,W ;запись содержимого регистра FSR в movwf FSR_osn ;регистр FSR_osn movf FSR_prer,W ;запись содержимого регистра FSR_prer в movwf FSR ;регистр FSR btfsc INTCON,T0IF ;опрос флага прерывания по переполнению TMR0 goto outshet ;переполнение TMR0:переход в подпрограмму outshet btfss dat ;нет переполнения TMR0:сохранение состояния линии bcf flag,0 ;dat в 0-й бит регистра flag1 btfsc dat bsf flag,0 movlw .60 ;проверка длительности между subwf vremya,W ;прерываниями:больше-меньше 240мкс btfss STATUS,C ; goto eror ;длительность меньше 240мкс:переход на метку eror movlw .140 ;длительность больше 240мкс:проверка длительности: subwf vremya,W ;больше-меньше 560мкс btfsc STATUS,C ; goto int1 ;длительность больше 560мкс:переход на метку int1 bcf flag,1 ;длительность меньше 560мкс:сброс 1-го бита регистра flag: ;приравниваем длительность к 400мкс goto opred ;переход на метку opred int1 movlw .160 ;проверка длительности: больше-меньше 640мкс subwf vremya,W ; btfss STATUS,C ; goto eror ;длительность меньше 640мкс:переход на метку eror movlw .240 ;длительность больше 640мкс:проверка длительности: subwf vremya,W ;больше-меньше 960мкс btfsc STATUS,C ; goto eror ;длительность больше 960мкс:переход на метку eror bsf flag,1 ;длительность меньше 960мкс:устанавливаем 1-й бит регистра ;flag:приравниваем длительность к 800мкс opred btfss flag,0 ;опрос ранее сохраненного состояния линии dat goto int2 ;низкий уровень линии dat:переход на метку int2 btfsc flag,1 ;высокий уровень линии dat(произведено измерение длительности- ;-сигнала низкого уровня):проверка длительности импульса bsf flag,2 ;устанавливаем 2-й бит регистра flag:зафиксирован низкий btfss flag,1 ;уровень сигнала длительностью 800мкс bcf flag,2 ;сбрасываем 2-й бит регистра flag:зафиксирован низкий ;уровень сигнала длительностью 400мкс bsf flag,7 ;устанавливаем 7-й бит регистра flag:зафиксирован ;низкий уровень сигнала с правильной длительностью- ;-разрешаем прием сигнала высокого уровня goto vihod ;переход на метку vihod int2 btfss flag,7 ;низкий уровень линии dat:(произведено измерение длительности- ;-сигнала высокого уровня):проверка разрешение приема сигнала ;высокого уровня goto vihod ;нет разрешение приема сигнала высокого уровня:переход на ;метку vihod btfsc flag,2 ;есть разрешение приема сигнала высокого уровня:проверка- ;-длительности предыдущего сигнала низкого уровня goto int3 ;низкий уровень сигнала равен 800мкс:переход на метку int3 btfss flag,1 ;низкий уровень сигнала равен 400мкс:проверка длительности ;сигнала высокого уровня goto eror ;высокий уровень равен 400мкс(предыдущий низкий равен 400мкс)- ;-неверная последовательность:переход на метку eror bsf flag,3 ;высокий уровень равен 800мкс(предыдущий низкий 400мкс)- ;-принят бит единица (лог.1) goto intpriem ;переход на метку intpriem int3 btfsc flag,1 ;низкий уровень сигнала равен 800мкс:проверка длительности ;сигнала высокого уровня goto eror ;высокий уровень равен 800мкс(предыдущий низкий равен 800мкс)- ;-неверная последовательность:переход на метку eror bcf flag,3 ;высокий уровень равен 400мкс(предыдущий низкий 800мкс)- ;-принят бит ноль (лог.0) intpriem btfsc flag,3 ;опрос значения принятого бита и запись в 0-й бит- bsf reg,0 ;-регистра reg btfss flag,3 ; bcf reg,0 ; incf shets,F ;инкремент счетчика (shets) принятых битов movlw .8 ;проверка счетчика (shets) принятых битов на совпадение xorwf shets,W ;с числом 8 btfsc STATUS,Z ; goto srav ;есть совпадение,приняты 8 бит(1 байт):переход на метку srav rlf reg,F ;нет совпадения:смещение регистра reg на один бит влево ;для приема следующего бита goto vihod ;переход на метку vihod srav movf reg,W ;сохранение значения принятого байта- movwf INDF ;-в регистры хранения incf FSR,F ;инкремент регистра FSR:подготовка следующего регистра ;хранения clrf shets ;очистка счетчика бит incf kolbyte,F ;инкремент счетчика кол-ва принятых байт movlw .2 ;проверка счетчика (shets) принятых битов на совпадение xorwf kolbyte,W ;с числом 2 btfss STATUS,Z ; goto vihod ;нет совпадения:переход на метку vihod bsf flag,4 ;есть совпадение,приняты 2 байта:установка флага получения- ;-команды! goto eror ;переход на метку eror outshet bcf INTCON,T0IF ;сброс флага прерывания по переплнению TMR0 eror clrf shets ;очистка счетчика бит clrf kolbyte ;очистка счетчика байт bcf flag,7 ;сброс флага разрешения приема высокой лог. уровня movlw data1 ;запись адреса первого регистра хранения принятых movwf FSR ;команд в регистр FSR vihod movf GPIO,W ;чтение регистра GPIO для устранения несоответствия bcf INTCON,GPIF ;сброс флага прерывания по изменению уровня сигнала ;на GPIO kon1 movf FSR,W ;запись содержимого регистра FSR в movwf FSR_prer ;регистр FSR_prer movf FSR_osn,W ;запись содержимого регистра FSR_osn в movwf FSR ;регистр FSR exxit swapf STATUS_TEMP,W ;восстановление содержимого ключевых регистров movwf STATUS ; swapf W_TEMP,F ; swapf W_TEMP,W ; ; retfie ;выход из подпрограммы обработки прерывания ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Основная программа Start clrf GPIO ;очистка выходных защелок портов GPIO movlw b'00000111' ;выключение компараторов movwf CMCON bsf STATUS,RP0 ;выбрать 1-й банк movlw b'11111011' ;настройка линий ввода\вывода порта GPIO movwf TRISIO ;GP2 на выход,остальные на вход movlw b'00000001' ;настройка прерываний на линия ввода\вывода movwf IOCB ;разрешено прерывание на линии GP0 movlw b'10000001' ;коэффициент предделителя TMR0 1:4, внутрен. movwf OPTION_REG ;тактовый сигнал bsf PIE1,TMR1IE ;разрешение прерываний по переполнению TMR1 bcf STATUS,RP0 bcf flag,5 ;сброс флага состояния светодиода led bcf flag,7 ;сброс флага разрешения приема высокой лог.уровня bcf flag,4 ;сброс флага приема пакета данных clrf shets ;очистка счетчика бит clrf kolbyte ;очистка счетчика байт movlw data1 ;запись адреса первого регистра хранения команд movwf FSR_prer ;в регистр FSR_prer movlw b'00100000' ;коэффициент предделителя TMR1 1:4, внутрен. movwf T1CON ;тактовый сигнал bcf PIR1,TMR1IF ;сброс флага прерываний по переполнению TMR1 bcf INTCON,T0IF ;сброс флага прерывания по переполнению TMR0 clrf TMR0 ;очистка регистра таймера TMR0 bsf INTCON,T0IE ;разрешение прерываний по переполнению TMR0 movf GPIO,W ;чтение регистра GPIO для устранения несоответствия bcf INTCON,GPIF ;сброс флага прерывания по изменению уровня сигнала на GPIO bsf INTCON,GPIE ;разрешение прерываний по изменению уровня сигнала на GPIO bsf INTCON,PEIE ;разрешение прерываний периферийных модулей bsf INTCON,GIE ;глобальное разрешение прерываний opros btfss flag,4 ;опрос флага получения команды goto opros ;команда не получена:переход на метку opros bcf flag,4 ;команда получена:сброс флага полуения команды movlw data1 ;проверка первого и второго байта команды на соответствие movwf FSR ;с командой, отправленной с передатчика movf INDF,W ; xorlw .196 ; btfss STATUS,Z ; goto opros ;первый байт команды неверный:переход на метку opros incf FSR,F ; movf INDF,W ; xorlw .46 ; btfss STATUS,Z ; goto opros ;второй байт команда неверный:переход на метку opros ;получена правильная команда btfsc regim ;опрос режима работы goto int4 ;режим кнопка:переход на метку int4 bsf led ;режим повторения: включаем светодиод bcf T1CON,TMR1ON ;остановка таймера TMR0 clrf TMR1L ;очистка регистров таймера clrf TMR1H ; bsf T1CON,TMR1ON ;запуск таймера TMR0 goto opros ;переход на метку opros int4 btfsc flag,5 ;поочередное включение и выключение светодиода led- goto pro21 ;-при получении правильной команды bsf led ;включаем светодиод bsf flag,5 ;устанавливаем флаг состояния светодиода goto opros ; pro21 bcf led ;выключаем светодиод bcf flag,5 ;сбрасываем флаг состояния светодиода goto opros ;переход на метку opros end ;конец всей программы |
Для начала я установил скорость передачи данных на уровне 1333 бит/сек (в протоколе один бит состоит из двух логических уровней длительностью 250 и 500 мкс), при этом наблюдался крайне неустойчивый прием данных, увеличение скорости привело к полной тишине, приемник ничего не ловил. Я стал разбираться в причинах неуверенного приема, и начал поиски даташита на микросхему приемника, на самой микросхеме обозначение отсутствовало. Поиски привели меня к микросхеме под названием SYN500R, очень похожей на микросхему приемника. Из даташита, микросхема имеет два вывода для настройки максимальной частоты демодулированных данных (всего 4 варианта значений частоты), самая низкая частота 1250 Гц, соответственно для успешного выделения полезного сигнала, длительность импульсов не должна быть меньше 400 мкс. Согласно этим данным, я уменьшил скорость передачи данных до 833 бит/сек, при этом длительности логических ровней для передачи одного бита составили 400 и 800 мкс. После этого приемник начал стабильно ловить команды с передатчика, видимо микросхема в модуле приемника настроена на минимальную скорость. Я думаю, можно настроить и на более высокие скорости, перепаяв выводы микросхемы, отвечающие за частоту демодулирования.
Позже один из подписчиков поделился даташитом, который был предоставлен продавцом из Китая, из даташита микросхема приемника имеет название WL119 и схожа с SYN500R, даташит можно скачать в конце статьи.
На стабильность приема влияет длина преамбулы в программе передатчика, минимальная длина 2 байта. Я пробовал уменьшать длину до одного байта, при этом наблюдался неуверенный прием. В вышеприведенной программе длина преамбулы составляет 3 байта.
Я решил сравнить данные радиомодули с другим комплектом модулей FS1000A и XY-MK-5V, которые я подключал ранее. Был произведен тест на дальность в прямой видимости, модули WL101/WL102-341 показали очень хороший результат, приемник ловил на расстоянии в 160 метров, на обоих модулях были установлены спиральные антенны, а модули FS1000A, XY-MK-5V с штыревыми антеннами выдают максимум 60 метров. Стоить заметить, что спиральные антенны в целом уступают штыревым, но это не помешало модулям WL101/WL102-341 показать хороший результат, почти в три раза большая дальнобойность по сравнению с аналогичным комплектом модулей. Во время теста на передатчик FS1000A подавалось напряжение 9В, в то время как на передатчик WL102-341 всего 3,6В, что также является преимуществом. Цена обоих комплектов примерно одинакова.
Также я тестировал более навороченные радиомодули HC-12 на основе трансивера Si4463 (приемопередатчик), в этих модулях управление и передача данных осуществляется через UART интерфейс, дальность связи может достигать 1,8 км.
Дмитрий
10 Авг 2016Спасибо за подробный тест. Тоже прикупил эти модули, хочу приспособить в качестве пейджинга к сигнализатору поклевки. Правда на 433 МГц сильно шумно, либо это приемник такой шумный. Можете более подробно пояснить как из максимальной частоты демодулированных данных приемника вычислить минимальную длительность импульса для успешного выделения полезного сигнала.
admin
10 Авг 2016То есть у вас приемник плохо ловит команды? приемник должен стабильно ловить команды, ухудшение приема возможно если поблизости одновременно и непрерывно работают брелки на 433 МГц.
Я не вычислял минимальную длительность импульсов, а просто посмотрел таблицу в даташите на подобную микросхему приемника SYN500R. Ниже приведена эта таблица:
Как видно микросхема может быть настроена на 4 различные скорости, в зависимости от лог. уровней на входах SEL0, SEL1. Я проверил значение уровней на плате модуля приемника, получилось SEL0=1, SEL1=0 что должно соответствовать максимальной частоте демодулированных данных в 2500 Гц и мин. длительности импульса 200 мкс. Но с такими параметрами импульсов модуль плохо ловил команды, значит в модуле стоит микросхема отличная от SYN500R. Далее я решил привести параметры импульсов к минимальной скорости (как указано в даташите) в 1250 Гц (мин. длительность 400 мкс), после чего появился стабильный прием.
Длительность преамбулы также влияет на стабильность приема, об этом я писал в статье.
zzz
17 Фев 2018short=замкнуто, по идее это лог.1
open=разомкнуто, по идее это 0
то есть, по вашей таблице SEL0=1, SEL1=0 соответствует SEL0=short, SEL1=open, значит было не 2500гц а 5000гц
admin
17 Фев 2018Я все правильно указал, из даташита на SYN500R следует что выводы SEL0 и SEL1 имеют внутреннюю подтяжку к высокому логическому уровню, соответственно OPEN это когда вывод никуда не подключен и это лог.1, а SHORT это замыкание на общий провод и соответственно лог.0.
Скриншот из даташита:
Дмитрий
10 Авг 2016В радиусе 50 метров команды без пропусков ловит, а дальше уже хуже. Подключил наушники к приемнику, шума в городе на 433 МГц очень много и присутствует какое то постоянное жужание. Скорее всего оно и перебивает мои команды. Походу нужно за город выезжать и там пробовать. Я выпросил у китайца даташит на приемник, но в нём табличка с режимами поскуднее выглядит, в ней только две колонки:1) с тремя комбинациями подключения SEL0, SEL1 и 2) пределы скоростей.
admin
10 Авг 2016Я испытывал модули вдали от города, там приемник ловил команды на расстоянии в 160 метров в прямой видимости, пропуски на таком расстоянии были конечно, но в пределах 100м ловило без пропусков, опять же в прямой видимости. Препятствия будут снижать дальность действия, а вот насчет шума не могу ничего утверждать, неужели в городе в пределах 100-150метров, постоянно непрерывно работают передатчики 433МГц. Надо будет провести испытания в городских условиях.
Кстати, если вас не затруднит, вышлите даташит китайца мне на почту.
Дмитрий
10 Авг 2016Жужжит – страшное дело! Еще когда пытался самодельные модули делать вот эти http://vrtp.ru/index.php?act=categories&CO…le&article=1418, сверхрегенеративным приёмником улавливал эту помеху при настройке. Так и не получились они у меня, а именно уселительный каскад в передатчике, ну никак не хотел работать. Но это, опять таки, в моём районе шумит, в других местах не слушал. За городом возле речки думаю ситуация намного лучше будет.
Даташит вышлю. Китаец потрудился, прислал две версии – оригинал на китайском и вторую, перевёл на английский, что смог.
Глеб
6 Янв 2017Дмитрий , а как вы избавились от шумов приемника ? У меня вот тоже шумит , и прерывание срабатывает на шум.(( приемник WL 101
Дмитрий
17 Янв 2017Глеб, пока что никак не удалось победить шум. Из-за него в моём устройстве идёт ложная сработка. Пришлось снова на сверхрегенеративный приемник перейти. Заметил еще, что приемник (с данной статьи), если поймал шум-помеху “держиться” за неё до последнего, как бы автоподстройка в нём имеемся. Может показалось.
admin
17 Янв 2017Какой вы алгоритм применяете на стороне приемника? Вот у меня ни разу не было ложных срабатываний с алгоритмом, который я применял в этой статье.
Дмитрий
17 Янв 2017Не я автор, вот ссылка на разработку:
http://cxem.net/elud/elud11.php
Дмитрий
10 Авг 2016Кривой адрес написал с модулями, вот еще раз http://vrtp.ru/index.php?act=categories&CODE=article&article=1418
Дмитрий
31 Авг 2016Как то непонятно ведёт себя передатчик: решил попробовать управлять включением через пин EN. Отпаял перемычку между EN и VCC, проверил тестером, что первая нога микроссемы соединена с пином EN и уже не сидит на VCC. Подаю питание контролируя потребляемый ток и вижу потребление 4 мА, на DAT при этом ничего не подключено. Когда касаюсь пальцем пина EN, ток падает до 0,2 мА… бросаю, и снова 4 мА.
Может сталкивалиси с таким поведением, что это может быть?
admin
31 Авг 2016Так вывод EN не должен висеть в воздухе, надо подключить его к GND чтобы отключить передатчик, для включения подать высокий логический уровень.
Дмитрий
31 Авг 2016Спасибо! А я воспринял “низкий уровень” как отключение от плюса, недопонял я даташит.
Ещё вопросик – я смотрю что схема упрощена китайцами по сравнению с даташитом в количестве деталей, хотя места под них разведены на плате. Вы не пробовали дополнять её в соответствии с даташит, может это положительно повлияет на работу передатчика?
admin
31 Авг 2016Нее, дополнять не пробовал, возможно характеристики улучшатся, но не думаю что кардинально, мощность в основном зависит от напряжения питания.
Oleg
11 Сен 2016при подаче питания на VCC или подключении DAT в эфире появляется несущая.
я так понимаю автоматически включается из-за перемычки между EN и VCC.
а можете подсказать где эта перемычка?
admin
11 Сен 2016Перемычка идет к 1-му выводу микросхемы передатчика, ниже на фото обведен красным кружком.
Oleg
18 Сен 2016спасибо! разобрался!
Глеб
29 Дек 2016Не совсем понятно как программа понимает что после преамбулы идут данные?
если после преамбулы пойдут данные (010101010101…) что произойдет ?
и второй вопрос а почему так все сложно? ))
не ужели нельзя сделать конструкцию данные – строб
admin
29 Дек 2016Длительность низкого и высокого уровня битов преамбулы одинаковая, а для бита данных разная, для лог.0 низкий уровень в 2 раза длиннее высокого, для лог.1 наоборот высокий уровень длиннее, соответственно определить начало передачи данных не составляет труда. О протоколе передачи данных я писал в статье про подключение радиомодулей FS1000A и XY-MK-5V
Не совсем понял про конструкцию данные — строб.
Я стремился избавиться от ложных срабатываний, вследствие чего код получился более сложным. Например, если просто опрашивать выход приемника, принимая биты через определенные временные промежутки (в соответствии со скоростью передачи), то появляются ложные срабатывания, чем меньше длина пакета (количество передаваемых байт) тем больше ложных срабатываний. Здесь требуется фильтровать данные на программном уровне, например применять контрольную сумму CRC и т.д.
В протоколе который я использовал, проверяется правильность каждого бита, ложные срабатывания исключены (очень низкая вероятность), нет необходимости в программной фильтрации.
Глеб
29 Дек 2016Я прочитал Выше статьи,
конечно в даташите от SYN500R они НЕ настраивают применять манчестерское кодирование, но все говорит о том, что этот приемник создан специально для него (манчестерское кодирование).
данные – строб это классическое декодирование манчестерского кода см. https://www.youtube.com/watch?v=U5UsZFjx7qA
мне не совсем понятен замысел разработчиков микросхемы SYN500R , зачем они вводят режимы скорости (4 режима), причем не гибкое! зачем?
Я ранние на работал с такими приемниками , заказал скоро должны прибыть (wl101-341).
Вообще судь вопроса написать программу которая могла бы декодировать код который приходит по чистоте 433 мгц (ну пуская пока ASK)
которая могла бы принимать код с разными скоростями (само синхронизировалась).
admin
30 Дек 2016Нет, приемник не создан для манчестерского кодирования, он не может декодировать сигнал, скорее манчестерский код наиболее предпочтителен для такого рода приемников.
Я не знаю зачем разработчики заложили несколько скоростей передачи, кстати микросхема приемника это WL119, я выложил даташит в конце статьи, до этого все забывал загрузить, она схожа с SYN500R.
sslobodyan
28 Окт 2017>> Я не знаю зачем разработчики заложили несколько скоростей передачи
Чем уже полоса (BW) тем выше чувствительность приемника, но падает пропускная способность (минимальная ширина одного бита увеличивается). Соответственно, перемычки выставляют в зависимости от приоритетности скорости передачи либо дальности.
Александр
27 Май 2017Пора бы уже заняться модулями NRF24L01.
Досадный пробел.Нет нигде примера на PIC да еще на ассемблере.
А очень хотелось бы…
zotos
14 Фев 2018Огромное спасибо автору за разработку!
Комплект завелся с пол-оборота! Дальность четкого срабатывания на открытом пространстве (балкон 3-го этажа – открытая местность) более 200м, дальше не проверял.
В обоих контроллерах применил PIC12F675 с внутренним калиброванным генератором. Изменение температуры ( в комнате +23, на улице +1) на стабильности срабатывания никак не отразилось.
ZOTOS
16 Фев 2018500м на открытой местности – стабильное срабатывание. Ложных срабатываний нет. Антенны на приемнике и передатчике – полноразмерные диполи. Испытаны два комплекта приемников и два комплекта передатчиков, разницы в работе при перекрестной замене модулей нет.
При размещении передатчика в машине, приемник на 3-м этаже панельного дома иногда пропускает пакеты передатчика, на функционал системы это не влияет.
wan-derer.ru/blog
20 Июн 2018А можно подробнее про диполи: размеры, подключение?
zotos
21 Июн 2018wan-derer.ru/blog
два монтажных провода длиной около 17см каждый, один к точке подключения антенны на плате, другой к общему проводу на плате.
Кстати, на али не так давно появились четырехканальные модули приемников-передатчиков уже с логической частью, внешний контроллер не нужен. Поигрался и с ними, работают, дальность такая же, на открытом пространстве более 500м.
Олег
4 Июн 2018А возможно эту схему и прошивку использовать с FS1000A модулями?
admin
4 Июн 2018Да, можно
wan-derer.ru/blog
20 Июн 2018Приветствую. Я не очень понял логику работы этих модулей. Например, можно их использовать как “удлиннитель” логического сигнала? Т.е. подав “0” на вход передатчика получить “0” на выходе приёмника, а подав “1”, получить “1”?
У моего приёмника на выходе присутствует хаотичный меандр размахом 1.5В (питание 5В), на включение передатчика никак не реагирует. Это у меня дохлый приёмник или столько помех в эфире?
admin
20 Июн 2018Эти радиомодули можно использовать для передачи цифровых импульсов вида 101010…, только длительность логических уровней не должна быть короче 400 мкс, длинные импульсы (более сотен миллисекунд) также передаваться не будут. Приемник без включения передатчика ловит хаотические помехи, поэтому на выходе получается шум. Просто включив передатчик проверить приемник не получится, так он не будет работать, нужно передавать последовательность импульсов, длительность которых лежит в пределах 0,4-10мс.
wan-derer.ru/blog
20 Июн 2018О, пасиб! Подключил к передатчику генератор на 20 кГц, на приёмнике получил сигнал 🙂
Только размах около 2В. Как-то маловато, по-хорошему надо разгонять для 5-вольтовой логики. У тебя так же?
И больше 20 кГц не тащит, впрочем, так и написано у продавана в описании.
admin
21 Июн 2018Размах сигнала не измерял, я тестировал эти модули только совместно с микроконтроллером, 2В для микроконтроллера в принципе достаточно для распознания уровней, можно подключить выход приемника через резистор к базе биполярного npn транзистора, эммитер соединить с общим проводом, подать +5В через резистор на коллектор и снимать с него уже 5-ти вольтовый сигнал, только сигнал будет инверсный.
При совместной работе с микроконтроллером, импульсы малой длительности передаваемые на передатчик плохо распознавались на стороне приемника, после увеличения минимальной длительности до 400мкс, начался стабильный радиоприем, о чем я писал в статье, это получается 2,5 кГц.
wan-derer.ru/blog
21 Июн 2018Я бы сказал, 1.25 кГц если считать полный период из “0” и “1” по 400 мкс. Ну, я пробовал какой там максимум. Понятно что всё зависит от качества приёма, быстродействия МК, качества софта, количества задач. Это, можно сказать, дешёвые модули, тут рекорды ставить никто не собирается 🙂
По поводу уровней, вроде, “1” по стандарту – не менее 2.5В. Разогнать, конечно, можно, но непонятно почему так сделано. Надо будет схему покурить, может китайцы что-то с номиналами нахомутали.
Василий
10 Фев 2020Здравствуйте! Не могу прошить микросхему. Программатор ТРИТОН. Программатор пишет что программирование закончено, но ничего не работает. Может есть какие то нюансы при прошивке. Есть галочка включить ЕЕПРОМ, ID, калибровки. Надо ли ставить галочки напротив этих слов?
Алексей
13 Июл 2022Здравствуйте. Большое спасибо за статью. Про преамбулу я бы никогда не догадался. про частоту догадывался, а про преамбулу не догадался. Даже спустя годы полезная статья.