AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
25.08.2012, 15:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
Сообщение от Flopix
|
Вот мой код. Там правда много лишнего так как он отсылает данные по USB на ПК. Но думаю разберетесь. Весь прием кода рабатает в подпрограммах прерывания. Да обратите внимания что частота таймера у меня установлена выше чем в вашем примере.
Из моего примера вам понадобятся функции:
//подпрограмма прерывания по переполнению Timer0
ISR(TIMER0_OVF_vect)
//подпрограмма прерывания по INT1
ISR(SIG_INTERRUPT1)
Ну и настройки таймера из void init_devices(void) возьмите.
|
Сижу разбираюсь ![Улыбка](images/smilies/icon_smile.gif) я понял что эти процедурки. Ща надо отследить что за переменные, где плюсуются и т.д.
|
|
|
|
25.08.2012, 15:11
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
pulseTime = tim0_ovf_cnt * 256 + TCNT0;
tim0_ovf_cnt - 65535 хранит макс значение? Какой тип переменной, непойму ![Улыбка](images/smilies/icon_smile.gif) ?
Таймер 0 переполняется 976 раз за 1 сек. Значит примерно одно переполнение равно 1 мс. Значит эта строка подсчитывает общий счет таймера. Понял, вкурил... Точно так правильнее и точнее...
if (VB(PIND, 3) › 0)
{
sigTime = pulseTime;
}
тут мы запоминаем значение времени прошедшего?
переменнач cnt что считает?
Последний раз редактировалось miwutka; 25.08.2012 в 15:31.
|
|
|
|
25.08.2012, 15:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 19.08.2006
Адрес: Львов
Сообщений: 1,616
Сказал спасибо: 65
Сказали Спасибо 315 раз(а) в 264 сообщении(ях)
|
Re: RC5+atmega 8
Сообщение от miwutka
|
я думаю код итак понятен в кратце, если ВЫ опытный программер. Если я в кодах без коментариев разбираюсь в общем, то вы тем более. Непонимаю этих подробных описаний как для новичков. Коментарий норм, но только вы ведь не говорите "пОйду в магазин", а говорите "пАйду", и форум не урок русского языка Лучше подкидывайте решения, а не советы как слова писать
|
Запомните, на форуме никто и никому не обязан подкидывать решений.
Решения человек должен принимать самостоятельно. Во всяком случае во взрослом возрасте, когда он уже человек.
Русскому языку я вас не учу, вы могли это заметить. Указал на ошибки в произношении слов иностранного происхождения. Хотя по написанию "Непонимаю", "итак", "коментариев", то не мешало бы и русский подтянуть..
Удачи и успехов в освоении чужих решений.
Извините за вмешательство.
__________________
С уважением,
Vic / ut1wpr
|
|
|
|
25.08.2012, 15:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
блин еще один кент 1_st от которого не мог избавиться в теме про светомузыку, которую еще чуть позже сделаю... Неужели вы не понимаете что тут тема есть конкретнаяя, а не про произношение и т.д. ???
|
|
|
|
25.08.2012, 15:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
я сейчас весь код изучу и напишу вопросы некоторые еще. Впринцыпе понятен код. Изучаю на бумаге
|
|
|
|
25.08.2012, 15:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
pulseTime , sigTime , что считают переменные?
sigArr[cnt] , testArr[cnt] , - тоже что пишеться в масив?
|
|
|
|
25.08.2012, 16:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: RC5+atmega 8
Сообщение от Flopix
|
Ну и настройки таймера из void init_devices(void) возьмите.
|
Я, конечно, дико извиняюсь, но нафига таймер на 250кГц молотит, если больше нигде не используется?
Не проще ли было настроить его на 1 таймслот ИК-последовательности и убрать из прерывания все эти двухбайтные проверки интераций таймера?
Не по-джедайски как-то в прерывании столько времени висеть...
|
|
|
|
25.08.2012, 17:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: RC5+atmega 8
Сообщение от omercury
|
Я, конечно, дико извиняюсь, но нафига таймер на 250кГц молотит, если больше нигде не используется?
Не проще ли было настроить его на 1 таймслот ИК-последовательности и убрать из прерывания все эти двухбайтные проверки интераций таймера?
Не по-джедайски как-то в прерывании столько времени висеть...
|
спасибо за совет. Я разберусь с кодом, и так сделаю... логично ![Улыбка](images/smilies/icon_smile.gif) Надо наверно выбрать частоту таймера нужную и настроить на прерывание по совпадению???
|
|
|
|
25.08.2012, 17:40
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
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;
пОПРАВЬТЕ МЕНЯ ТУТ... Забуксовал))
|
|
|
|
25.08.2012, 19:11
|
|
Гражданин KAZUS.RU
Регистрация: 31.12.2010
Сообщений: 837
Сказал спасибо: 371
Сказали Спасибо 153 раз(а) в 113 сообщении(ях)
|
Re: RC5+atmega 8
omercury,
минимальная задержка измеряемая таймером = 0,88Мс
максимальная 88Мс (пауза между повторными посылками при зажатии кнопки)
Разница в длительности в 100 раз. Как вы предлагаете в 1 байте хранить эти задержки с достаточной точностью?
Не по-джедайски как-то в прерывании столько времени висеть... - 1 инкремент и 2 команды сравнения это разве много?
К тому же таймер будет использоваться и для других задач, это не окончательный код.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
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.
|
|