|
Комплексный вопрос: прием RC5 в сложных условиях |
|
|
|
Sep 12 2011, 17:29
|

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

|
я попал в тупик. пытаюсь сделать ДУ для своей RGB-лампы на мощном RGB-светодиоде. Пульт самодельный, все самодельное короче. И вот какая проблема: при малой яркости лампы ДУ работает уверенно на 5 метров и более, но стоит поднять яркость - дальность резко падает, доходя до буквально "впритыка". я грешу на "засветку" светодиодом ИК-приемника, ведь они в непосредственной близости друг от друга, хотя прямое излучение на приемник не попадает. В общем, тупик может будут какие-то советы, идеи - как побороть проблему? для справки вот ссылки пульт: http://www.simple-devices.ru/prj/9-electr/...-remote-controlлампа: http://www.simple-devices.ru/prj/9-electr/...imple-mood-lamp
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
 |
Ответов
|
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, 15:02
|

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

|
Цитата(point5217 @ Sep 14 2011, 18:47)  Держите AVR практически не завит от частоты (поправте только зоны отсекания под Ваш таймер +-30% от паспорного приема RC5) ну, во-первых, если вы обратились ко мне, то мой ник ARV, а вовсе не AVR. а по поводу кода - спасибо, конечно, но у меня на Си написано в 5 раз меньше и понятнее, да и работает тоже независимо ни от чего... просто у тиньки один 8-битный таймер, которому досталось делать все: и ШИМ программно генерировать, и задержки для приема RC5-кодов делать... прием RC5 для меня давно решенная задача, причем как минимум тремя принципиально разными способами  - на все случаи жизни.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
Сообщений в этой теме
ARV Комплексный вопрос: прием RC5 в сложных условиях Sep 12 2011, 17:29 kovigor Цитата(ARV @ Sep 12 2011, 20:29) может бу... Sep 12 2011, 17:35 ARV Цитата(kovigor @ Sep 12 2011, 21:35) Стек... Sep 12 2011, 18:10  kovigor Цитата(ARV @ Sep 12 2011, 21:10) вы же ви... Sep 12 2011, 18:18   ARV Цитата(kovigor @ Sep 12 2011, 22:18) В те... Sep 12 2011, 18:32    kovigor Цитата(ARV @ Sep 12 2011, 21:32) странно:... Sep 12 2011, 18:42 Aprel В питании датчика не хватает резистора в стандартн... Sep 12 2011, 22:16 ARV гм... по поводу питания - плата двусторонняя, одна... Sep 13 2011, 04:30 ILYAUL Очень интересно. Вы же яркость поднимаете пультом ... Sep 13 2011, 05:35 ARV Цитата(ILYAUL @ Sep 13 2011, 09:35) Очень... Sep 13 2011, 05:39  kolobok0 Цитата(ARV @ Sep 13 2011, 09:39) .. и пер... Sep 13 2011, 07:34 ILYAUL Так проведите эксперимент. Откл. светодиоды - осци... Sep 13 2011, 05:50 Aprel Если не хотите читать даташит на датчик, посмотрит... Sep 13 2011, 09:13 Клим В пульт - драйвер нормальный. Даже три ноги тиньк... Sep 13 2011, 09:22 Aprel Драйвер - это если с резисторами сильно греется.
А... Sep 13 2011, 10:06 muravei Попробовать ввести "минуту молчания", по... Sep 13 2011, 10:06 Aprel Думаю, будет сильно заметно.
А минутой молчания по... Sep 13 2011, 10:12 ARV Цитата(ILYAUL @ Sep 13 2011, 09:50) Так п... Sep 13 2011, 10:52 Aprel Родную частоту датчика можно вычислить эксперемент... Sep 13 2011, 12:12 ARV Цитата(Aprel @ Sep 13 2011, 16:12) Родную... Sep 13 2011, 12:29 Aprel Ну да, ёмкость маленькая. Там ещё есть Qg, тоже до... Sep 13 2011, 12:51 Aprel Всё-таки я бы сначала сделал что проще (если ШИМ 1... Sep 13 2011, 14:53 Клим Ну а все таки, пробовали ли вы поставить драйвер в... Sep 14 2011, 04:42 ARV Цитата(Клим @ Sep 14 2011, 08:42) Ну а вс... Sep 14 2011, 06:55 ReAl Интересно -- сбивает попадание перепадов освещенно... Sep 14 2011, 06:36 Aprel Вот и замечательно.
Теперь можно увеличить резис... Sep 14 2011, 08:32 ARV судя по всему, сбивали гармоники именно по питанию... Sep 14 2011, 09:43 Aprel Но ведь есть желание улучшить?
У вас по тонкой дор... Sep 14 2011, 10:07 ARV Цитата(Aprel @ Sep 14 2011, 14:07) Но вед... Sep 14 2011, 10:37 Aprel Цитата(ARV @ Sep 14 2011, 13:37) плата с ... Sep 14 2011, 11:40 xemul Цитата(ARV @ Sep 13 2011, 14:52) датчиков... Sep 14 2011, 11:57 Aprel "практически не зависит от частоты"
Что... Sep 14 2011, 14:59 Клим Судя по картинке на первой странице, у вас общий п... Sep 15 2011, 18:23 ARV Цитата(Клим @ Sep 15 2011, 22:23) Судя по... Sep 16 2011, 04:18
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|