|
Комплексный вопрос: прием RC5 в сложных условиях |
|
|
|
Sep 14 2011, 11:57
|
    
Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731

|
Цитата(ARV @ Sep 13 2011, 14:52)  датчиков таких - море, какой конкретно у меня - неизвестно, скачанный даташит ограничился только функциональной схемой и параметрами, рекомендаций по схеме включения не содержит. в сущности, ваше замечание по фильтру питания стоящее, попробую проверить. Цитата(ARV @ Sep 13 2011, 16:29)  1. Родную частоту датчика я "определил" по его маркировке : A38AD - я так понимаю, 38 - и есть частота в килогерцах. все датчики в своем наименовании так или иначе содержат эту частоту, раз в наименовании моего всего 2 цифры - это она и есть. экспериментально же что 36 килогерц, что 38 - разницы не замечаю (менял несущую в своем пульте) Возьмите ДШ на Vishay TSOP312 - судя по фотке, у Вас что-то совместимое. В ДШ обратите внимание на Фигу7 (пульсации по питанию д.б. < 100 мВ) и Фигу13 (если правильно понял, Вы светите пультом практически в торец приёмника, и он работает на отражении сигнала от плафона). На Фиге5 приведена зависимость чувствительности приёмника от отклонения частоты модуляции. 36 кГц дадут 20-25 % снижения чувствительности у 38 кГц приёмника.
|
|
|
|
|
Sep 14 2011, 14:47
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 3-05-09
Из: Бишкек, Кыргызстан
Пользователь №: 48 590

|
Держите AVR практически не завит от частоты (поправте только зоны отсекания под Ваш таймер +-30% от паспорного приема RC5) CODE .NOLIST .include "TN2313DEF.inc" .LIST ;DATE 26.07.07
;+-----------------------------------------------------------------------+ ;¦ Выводы процессора ¦ ;+-----------------------------------------------------------------------+ ;PORT D .equ IKIN = 2 .equ IKOUT = 4
;+-----------------------------------------------------------------------+ ;¦ Флаги ¦ ;+-----------------------------------------------------------------------+ ;fl1 .equ FL_RX_ADR = 4 ;2 ;Флаг ПРИЕМА АДРЕСА
;+-----------------------------------------------------------------------+ ;¦ ПАМЯТЬ ¦ ;+-----------------------------------------------------------------------+ .equ BEGIN_SP = 0xDF ;Начало стека
;+-----------------------------------------------------------------------+ ;¦ Переменнные ¦ ;+-----------------------------------------------------------------------+ .def null = R1 .def reg_ = R2 ;Сохранение контекста для T0
.def ref0 = R8 .def ref1 = R9 .def command = R10 .def system = R11
.def temp = R16 .def fl1 = R18
.def cnt_t = R23 .def timerL = R24
;+----------------------------------------------------------------------+ ;¦ Константы ¦ ;+----------------------------------------------------------------------+ .equ SYST = 29 ;
.equ COM_ON = 18+8+8 ; .equ COM_OFF = 17+8+8 ;
;+-----------------------------------------------------------------------+ ;¦ НАЧАЛО КОДА ¦ ;+-----------------------------------------------------------------------+ .CSEG .ORG $00 RJMP BEGIN ; ***** Обслуживание прерывания по входу INT0 ***** RETI ; ***** Обслуживание прерывания по входу INT1 ***** RETI ; ***** Обслуживание прерывания по захвату T1 ***** RETI ; ***** Обслуживание прерывания по совпадению T1 A***** RETI ; ***** Обслуживание прерывания по таймеру T1 ***** RETI ; ***** Обслуживание прерывания по таймеру T0 ***** RJMP SERV_T0 ; cnt for rc-5 ; ***** Обслуживание прерывания по приёму символа ***** RETI ; ***** Обслуживание прерывания по опустошению регистра UART ***** RETI ; ***** Обслуживание прерывания по передаче символа ***** RETI ; ***** Обслуживание прерывания по аналоговому компаратору ***** RETI ; ;---------------------------------------------------------------------------- ;+--------------------------------------------------------------------------+ ;¦ Обслуживание прерывания по переполнению Т0 с перезаписью 64 мкс ¦ ;+--------------------------------------------------------------------------+ SERV_T0: IN reg_,SREG
INC timerL
out SREG,reg_ reti ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;############################################; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;инициализация BEGIN: LDI temp,low (BEGIN_SP) OUT SPL,temp CLR null
; РЕГИСТР МАСКИ ПРЕРЫВАНИЯ ОТ ТАЙМЕРА/СЧЕТЧИКА LDI temp,0b00000010 ; ¦¦¦¦¦¦+- TOIE0 разрешение прерывания по переполнению T0 ; ¦¦¦¦+--- TICIE1 разрешение прерывания по входу захвата ; ¦+------ OCIE1A разрешение прерывания по совпадению T1 ; +------- TOIE1 разрешение прерывания по переполнению T1 OUT TIMSK,temp
; РЕГИСТР УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 0 LDI temp,0b00000010 ; ¦¦¦¦¦¦¦+ CS00 выбор тактовой частоты T0 ; ¦¦¦¦¦¦+- CS01 ; ¦¦¦¦¦+-- CS02 ; ¦¦¦¦+--- CTC0 очистить при совпадении ; ¦¦¦+---- COM00 режим выхода сравнения ; ¦¦+----- COM01 ; ¦+------ PWM0 разрешение ШИМ OUT TCCR0,temp
; РЕГИСТР A УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 OUT TCCR1A,null
; РЕГИСТР B УПРАВЛЕНИЯ ТАЙМЕРОМ/СЧЕТЧИКОМ 1 OUT TCCR1B,null
; РЕГИСТР СОВПАДЕНИЯ ТАЙМЕРА/СЧЕТЧИКА 1
; РЕГИСТР УПРАВЛЕНИЯ СТОРОЖЕВЫМ ТАЙМЕРОМ in temp,WDTCSR ori temp,(1<<WDCE) | (1<<WDE) out WDTCSR,temp ; -- Got four cycles to set the new values from here -; ;Set new prescaler(time-out) value = 64K cycles (~0.5 s) ldi temp,(1<<WDE) | (1<<WDP2) | (1<<WDP0) out WDTCSR,temp ; -- Finished setting new values, used 2 cycles -;
sbi ACSR,ACD ;Analog comparator off
LDI temp,0b00010000 OUT ddrD,temp ldi temp,0b00000100 OUT PORTD,temp
CLR fl1 ;сбросим все флаги
SEI ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; основная программа ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BEGN: WDR sbis PIND,IKIN ;пропуск если нет бита (1) rcall START_RC5
RJMP BEGN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fault: ret ;;;;;;;;;;;;;;;;;;;;; ;прижел старт START_RC5: OUT TCNT0,null clr timerL ;Measure length of start bit
start2: cpi timerL,10*2 ;если прошло 1.04 мсек (5) brge fault ;пропуск если больше
sbis PIND,IKIN ;пропуск если бит установлен rjmp start2 ;;;;;;;;;;;;;;;;;;;;;; ;Positive edge of 1st start bit mov ref0,timerL ;занесли в ref0 время нуля inc ref0
OUT TCNT0,null clr timerL
mov ref1,ref0 ;в ref1 время 1 inc ref1 inc ref0
ldi cnt_T,7 ;теперь мы ловим 7 бит адреса SBR fl1,FL_RX_ADR ;2 Флаг ПРИЕМА АДРЕСА rjmp bit_is_a_1 ;распознование единицы ;;;;;;;;;;;;;;;;;;;; ;;ждем что 1 продлиться не менее ref1 sample: sbic PIND,IKIN rjmp bit_is_a_1 ;Jump if line high
;РАСПОЗНАВАНИЕ НУЛЯ bit_is_a_0: clc ;Store a '0' rol temp ;сдвиг влево через С=0
;ноль должен продержаться 2.75 мс ; Synchronize timing bit_is_a_0a: cp timerL,ref1 ;If no edge within 3/4 bit time brge fault ; exit
sbis PIND,IKIN ;Wait for rising edge rjmp bit_is_a_0a
OUT TCNT0,null clr timerL
bit_is_a_0b: cp timerL,ref0 ;(5)If no edge within 3/4 bit time breq nextbit ; если равно rjmp bit_is_a_0b ;in the middle of the bit
;РАСПОЗНАВАНИЕ ЕДЕНИЦЫ bit_is_a_1: sec ;Store a '1' rol temp ; протолкнули единицу ;Synchronize timing bit_is_a_1a: cp timerL,ref1 ;If no edge within 3/4 bit time brge fault ; exit
sbic PIND,IKIN ;Wait for falling edge rjmp bit_is_a_1a ;in the middle of the bit
OUT TCNT0,null clr timerL
bit_is_a_1b: cp timerL,ref0 ;(5)If no edge within 3/4 bit time breq nextbit ; если равно rjmp bit_is_a_1b ;in the middle of the bit ;;;;;;;;;;;;;;;;;;; nextbit: OUT TCNT0,null clr timerL
dec cnt_T ;декремент количество принятых бит brne sample ; get next bit
sbrs fl1,2 ;FL_RX_ADR Флаг ПРИЕМА АДРЕСА rjmp L001
mov system,temp ;Place system bits in "system" ldi cnt_T,6 ;теперь мы ловим 6 бит данных clr temp
CBR fl1,FL_RX_ADR ;2 Флаг ПРИЕМА АДРЕСА rjmp sample ;;;;;;;;;;;;;;;;;;; l001: mov command,temp ;Place system bits in "system" SBRS system,6 ; второй бит старта 1 то OK RET ; иначе вываливаемся ; наложили маски MOV temp,system ANDI temp,0b00011111 cpi temp,SYST BREQ SYS_OK
RET ;;;;;;;;;;;;;;;;; SYS_OK: MOV temp,command ANDI temp,0b00111111
DL9: CPI temp,COM_ON BRNE DL10 ; НОРМА CBI PORTD,IKOUT RET ;;;;;;;;;;;;;;;;;;;;;; DL10: CPI temp,COM_OFF BRNE END_IRKIN ; НЕ НОРМА SBI PORTD,IKOUT ;;;;;;;;;;;;;;;;;;;;;; END_IRKIN: RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; .DB "©MAGIC 07.2007" ;EESAVE = 0 ;CKSEL0 = 0 ;CKSEL1 = 0 ;BODLEVEL1 = 0 ;LOCK1 = 0 ;LOCK2 = 0
Сообщение отредактировал IgorKossak - Sep 14 2011, 17:18
Причина редактирования: Оформлять код научитесь правильно
|
|
|
|
|
Sep 14 2011, 14:59
|
Группа: Участник
Сообщений: 12
Регистрация: 1-12-07
Пользователь №: 32 873

