RC5
|
|
brown |
Дата: Чт, 01.11.2007, 03:39 | Сообщение # 1 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
С огорчением обнаружил, что компилятор Протона версии 2.2..., а вот мануал в pdf приложен от 3.07. В нем имеeтся описание оператора-функции RC5IN (прием команд ДУ RC5),весьма полезной в радиолюбительской практике. По алгоритму С. Рюмика описаному в журнале Радиохобби 2/2006, была написана программа, работающая в железе. Оцените..., может у кого-то тоже есть наработки по этому поводу. Дело в том, что она почему-то отказывается работать при встраивании в готовый проект. Code '**************************************************************** device=16F876a '********************************************* ******************* ' LCD should be connected as follows: ' LCD PIC ' DB4 PortB.4 ' DB5 PortB.5 ' DB6 PortB.6 ' DB7 PortB.7 ' RS PortA.0 (add 4.7K pullup resistor to 5 volts) ' E PortA.1 ' RW Ground ' Vdd 5 volts ' Vss Ground ' Vo 20K potentiometer (or ground) ' DB0-3 No connect '------------------------------------------------------------- DECLARE XTAL 4 declare LCD_RSPIN=PORTA.0 DECLARE LCD_ENPIN=PORTA.1 DECLARE LCD_DTPIN=PORTB.4 DECLARE LCD_INTERFACE=4 DECLARE LCD_LINES=2
Dim dataRC5 as WORD ' Create a WORD variable to receive the data dim countr as byte dim addrRC5 as $00 dim klav as byte dim clock as byte dim h as byte 'переменные циклов dim j as byte dim row as byte dim addr as word
ADCON1 = 7 'Все порты цифровые ADCON0.0 = 0 'АЦП выключен SSPCON.5 = 0 'Модуль SSP выкл., порты цифровые TRISB = %00001111 'Порты 0..3 на вход TRISA = %00000 'На выход TRISC = %00000000 'На выход PORTC=%00011000 ' INTCON.7=0 'Disable interapt OPTION_REG=%00001000'On pull-up PORTB,прерывания по спаду RB0/INT, 'пределитель перед WDT
Delayms 100 ' Wait for LCD to startup Cls ' Clear the LCD
'+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ' Основная программа '-------------------------------------------------------------------------------
clock=$b0 'устойчевей работает при значении В0 Print at 1,1, "clock=", hex2 clock gosub lcd INTCON = %10010000 'Разрешение внешнего прерывания On Interrupt intRB0
press: if dataRC5<>0 then gosub lcd endif for row=0 to 3 PORTB= (dcd (row +4))^$ff 'Установка порта № строка+4 в 0
if PORTB.3=0 then delayms 20 if PORTB.3=0 then klav=row goto klaviatura endif endif if PORTB.2=0 then delayms 20 if PORTB.2=0 then klav=row +4 goto klaviatura endif endif next row goto press
disable 'Обработка переменной клавиатуры klaviatura: if klav=0 then if clock=$bf then press clock=clock +1 Print at 1,1, "clock=", hex2 clock delayms 200 endif
if klav=1 then if clock=$91 then press clock=clock -1 Print at 1,1, "clock=", hex2 clock delayms 200 endif goto press
'Comand
lcd: print at 2,1, "dataRC5=", hex2 datarc5 dataRC5=0 return enable '------------------------------------------------------------------------------- ' Обработка внешнего прерывания по входу порта В0 '------------------------------------------------------------------------------- disable 'Запрешение прерываний перед обработчиком intRB0: INTCON = %00000000 'Запрет прерываний битами '------------------------------------------------------------------------------- ' декодированиe кода ДУ RC-5 '------------------------------------------------------------------------------- datarc5=$0001 'Стартовый бит countr=0 'Обнуление счетчика временных интервалов
while PORTB.0=0 and countr<11 'Проверка call timer wend if countr>5 and countr<11 then while countr<13 '13 чтобы в центре импульса call timer 'Считаем временные интервалы wend for h=0 to 12 'Обработка 13 битов dataRC5=dataRC5<<1 'Сдвиг на одну позицию if PORTB.0=1 then ' dataRC5=dataRC5 | $0001 '1 в младшем разряде countr=0 'Начало отсчета 16 интервалов while PORTB.0=1 and countr<16 'Проверка помехи, выход из цикла call timer 'если порт=0 wend else dataRC5=dataRC5 & $FFFE '0 в младшем разряде countr=0 ' while PORTB.0=0 and countr<16 ' выход из цикла если порт=1 call timer ' wend endif if countr=16 and h<12 then 'Слишком долго тянулся лог. уровень dataRC5=0 goto exit 'поэтому выход без команды endif for j=0 to 11 ' Досчет до 16 (4+12) интервалов call timer next j next h addr= datarc5>>6 if (addr.lowbyte & $1f) <> addrrc5 then 'проверка адреса datarc5=0 endif else dataRC5=0 ' endif exit: datarc5=datarc5 & $3f 'Команда 0 - 63 (0-пустая команда)
INTCON = %10010000 'Разрешение внешнего прерывания и сброс флага resume '------------------------------------------------------------------------------- ' Обработка переполнения таймера '-------------------------------------------------------------------------------
asm timer movf clock,0 ;начальная загрузка регистра таймера movwf TMR0 bcf INTCON,2 ;начальный сброс флага loop btfss INTCON,2 ;проверка флага переполнения таймера goto loop incf countr,1 ;инкремент счетчика интервалов bcf INTCON,2 ;сброс флага return endasm
enable 'Разрешение прерываний после обработчика
end
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
ADMIN |
Дата: Чт, 01.11.2007, 17:48 | Сообщение # 2 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
А в чем именно загвоздка? Хоть что-то есть?
|
|
|
|
brown |
Дата: Пт, 10.04.2009, 18:42 | Сообщение # 3 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Ура, заработало! Дело оказалось вот в чем: В проге (см. выше) была объявлена переменная clock для её подбора прямо в железе, она используеться в подпрограмме на асме. После нужное значение Было заявлено в проекте как константа бейсика, и ... процедура отказалась работать. После необходимых изменений- ОК! Вывод: Использовать только переменные во вставках на АСМе, константы АСМа- только в АСме. Добавлено (28.11.2007, 09:56) --------------------------------------------- Скачал Протон V 3.2.5.5 с сайта в котором есть оператор функция RC5IN. Пробывал программу по примеру мануала в железе - не работает. Изменял ее по собственным соображениям - тот же результат. Что делаю неправильно? Code Device=16F876A '**************************************************************** ' LCD should be connected as follows: ' LCD PIC ' DB4 PortB.4 ' DB5 PortB.5 ' DB6 PortB.6 ' DB7 PortB.7 ' RS PortA.0 (add 4.7K pullup resistor to 5 volts) ' E PortA.1 ' RW Ground ' Vdd 5 volts ' Vss Ground ' Vo 20K potentiometer (or ground) ' DB0-3 No connect '------------------------------------------------------------- Declare XTAL 4 Declare LCD_RSPIN=PORTA.0 Declare LCD_ENPIN=PORTA.1 Declare LCD_DTPIN=PORTB.4 Declare LCD_INTERFACE=4 Declare LCD_LINES=2
Declare RC5IN_PIN PORTB.0
Dim RC5_WORD As Word ' Create a WORD variable to receive the data Dim RC5_COMMAND As RC5_WORD.LowByte ' Alias the COMMAND byte to RC5_WORD low byte Dim RC5_SYSTEM As RC5_WORD.HighByte ' Alias the COMMAND byte to RC5_WORD high byte
'------------------------------------------------------------------------------- ' Инициализация MK '------------------------------------------------------------------------------- ADCON1 = 7 'Все порты цифровые ADCON0.0 = 0 'АЦП выключен SSPCON.5 = 0 'Модуль SSP выкл., порты цифровые TRISB = %00001111 'Порты 0..3 на вход 'OPTION_REG=%00001000'On pull-up PORTB,прерывания по спаду RB0/INT CLK TMR0=1:4 OPTION_REG.7=0 'On pull-up PORTB TRISC = %11000000 'На выход TRISA = %00000 'На выход 'INTCON.7=0 'Disable interapt DelayMS 500 ' Wait for LCD to startup ,5 сек
Print $FE, 1 : DelayMS 30 'Очистить дисплей, курсор выключить Print $FE,$0C : DelayMS 30 RC5_COMMAND= 255 'Пустая команда или ее отсутствие Print At 1,1,"SYSTEM ",Dec RC5_SYSTEM," " ' Display the SYSTEM value Print At 2,1,"COMMAND ",Dec RC5_COMMAND," " ' Display the COMMAND value rec: While RC5_COMMAND = 255 ' Create an infinite loop 'Repeat RC5_WORD = RC5In ' Receive a signal from the infrared sensor Wend 'Until RC5_COMMAND<> 255 ' Keep looking until a valid header found Print At 1,1,"SYSTEM ",Dec RC5_SYSTEM," " ' Display the SYSTEM value Print At 2,1,"COMMAND ",Dec RC5_COMMAND," " ' Display the COMMAND value RC5_COMMAND= 255 GoTo rec
End Добавлено (10.04.2009, 6:42:05) --------------------------------------------- Полезная ссылка по этой теме http://www.picbasic.nl/rc5_display_uk.htm
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
lvitat |
Дата: Вс, 11.10.2009, 07:48 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Начал соображать
Сообщений:
35
Замечания:
±
На сайте с 13.06.2008
Статус:
Offline
|
RE: http://picbasic.ru/forum/28-284-1 Вот примерчик прошлых зимних вечеров - управление люстрой (за кривость неругайте,работает и меня устраивает)
Я не волшебник, я только учусь ...
|
|
|
|
demanik |
Дата: Вс, 11.10.2009, 11:53 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
448
Замечания:
±
На сайте с 11.12.2007
Статус:
Offline
|
Quote (brown) С огорчением обнаружил, что компилятор Протона версии 2.2... В каталоге файлов лежит "Протон + Протеус" в 5-частях с компилятором 3.2.5.5
Попробуй всё и вся... может быть пол...
|
|
|
|
brown |
Дата: Вс, 11.10.2009, 15:36 | Сообщение # 6 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
lvitat, спасибо за пример. Надо будет разобраться почему у меня в свое время эта команда не захотела работать? demanik, сейчас работаю Quote (demanik) с компилятором 3.2.5.5 . Работал когда-то над проектом в РВР и пришлось делать процедуру RC5 Quote (brown) По алгоритму С. Рюмика описаному в журнале Радиохобби 2/2006 . После появления протона Quote (brown) Пробывал программу по примеру мануала в железе - не работает. Изменял ее по собственным соображениям - тот же результат. Что делаю неправильно? http://www.picbasic.ru/forum/5-31-226-16-1239374525 Хочется разобраться на будущее.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
Matrix252005 |
Дата: Чт, 04.11.2010, 11:14 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток. Смотрю, никто больше не писал про "RC5In". Или не интересно, либо, так и ни у кого и не получилось... brown, у Вас получилось запустить Ваш проект???? С оператором "RC5In" так и не хочет работать, а вот с "SonyIn", даже что то получается, но не конкретно... При нажатии на кнопку, постоянно меняется значение на экране. В чем может быть дело???
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
brown |
Дата: Чт, 04.11.2010, 19:20 | Сообщение # 8 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
RC5In так и не заработал. Работает в усилке процедура по алгоритму Рюмика. С остальными программами не разбирался - нет надобности и свободного времени.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
MiXaS |
Дата: Пт, 10.12.2010, 13:36 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Уважаемые специалисты! Умер DVD плеер BBK. Остался рабочий пульт и приёмник (ИК). Можно ли его пристроить например для управления TDA 7318? Заранее СПАСИБО!!!
|
|
|
|
Matrix252005 |
Дата: Пт, 10.12.2010, 13:45 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток. MiXaS, я как раз этим занимаюсь... Вот тут есть готовая прога (работает!!!!) http://www.picbasic.nl/rc5_display_uk.htm
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
MiXaS |
Дата: Пт, 10.12.2010, 14:06 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Ух ты!! Спасибо Matrix252005!!!! Добавлено (10.12.2010, 14.06.13) --------------------------------------------- Я здесь уже был. Точно буду пробовать раз Вы сказали, что работает!
|
|
|
|
Matrix252005 |
Дата: Пт, 10.12.2010, 15:00 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Он то работает, но не со всеми пультами. Я использую HL536aa3p (ИК приемник - аналог TSOP1736), пульт от двд - ренфорд. Еще куча пультов, просто не может понять... Не знаю какой протокол они используют... Буду мучатся дальше.... Добавлено (10.12.2010, 15.00.44) --------------------------------------------- MiXaS, у меня получилось... ИК приемник - HL536aa3p (подключен напрямую), пульт - двд ренфорд, прога взята из инструкции по протону - RC5In. РАБОТАЕТ!!!!!!!!
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
mikhail09p |
Дата: Пт, 10.12.2010, 16:47 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
И что, со всеми пультами, которые у тебя есть? Николай, ты в железе пробывал?
|
|
|
|
Matrix252005 |
Дата: Пт, 10.12.2010, 16:50 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Да в железе!!! МК 877А + LCD 16х2. Пульт только один заработал... от двд - ренфорд. От мр3 и от часов не захотел. Будем мучить дальше...
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
MiXaS |
Дата: Пн, 13.12.2010, 14:55 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
Matrix252005? Руки у меня пока не доходят, но обязательно попробую! Да и еще, где взять эту инструкцию??
|
|
|
|