roboforum.ru

Технический форум по робототехнике.
Текущее время: 22 апр 2025, 19:27

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 02:11 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Столкнулся с проблемой в Bascom при программировании ИК пульта с использованием протокола RC5. В основном цикле МК проблем не возникает. При использовании функции Getrc5 в прерывании (в моем случае Int1) на вызове этой функции все висло. Поискав в некоторых источниках, я нашел выход из этой проблемы. Ниже привожу листинг использования этой функции в обработчике прерывания:
Код:
Learn_rc5:
   Disable Int1
   Enable Interrupts
   Getrc5(rc5byte1 , Rc5byte2)
   Enable Interrupts
   If Rc5byte1 <> 255 And Rc5byte2 <> 255 Then
      Rc5byte2 = Rc5byte2 And &B01111111
      Print Chr(12);
      Print "Address - " ; Rc5byte1
      Print "Command - " ; Rc5byte2
   End If
  Gifr = Gifr Or &B10000000                                 'Clear Flag Int1
  Enable Int1
Return

Обратите внимание на значение регистра GIFR. В этом листинге значение для МК ATMega32.

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 17:05 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
Извините, но сброс флага источника прерывания - обязательное условие для всех МК


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 17:20 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
Сброс флага это не на него акцентирую свое внимание (хотя и про него народ тоже забывает иногда) акцент идет на использование фунций разрешения/запрета прерываний

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 17:37 
Не в сети
Site Admin
Аватара пользователя

Зарегистрирован: 09 фев 2006, 15:36
Сообщения: 3339
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков
Что-то мне подсказывает, что GetRC5() ждет начала посылки (проверяет поллингом).
А в прерывания что-либо ждать очень плохая идея. Чем прерывание меньше (по тактам) — тем лучше.

_________________
Linux user | Firefox user


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 17:53 
Не в сети
Аватара пользователя

Зарегистрирован: 04 дек 2008, 22:44
Сообщения: 4363
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович
нет, она без ожидания работает, насколько я понял, либо поймала сигнал, либо нет (практически проверял). В прерывании вызывается потому, что само прерывание срабатывает по приему посылки от ИК пульта

_________________
if(!Operate) Read(pDatasheet);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 20:01 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
В принципе, там необходимости в прерывании вообще нет. А стандартный вариант обработки такой:
прерывание,
запрет прерывания,
обработка,
сброс флага,
разрешение прерывания.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 23 мар 2009, 21:53 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
почему там необходимости в прерывании вообще нет???


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 24 мар 2009, 23:27 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
Я пару лет назад мелкочиповские примеры ИК декодеров смотрел, так там тупо отслеживают изменение по входу, без всяких прерываний. Если не надо загонять декодер в спячку или срочно выпадать из основной программы, то прерывания не нужны.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 24 мар 2009, 23:33 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
тупо циклу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 11:12 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
Не, не совсем по циклу. МК висит на входе до изменения уровня. Когда пришел импульс начинается обработка, с возвратом в исходное если это не стартовый строб.
Допустим, что МК бота кроме ДУ обслуживает бамперы и измеряет батарейку. Если сигналы ДУ проверять/декодировать между процедурами, то все будет нормально. А если по любой помехе, в т.ч. и от бамперов уходить в прерывание, то :cry:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 11:14 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
а как узнать об изменениее уровня, если не прерыванием и не тупым циклом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 11:27 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
В свободное от выполнения основной программы время делаем BTFSS - bit test или что-нибудь типа
if PORTA==0 then ... else break


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 11:30 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
а что мешает запрещать прерывания в основной программе?
а где гарантия что не проспишь посылку RC5 ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 16:28 
Не в сети

Зарегистрирован: 01 дек 2008, 19:21
Сообщения: 281
А что дает прерывание, кроме лишних телодвижений основной программе? Посылка достаточно длинная и не однократная, проще ее обработать проверяя вход в паузах основных процедур.
Даже когда МК только декодер, прерывание ничего не дает. Можно просто висеть на входе без всяких прерываний. Разве что для усложнения себе жизни :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с использованием функции Getrc5 в прерывании
СообщениеДобавлено: 25 мар 2009, 17:53 
Не в сети
Аватара пользователя

Зарегистрирован: 28 дек 2004, 20:33
Сообщения: 10211
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович
ну раз ты всё осознал, я то потру наш флуд.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO