Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » RC5 (Дистанционное управление)
RC5
brown Дата: Чт, 01.11.2007, 03:39  |                                                                                                                Сообщение # 1
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 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


Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
ЯНДЕКС Дата: 01.11.2007
ADMIN Дата: Чт, 01.11.2007, 17:48  |                                                                                                                Сообщение # 2
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А в чем именно загвоздка? Хоть что-то есть?
brown Дата: Пт, 10.04.2009, 18:42  |                                                                                                                Сообщение # 3
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 13.06.2008

Статус: Offline

RE: http://picbasic.ru/forum/28-284-1
Вот примерчик прошлых зимних вечеров - управление люстрой (за кривость неругайте,работает и меня устраивает)
Прикрепления: Lamp.bas.rar (49.1 Kb)


Я не волшебник, я только учусь ...
demanik Дата: Вс, 11.10.2009, 11:53  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 448
Репутация: 10   ±
Замечания:   ±
На сайте с 11.12.2007

Статус: Offline

Quote (brown)
С огорчением обнаружил, что компилятор Протона версии 2.2...

В каталоге файлов лежит "Протон + Протеус" в 5-частях с компилятором 3.2.5.5 cool


Попробуй всё и вся... может быть пол...

brown Дата: Вс, 11.10.2009, 15:36  |                                                                                                                Сообщение # 6
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 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
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Приятного времени суток.

Смотрю, никто больше не писал про "RC5In". Или не интересно, либо, так и ни у кого и не получилось...
brown, у Вас получилось запустить Ваш проект???? С оператором "RC5In" так и не хочет работать, а вот с "SonyIn", даже что то получается, но не конкретно... При нажатии на кнопку, постоянно меняется значение на экране. В чем может быть дело???


THE TRUTH IS OUT THERE.

С уважением, Николай.
brown Дата: Чт, 04.11.2010, 19:20  |                                                                                                                Сообщение # 8
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

RC5In так и не заработал. Работает в усилке процедура по алгоритму Рюмика. С остальными программами не разбирался - нет надобности и свободного времени.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
MiXaS Дата: Пт, 10.12.2010, 13:36  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Уважаемые специалисты! Умер DVD плеер BBK. Остался рабочий пульт и приёмник (ИК). Можно ли его пристроить например для управления TDA 7318?
Заранее СПАСИБО!!!
Matrix252005 Дата: Пт, 10.12.2010, 13:45  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Ух ты!! Спасибо Matrix252005!!!!

Добавлено (10.12.2010, 14.06.13)
---------------------------------------------
Я здесь уже был. Точно буду пробовать раз Вы сказали, что работает!

ЯНДЕКС Дата: 10.12.2010
Matrix252005 Дата: Пт, 10.12.2010, 15:00  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Он то работает, но не со всеми пультами. Я использую HL536aa3p (ИК приемник - аналог TSOP1736), пульт от двд - ренфорд. Еще куча пультов, просто не может понять... Не знаю какой протокол они используют... Буду мучатся дальше....

Добавлено (10.12.2010, 15.00.44)
---------------------------------------------
MiXaS, у меня получилось... ИК приемник - HL536aa3p (подключен напрямую), пульт - двд ренфорд, прога взята из инструкции по протону - RC5In. РАБОТАЕТ!!!!!!!! smile


THE TRUTH IS OUT THERE.

С уважением, Николай.
mikhail09p Дата: Пт, 10.12.2010, 16:47  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 481
Репутация: 14   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

И что, со всеми пультами, которые у тебя есть?
Николай, ты в железе пробывал?
Matrix252005 Дата: Пт, 10.12.2010, 16:50  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

Да в железе!!! МК 877А + LCD 16х2. Пульт только один заработал... от двд - ренфорд. От мр3 и от часов не захотел. sad Будем мучить дальше...

THE TRUTH IS OUT THERE.

С уважением, Николай.
MiXaS Дата: Пн, 13.12.2010, 14:55  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 550
Репутация: 27   ±
Замечания:   ±
На сайте с 02.10.2010

Статус: Offline

Matrix252005? Руки у меня пока не доходят, но обязательно попробую! Да и еще, где взять эту инструкцию??
Форум Picbasic.ru » Программирование МК » Proton PicBasic » RC5 (Дистанционное управление)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: