Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
04.01.2012, 21:21
|
#1
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Mega-8, захват таймера
Здравствуйте, излазил интернет, но никак не могу найти пример на ассемблере как организовать захват таймера\счётчика.
Понял что нужно в TIMSK установить TICIE1 (разрешить прерывание по захвату), понял что на ногу ICP1(PB0) подаём сигнал при изменении которого срабатывает прерывание, то что в регистре OCR1 будет количество тиков таймера которые я измеряю. Но как всё это написать никак не разберусь. Знаю, что это пять - шесть строчек, напишите пожалуйста их.
Спасибо.
|
|
|
|
04.01.2012, 21:41
|
#2
|
Гражданин KAZUS.RU
Регистрация: 17.11.2011
Адрес: Брянская область, РФ
Сообщений: 699
Сказал спасибо: 693
Сказали Спасибо 428 раз(а) в 213 сообщении(ях)
|
Re: Mega-8, захват таймера
могу только в BASCOM
|
|
|
|
05.01.2012, 09:24
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Mega-8, захват таймера
Нужно только настроить 2 старших бита в тццр1б и в компараторе не включать режим захвата. Прерывания включать не обязательно (если не нужны). После этого захват начинает работать при изменениях уровня на ножке, чтобы отключить захват по ножке - включаем в компараторе захват и отключаем компаратор
|
|
|
|
06.01.2012, 04:22
|
#4
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Mega-8, захват таймера
Сообщение от niXto
|
Нужно только настроить 2 старших бита в тццр1б
|
И одного бита может хватить (ICNC1 - по ситуации, а ICES1 - в сивисимости от нужного перепада)
Сообщение от niXto
|
в компараторе не включать режим захвата.
|
А компаратор тут при чём?
Сообщение от niXto
|
Прерывания включать не обязательно (если не нужны).
|
Согласен, завистит от ситуации.
Сообщение от niXto
|
После этого захват начинает работать при изменениях уровня на ножке, чтобы отключить захват по ножке - включаем в компараторе захват и отключаем компаратор
|
В меге-8 захват как-то по другому сделан (по сравнению с м-128 )?
Пример для меги-128:
Код:
|
; TCCR1B = 0x00; //stop
LDI R16,0x00 Load immediate
OUT 0x2E,R16 Out to I/O location
; TCNT1H = 0x00; //setup
OUT 0x2D,R16 Out to I/O location
; TCNT1L = 0x00;
OUT 0x2C,R16 Out to I/O location
; TCCR1A = 0x00;
OUT 0x2F,R16 Out to I/O location
; TCCR1B = 0x41; //start Timer
LDI R16,0x41 Load immediate
OUT 0x2E,R16 Out to I/O location
; TIMSK = 0x20;
LDI R16,0x20 Load immediate
OUT 0x37,R16 Out to I/O location |
Последний раз редактировалось _Артём_; 06.01.2012 в 04:24.
|
|
|
|
07.01.2012, 15:45
|
#5
|
Частый гость
Регистрация: 22.03.2010
Адрес: Севастополь
Сообщений: 26
Сказал спасибо: 5
Сказали Спасибо 8 раз(а) в 5 сообщении(ях)
|
Re: Mega-8, захват таймера
Как-то приводил пример использования захвата для измерения периода.
Правда, тогда, по быстрому «накидал», добавил пару комментарий..
https://kazus.ru/forums/showthread.p...814#post298814
|
|
|
|
07.01.2012, 20:41
|
#6
|
Гражданин KAZUS.RU
Регистрация: 01.02.2011
Адрес: г. Долгопрудный
Сообщений: 996
Сказал спасибо: 339
Сказали Спасибо 95 раз(а) в 91 сообщении(ях)
|
Re: Mega-8, захват таймера
Спасибо, я разобрался. Правда по прерыванию захвата таймера я плюсую переменную, а потом из неё беру количество натикавших тиков, потому что TCNT1 считает как я понял в тикак указанных в CS10-CS12, мне это не удобно, т.к. придётся делить потом на OCR1A. Да и если честно не получилось у меня извлечь из TCNT1 значения..... в даташите написано - что он сохраняется при захвате в OCR1, но и там абракадабра получалась.... вобщем сам считаю вот так
Цитата:
|
ldi temp, 1
add sek, temp
clr temp
adc sekh, temp
|
думаю это несильно загружает проц.
|
|
|
|
07.01.2012, 21:51
|
#7
|
Частый гость
Регистрация: 22.03.2010
Адрес: Севастополь
Сообщений: 26
Сказал спасибо: 5
Сказали Спасибо 8 раз(а) в 5 сообщении(ях)
|
Re: Mega-8, захват таймера
Простите, но на первый взгляд, ничего не понял в вашем алгоритме, да и захват в OCR1 – это у вас опечатка?
Захват возможен либо при изменении фронта на выводе ICP1 или от компаратора. В любом случае значение счетчика переписывается в ICR1.
Все, что вам нужно это прочитать этот регистр: in r1, $26, in r2,$27.
|
|
|
|
07.01.2012, 22:31
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Mega-8, захват таймера
Сообщение от _Артём_
|
А компаратор тут при чём?
|
При том, что если включить захват по прерыванию компаратора, то ножка ИЦП1 перестает работать((
|
|
|
|
08.01.2012, 15:00
|
#9
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Mega-8, захват таймера
Сообщение от niXto
|
При том, что если включить захват по прерыванию компаратора, то ножка ИЦП1 перестает работать((
|
Не знал (или забыл, скорей всё-таки не знал - AC редко используемая вещь в АВР). Полезная функция в принципе, может пригодится. Спасибо.
|
|
|
|
09.01.2012, 07:17
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Mega-8, захват таймера
Сообщение от _Артём_
|
Не знал (или забыл, скорей всё-таки не знал - AC редко используемая вещь в АВР). Полезная функция в принципе, может пригодится.
|
Да, это используется для отключения захвата (например, если регистр ИЦР1 используется как ТОП-регистр, при достижении значения которого таймер должен обнуляться) - переключаем захват на компаратор и отключаем компаратор. Срабатывания захвата не произойдет никогда, пока не включим компаратор
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:38.
|
|