|
"практически не зависит от частоты"
Что вы имеете ввиду? Там другая была проблема, и вроде уже решена.
|
|
|
|
|
Sep 14 2011, 15:02
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(point5217 @ Sep 14 2011, 18:47)  Держите AVR практически не завит от частоты (поправте только зоны отсекания под Ваш таймер +-30% от паспорного приема RC5) ну, во-первых, если вы обратились ко мне, то мой ник ARV, а вовсе не AVR. а по поводу кода - спасибо, конечно, но у меня на Си написано в 5 раз меньше и понятнее, да и работает тоже независимо ни от чего... просто у тиньки один 8-битный таймер, которому досталось делать все: и ШИМ программно генерировать, и задержки для приема RC5-кодов делать... прием RC5 для меня давно решенная задача, причем как минимум тремя принципиально разными способами  - на все случаи жизни.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Sep 16 2011, 04:18
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(Клим @ Sep 15 2011, 22:23)  Судя по картинке на первой странице, у вас общий провод светодиодов идет как раз рядом с датчиком. Сейчас все также ??? Датчики крайне капризные, я например, наблюдал, как датчик начинает молотить импульсы, если к обратной стороне палец поднести. А тут тонкий провод с достаточно большим током и на резонансной частоте. прочтите всю тему, пожалуйста: проблема решена, тока по тонким проводкам не течет, все нормально уже
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|