20.02.2016, 02:42
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Timer2 in Atmega8 and Atmega16
Доброго времени уток. Столкнулся с такой проблемой. Запустил таймер2 на частоте 1000000 Гц. Включил прерывание по совпадению OCR2=50. В атмеге 16 работает со сбоями. В атмеге8 - идеально. Еще в обоих МК добавил прерывание по INT0(частота прерываний 50 Гц), добавил АЦП с частотой измерений 5кгц, и таймер1 с прерывание 0.5с тоже по совпадению OCR1A. В прерывании от OCR2 в обоих МК код тупо скопирован. Там просто включается ножка или выключается. 16-ая с этим не справляется. Может кто встречался с таким....????? Отключал все прерывания в 16-ой, и всеравно сбой.....
|
|
|
|
22.02.2016, 19:05
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
miwutka, Я таки не пойму, ты хоть чему-то учишься (я про то, как задавать вопросы)? Или всегда на телепатов рассчитываешь? Из твоего поста можно вывести только то, что ты в очередной раз напортачил в программе, скорее всего при инициализации таймеров, потому что не читал даташиты, вдруг есть отличия меги8 от меги16. .
|
|
|
Сказали "Спасибо" Someone
|
|
|
23.02.2016, 10:18
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
вот в атмега 8 :
PHP код:
|
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 1000,000 kHz // Mode: CTC top=OCR2 // OC2 output: Disconnected ASSR=0x00; TCCR2=0x0A; TCNT2=0x00; OCR2=49;
|
вот атмега 16
PHP код:
|
// Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 1000,000 kHz // Mode: CTC top=OCR2A // OC2 output: Disconnected // Timer Period: 0,05 ms 20000 of 1 sek ASSR=0‹‹AS2; TCCR2=0x0A; TCNT2=0x00; OCR2=0x31; //49
|
Вроде всё правильно?......
Последний раз редактировалось miwutka; 23.02.2016 в 17:56.
|
|
|
|
23.02.2016, 11:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
Часовой кварц на ноги повесь, раз асинхронный режим включаешь
|
|
|
|
23.02.2016, 12:00
|
|
Частый гость
Регистрация: 08.08.2008
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
Частоте 1 МГц соответствует вот такая запись
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 1000,000 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x09;
TCNT2=0x00;
OCR2=0x49;
|
|
|
|
23.02.2016, 12:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
SPKostenko, не не, сама атмега на 8МГц работает. То я таймер на 1 МГц завел через предделители.
niXto, ASSR=0‹‹AS2; - это же вроде выключен асинхронный режим...? я код набирал через визард в студии. Визард от CVAVR.
|
|
|
|
23.02.2016, 13:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.10.2006
Сообщений: 1,446
Сказал спасибо: 99
Сказали Спасибо 317 раз(а) в 233 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
Сообщение от miwutka
|
Там просто включается ножка или выключается. все равно сбой.....
|
Что значит сбой?
Покажи код прерываний. И подробно опиши что происходит. У меня есть одна догадка...
|
|
|
|
23.02.2016, 14:27
|
|
Прописка
Регистрация: 29.10.2008
Сообщений: 272
Сказал спасибо: 0
Сказали Спасибо 102 раз(а) в 95 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
А че так???
здесь одно TCCR2=0x0A;
а тут другое TCCR2=0x10; //0b00001010; хоты в бинарном виде 0x0A...
Так все ли одинаково???
|
|
|
|
23.02.2016, 14:49
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
Сообщение от miwutka
|
Вроде всё правильно?
|
Конечно нет, если ты хочешь отсчитать 50 тиков таймера работающего на частоте 1 МГц, или иными словами, дёргать вывод (как я интуитивно предполагаю) с частотой 20кГц.
|
|
|
|
23.02.2016, 14:59
|
|
Гражданин KAZUS.RU
Регистрация: 16.06.2005
Сообщений: 945
Сказал спасибо: 25
Сказали Спасибо 175 раз(а) в 124 сообщении(ях)
|
Re: Timer2 in Atmega8 and Atmega16
ЗЫ: Если намёк не понятен, поясняю - билдером тоже уметь надо пользоваться. Вообще же если память не подводит, тебе уже неоднократно давали совет выкинут нафиг билдер. Его можно использовать для скорости, когда уже точно знаешь, что и как настраивать. Иначе говоря - пока ты начинающий, не пользуйся билдером, ставь все настройки вручную. Да, дольше, да, труднее, да, мозг будет напрягаться, но зато не будет таких глупых и смешных ошибок. Для меги8 с прерыванием по достижению OCR это должно выглядеть так:
Код:
|
TCCR2 = 0x00; //stop
ASSR = 0x00; //set async mode none
TCNT2 = 0x00; //setup
OCR2 = 0x32; //value
TCCR2 = (1‹‹WGM21)|(1‹‹CS21); //start
TIMSK = (1‹‹OCIE2) |
Последний раз редактировалось Someone; 23.02.2016 в 15:04.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:54.
|
|