Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

RC5+atmega 8

Непрочитано 25.08.2012, 15:02  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

Сообщение от Flopix Посмотреть сообщение
Вот мой код. Там правда много лишнего так как он отсылает данные по USB на ПК. Но думаю разберетесь. Весь прием кода рабатает в подпрограммах прерывания. Да обратите внимания что частота таймера у меня установлена выше чем в вашем примере.


Из моего примера вам понадобятся функции:

//подпрограмма прерывания по переполнению Timer0
ISR(TIMER0_OVF_vect)

//подпрограмма прерывания по INT1
ISR(SIG_INTERRUPT1)

Ну и настройки таймера из void init_devices(void) возьмите.
Сижу разбираюсь я понял что эти процедурки. Ща надо отследить что за переменные, где плюсуются и т.д.
Реклама:
miwutka вне форума  
Непрочитано 25.08.2012, 15:11  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

pulseTime = tim0_ovf_cnt * 256 + TCNT0;
tim0_ovf_cnt - 65535 хранит макс значение? Какой тип переменной, непойму ?
Таймер 0 переполняется 976 раз за 1 сек. Значит примерно одно переполнение равно 1 мс. Значит эта строка подсчитывает общий счет таймера. Понял, вкурил... Точно так правильнее и точнее...

if (VB(PIND, 3) › 0)
{
sigTime = pulseTime;
}

тут мы запоминаем значение времени прошедшего?
переменнач cnt что считает?

Последний раз редактировалось miwutka; 25.08.2012 в 15:31.
miwutka вне форума  
Непрочитано 25.08.2012, 15:20  
ut1wpr
Почётный гражданин KAZUS.RUN
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,613
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: RC5+atmega 8

Сообщение от miwutka Посмотреть сообщение
я думаю код итак понятен в кратце, если ВЫ опытный программер. Если я в кодах без коментариев разбираюсь в общем, то вы тем более. Непонимаю этих подробных описаний как для новичков. Коментарий норм, но только вы ведь не говорите "пОйду в магазин", а говорите "пАйду", и форум не урок русского языка Лучше подкидывайте решения, а не советы как слова писать
Запомните, на форуме никто и никому не обязан подкидывать решений.
Решения человек должен принимать самостоятельно. Во всяком случае во взрослом возрасте, когда он уже человек.
Русскому языку я вас не учу, вы могли это заметить. Указал на ошибки в произношении слов иностранного происхождения. Хотя по написанию "Непонимаю", "итак", "коментариев", то не мешало бы и русский подтянуть..
Удачи и успехов в освоении чужих решений.
Извините за вмешательство.
__________________
С уважением,
Vic / ut1wpr
ut1wpr вне форума  
Непрочитано 25.08.2012, 15:23  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

блин еще один кент 1_st от которого не мог избавиться в теме про светомузыку, которую еще чуть позже сделаю... Неужели вы не понимаете что тут тема есть конкретнаяя, а не про произношение и т.д. ???
miwutka вне форума  
Непрочитано 25.08.2012, 15:28  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

я сейчас весь код изучу и напишу вопросы некоторые еще. Впринцыпе понятен код. Изучаю на бумаге
miwutka вне форума  
Непрочитано 25.08.2012, 15:39  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

pulseTime , sigTime , что считают переменные?
sigArr[cnt] , testArr[cnt] , - тоже что пишеться в масив?
miwutka вне форума  
Непрочитано 25.08.2012, 16:54  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: RC5+atmega 8

Сообщение от Flopix Посмотреть сообщение
Ну и настройки таймера из void init_devices(void) возьмите.
Я, конечно, дико извиняюсь, но нафига таймер на 250кГц молотит, если больше нигде не используется?
Не проще ли было настроить его на 1 таймслот ИК-последовательности и убрать из прерывания все эти двухбайтные проверки интераций таймера?
Не по-джедайски как-то в прерывании столько времени висеть...
omercury вне форума  
Непрочитано 25.08.2012, 17:35  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

Сообщение от omercury Посмотреть сообщение
Я, конечно, дико извиняюсь, но нафига таймер на 250кГц молотит, если больше нигде не используется?
Не проще ли было настроить его на 1 таймслот ИК-последовательности и убрать из прерывания все эти двухбайтные проверки интераций таймера?
Не по-джедайски как-то в прерывании столько времени висеть...
спасибо за совет. Я разберусь с кодом, и так сделаю... логично Надо наверно выбрать частоту таймера нужную и настроить на прерывание по совпадению???
miwutka вне форума  
Непрочитано 25.08.2012, 17:40  
miwutka
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
miwutka на пути к лучшему
По умолчанию Re: RC5+atmega 8

в начале программы таймер0 считает. Если 200 мс нет сигнала - сброс счетчика. Если пришел сигнал то, pulseTime = tim0_ovf_cnt * 256 + TCNT0; и проверяем значение сигнала на ножке D3(INT1). Если она больше нуля то есть 1 значит sigTime = pulseTime;.
По идее когда прийдет самый первый импульс то это передний фронт и значит будет равно 1??? Например прошло 20 мс, TCNT=100 (pulseTime = 20* 256 + 100=5220

pulseTime = 20 * 256 + 100; // =5220 считает общее количество счета
if (VB(PIND, 3) › 0) // условие выполнилось
{
sigTime = pulseTime;// =5220 запоминаем значение времени прошедшего
}
else
{
if ((cnt ‹ 100) && (sigTime › 0))
{
pult_bit = error_bit;
if ((sigTime › 2100) && (sigTime ‹ 2500) && (pulseTime › 1000) && (pulseTime ‹ 1200))//старт бит
{

.........
};
//обнуляем таймер
tim0_ovf_cnt = 0;
TCNT0 = 0;

Это так обработался передний фронт сигнала.
Дальше опишу как обрабатывается задний фронт сигнала... (поправте если не так) Таймер у нас по сбросу начал считать время окончания стартового бита.
Допустим 9 мс стартовый бит.
pulseTime = 2300; // считает общее количество счета
if (VB(PIND, 3) › 0) // условие не выполнилось
{
sigTime = pulseTime;// =5220 запоминаем значение времени прошедшего
}
else
{
if ((cnt ‹ 100) && (sigTime › 0)) // условие выполнилось
{
pult_bit = error_bit;
if ((sigTime › 2100) && (sigTime ‹ 2500) && (pulseTime › 1000) && (pulseTime ‹ 1200))//старт бит УСЛОВИЕ НЕ ВЫПОЛНЯЕТСЯ ТАК КАК sigTime=5220
{

.........
};
//обнуляем таймер
tim0_ovf_cnt = 0;
TCNT0 = 0;

пОПРАВЬТЕ МЕНЯ ТУТ... Забуксовал))
miwutka вне форума  
Непрочитано 25.08.2012, 19:11  
Flopix
Гражданин KAZUS.RUN
 
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
Flopix на пути к лучшему
По умолчанию Re: RC5+atmega 8

omercury,
минимальная задержка измеряемая таймером = 0,88Мс
максимальная 88Мс (пауза между повторными посылками при зажатии кнопки)
Разница в длительности в 100 раз. Как вы предлагаете в 1 байте хранить эти задержки с достаточной точностью?


Не по-джедайски как-то в прерывании столько времени висеть... - 1 инкремент и 2 команды сравнения это разве много?


К тому же таймер будет использоваться и для других задач, это не окончательный код.
Flopix вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Декодер RC5 vmax1987 Микроконтроллеры, АЦП, память и т.д 38 25.08.2010 22:26
RC5 transmitter Saadov Микроконтроллеры, АЦП, память и т.д 12 22.12.2008 21:08
Приемник RC5 в малом корпусе? Muzicant Микроконтроллеры, АЦП, память и т.д 1 17.02.2008 11:57
Совмещение динамической индикации и приема команд RC5 megAdriVeR Микроконтроллеры, АЦП, память и т.д 22 24.07.2007 21:18
Декодирование команд RC5 R_V_A Микроконтроллеры, АЦП, память и т.д 10 20.12.2006 19:52


Часовой пояс GMT +4, время: 21:37.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.