Вы не вошли.
атмеловский апнот: AVR410: RC5 IR Remote Control Receiver написан уже "авр-овским" ассемблером, найдете там что либо для себя
Хороший аппнот. Тока вот не совсем ясно, что бы это значило:
When the detect subroutine is called, it first waits for the data line to be idle high for
more than 3.5 ms. Then, a start bit can be detected.
Я перевел так:
"Когда вызывается подпрограмма детектирования, в первую очередь ожидается что линия данных будет находиться в состоянии покоя (высокий уровень) дольше чем 3,5 мс. Значит, стартовый бит может быть принят".
Однако не понял все равно ничего. Зачем ждать 3,5 мс??
И откуда они там возьмутся? 3,5 мс - это чуть меньше двух тактов, а всостоянии покоя линия может находиться скоько угодно долго.
странная цифра и странное действие. Не охота применять, не разобравшись.
......There is someone in my head, but it's not me.......
Вне форума
журналСхемотехника № 12 2003 (стр 41-42) - Организация обмена информацией по ИК каналу (AT90S2313)
Радио 2005 №11 (стр 30-31) -Микроконтроллерная система дистанционного управления
-AT90S2313
журнал РадиоХобби за 2006 год №1(стр.44-47)-ATmega8
Вне форума
biprog - nejen ISP programator
web.quick.cz/ruckl/biprog/biprog.html
Достойный выбор программатора для программирования микроконтроллеров
фирмы ATMEL
Вне форума
biprog - nejen ISP programator
web.quick.cz/ruckl/biprog/biprog.html
Достойный выбор программатора для программирования микроконтроллеров
фирмы ATMEL
а что в нем особенного?
1. Чем не устраивает AVRISP или более развитый на базе STK500
2. Он еще на СОМпорт, что в данное время неактуально
Андрей Смирнов
Вне форума
VladI+ пишет:biprog - nejen ISP programator
web.quick.cz/ruckl/biprog/biprog.html
Достойный выбор программатора для программирования микроконтроллеров
фирмы ATMELа что в нем особенного?
1. Чем не устраивает AVRISP или более развитый на базе STK500
2. Он еще на СОМпорт, что в данное время неактуально
Просто это STK500 +AVR910ю И всего одна м/с.
Читаем:
Automatická změna režimu (AVRISP/AVR910) podle ovládacího programu
Možnost upgrade firmware pomocí bootloaderu
Poslední použitá polarita signálu RESET je uložena v paměti EEPROM a platí i po zapnutí
Poslední použitá frekvence SCK je uložena v paměti EEPROM a platí i po zapnutí
Podpora všech ISP mikroprocesorů Atmel včetně AT89S51/52, AT89S8252 a AT89S2051/4051
Jednostranná, snadno amatérsky zhotovitelná, deska plošných spojů
Nevyužité porty ATmega8 jsou vyvedeny na konektor a umožňují i jiné využití hardware
И порт USB есть.
Отредактировано VladI+ (01.11.2006 07:49:05)
Вне форума
Pyku_He_oTTyda пишет:атмеловский апнот: AVR410: RC5 IR Remote Control Receiver написан уже "авр-овским" ассемблером, найдете там что либо для себя
Хороший аппнот. Тока вот не совсем ясно, что бы это значило:
When the detect subroutine is called, it first waits for the data line to be idle high for
more than 3.5 ms. Then, a start bit can be detected.Я перевел так:
"Когда вызывается подпрограмма детектирования, в первую очередь ожидается что линия данных будет находиться в состоянии покоя (высокий уровень) дольше чем 3,5 мс. Значит, стартовый бит может быть принят".
Однако не понял все равно ничего. Зачем ждать 3,5 мс??
И откуда они там возьмутся? 3,5 мс - это чуть меньше двух тактов, а всостоянии покоя линия может находиться скоько угодно долго.странная цифра и странное действие. Не охота применять, не разобравшись.
1. Про перевод - учите "родной"английский язык".
2. Где берут такие тупые процы, у которых 3 милисекунды - это два такта?
3. 3,5 мс - а чаще 5 мс - это время, которое обычно используют для подавления ДРЕБЕЗГА.
Именно поэтому (не) Ваша подпрограмма 3,5 милисекунды проверяет, что на входе будет стабильно высокий уровень (а не дребез). И потом начинается распознавание стартового бита...
Почему когда мы нарушаем, нас штрафуют, а когда всё делаем правильно, с нас берут налоги?....
Вне форума
Зачем ждать 3,5 мс??
Ждать нужно для того, чтобы убедиться, что мы вызвали функцию detect не в середине посылки. Нам нужно "поймать" стартовый бит, а он всегда передается первым в посылке. Поэтому перед ним всегда должна быть "тишина". Вот это мы и проверяем.
И откуда они там возьмутся? 3,5 мс - это чуть меньше двух тактов, а в состоянии покоя линия может находиться сколь угодно долго. Странная цифра и странное действие. Не охота применять, не разобравшись.
Выбор значения 3.5 мс достаточно произволен. Интервал должен быть не меньше одного такта RC-5 (1.778 мс), но и не слишком большим, чтобы декодирование состоялось при вызове detect непосредственно перед старт-битом.
Надо сказать, что программные декодеры RC-5, которые вызываются из основной программы - это несерьезно. Нормальный декодер должен работать по прерываниям. Чтобы обработчик был как можно короче, потребуется задействовать два прерывания - внешнее (куда нужно подать сигнал с выхода фотоприемника) и прерывание таймера (для контроля всех временных интервалов).
Вне форума
Основная проблема заключается в том, что я не совсем понимаю суть, т.е, что именно надо сделать для декодирования RC5. В том аппноте написано:
The measurement of the start bit is used to calculate two reference times, ref1 and ref2, which are used when sampling the data line. The program uses the edge in the middle of every bit to synchronize the timing. 3/4 bit length after this edge, the line is sampled. This is in the middle of the first half of the next bit (see Figure 5). The state is stored and the routine waits for the middle edge. Then, the timer is synchronized again and everything is repeated for the following bits. If the synchronizing edge is not detected within 5/4 bit times from the previous synchronizing edge, this is detected as a fault and the routine terminates. When all the bits are received, the command and system address are stored in the
“command” and “system” registers. The control bit is stored in bit 6 of “command”.
Т.е. они меряют стартовый бит для получения двух опорных временных интервалов. Затем ждут середины такта (где-то там будет перепад), через 3/4 такта после перепада делают выборку (а ведь это-то уже следующий бит) и сохраняют значение. С виду все просто, конечно. Ну и нужны еще условия о которых там говориться. Если стартовый импульс оказался длинее 1,1мс - ошибка, если через 5/4 после середины предидущего бита новый перепад не замечен - ошибка и тд.
Стартовых бита ведь 2. Можно по-моему первый использовать для инициирования прерывания, а второй уже мерить. Тока ни фига не ясно, как получить значение в 3/4 такта. Измерив импульс (хоть нулевую, хоть единичную его часть) мы получим 1/2 такта. 3/4 можно бы получить как 3/4 = (1/2)+(1/2)/2, но делить-то мы не можем (по крайней мере "влоб" такой команды нет, надо изголяться, и неизвестно сколько времени уйдет на эту операцию). В аппноте это как-то сделано, но как - я не понял.
Да, наверно надо идти водилой работать...
Отредактировано Матроскин (01.11.2006 14:00:24)
......There is someone in my head, but it's not me.......
Вне форума
Тока ни фига не ясно, как получить значение в 3/4 такта. 3/4 можно бы получить как 3/4 = (1/2)+(1/2)/2, но делить-то мы не можем
Деление на 2 - это просто один сдвиг влево, одна команда.
Например,
;temp = 1/2 периода
mov ref1,temp ;ref1 = 1/2 периода
lsr ref1 ;ref1 = 1/4 периода
add temp,ref1 ;temp = 3/4 периода
Вне форума
Блин, все оказывается проще! Тока вот сдвиг не влево а вправо. lsr - logical shift right, да и так если сосчитать. 0b1000 = 8 а 0b100 = 4
......There is someone in my head, but it's not me.......
Вне форума
[ Сгенерировано за 0.069 сек, 8 запросов выполнено - Использовано памяти: 626.15 Кбайт (Пик: 676.52 Кбайт) ]