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

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

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

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

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

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

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

 
Опции темы
Непрочитано 25.08.2012, 15:02  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 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.RU
 
Регистрация: 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.RU
 
Аватар для ut1wpr
 
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
ut1wpr на пути к лучшему
По умолчанию Re: RC5+atmega 8

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

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

я сейчас весь код изучу и напишу вопросы некоторые еще. Впринцыпе понятен код. Изучаю на бумаге
miwutka вне форума  
Непрочитано 25.08.2012, 15:39  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: RC5+atmega 8

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

Сообщение от omercury Посмотреть сообщение
Я, конечно, дико извиняюсь, но нафига таймер на 250кГц молотит, если больше нигде не используется?
Не проще ли было настроить его на 1 таймслот ИК-последовательности и убрать из прерывания все эти двухбайтные проверки интераций таймера?
Не по-джедайски как-то в прерывании столько времени висеть...
спасибо за совет. Я разберусь с кодом, и так сделаю... логично Надо наверно выбрать частоту таймера нужную и настроить на прерывание по совпадению???
miwutka вне форума  
Непрочитано 25.08.2012, 17:40  
miwutka
Почётный гражданин KAZUS.RU
 
Регистрация: 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.RU
 
Регистрация: 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, время: 20:07.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot