Страница 38 из 72

Re: Таймеры/счётчики в AVR

Добавлено: Вс сен 25, 2016 08:11:47
Jack_A
akl писал(а):Не нравится отсутствие синхронности между отсчетом 1 секунды и выводом на индикатор. В часах должно быть всё синхронно.
Если для управления адронным коллайдером или запуском геостационарных спутников - таки да. :) А так ли это важно в обычных бытовых часах ? Конечно, 6 разрядов удобнее, чем 4 с выводом секунд по кнопке. Зато дешевше.

Re: Таймеры/счётчики в AVR

Добавлено: Вс сен 25, 2016 21:02:51
mixon46
я собирался сделать как замену стандартным часам в ваз 2107. как сделаю так напишу статью )

Re: Таймеры/счётчики в AVR

Добавлено: Пн сен 26, 2016 21:13:48
X200881
mixon46 писал(а): помогите а то совсем не показывает как надо :)
Здравствуйте. Есть рабочий проэкт часов на AT90S2313/ATTiny2313 динамика, CodeVision (работают около 5 лет дома, точность приемлемая). Интересует?

Re: Таймеры/счётчики в AVR

Добавлено: Пн сен 26, 2016 21:31:08
mixon46
не) предпочитаю свои проекты)

Re: Таймеры/счётчики в AVR

Добавлено: Пт окт 21, 2016 13:09:52
BlYur
Здрасьте.
Никак не доходит, как на ATTiny2313 настроить таймер TC0 в режиме СТС и прерывание по OCR.
Читаю даташит, книги разных умных людей.
Выписал себе на листок нужные (как мне кажется) регистры, биты, флаги, но в голове никак не хочет складываться воедино общая картина.
Кому не в западло, плиз, черканите эти заветные несколько строчек инициализации TC0 желательно (но не обязательно) на ассемблере.

Re: Таймеры/счётчики в AVR

Добавлено: Пт окт 21, 2016 13:30:33
Z_h_e
Загружаете регистр OCR. Счетчик будет до него считать и обнуляться
Разрешаете прерывание по совпадению с регистром OCR
Задаете источник тактирования для таймера.

И все. Если прерывания разрешены глобально, он будет возникать при совпадении с регистром OCR.

Re: Таймеры/счётчики в AVR

Добавлено: Пт окт 21, 2016 13:48:03
akl
Спойлер

Код: Выделить всё

   .include "tn2313def.inc"

.org	0
	RJMP	START
.org	0x0D
T0_COMPA:
	RETI
;************************************
START:
	LDI	XL,LOW(RAMEND)
	OUT	SPL,XL

	LDI	R16,1<<SE
	OUT	MCUCR,R16

	LDI R16,100-1
	OUT	OCR0A,R16

	LDI R16,1<<WGM01
	OUT	TCCR0A,R16

	LDI R16,1<<WGM01
	OUT TCCR0A,R16
	LDI R16,1<<CS00
	OUT	TCCR0B,R16

	OUT TCCR1B,R16
	LDI	R16,1<<OCIE0A
	OUT	TIMSK,R16
	OUT	TIFR,R16

	SEI
WAIT:
	SLEEP
	NOP
	RJMP	WAIT
.EXIT
Как то так.

Re: Таймеры/счётчики в AVR

Добавлено: Пт окт 21, 2016 13:53:07
BlYur
А, похоже стало доходить:
1) Записать требуемое значение в регистр сравнения OCR0A
2) TCCR0A <-- 0b00000010 - режим СТС
3) TCCR0B <-- битами CS02, CS01 и CS00 выбираем предделитель.
КАКОЙ ПРЕДДЕЛИТЕЛЬ ЛУЧШЕ ВЫБРАТЬ ДЛЯ binary angle modulation?
4) TIMSK <-- 0b00000001 - разрешение прерываний от TC0
5) sei - глобально разрешаем прерывания.

Как-то так?

Re: Таймеры/счётчики в AVR

Добавлено: Пт окт 21, 2016 14:06:05
Z_h_e
BlYur писал(а): binary angle modulation?
Тыц

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 10:30:02
12val12
подскажите как на AVR сделать процедуру задержки
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 12:20:28
Vov123
За один "клок" в AVR, в лучшем случае, выполнится одна команда, без 8-битного аргумента. Соответственно никак.

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 13:49:40
Z_h_e
Vov123 писал(а):без 8-битного аргумента
Лично я не понял, что Вы имеет ввиду.

12val12 запускаете таймер -100 тактов переполнения. Затем запускает на нужное чиссло. Таймер 16 битный. Отрицательное число не знаю как, может если минус то без задержки.

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 14:07:56
Vov123
Ну настроит он таймер по совпадению, сработает прерывание, сколько "клоков" на это уйдёт до реагирования на событие, вероятно не один, а товарищ хочет именно один. К тому-же проц его до прерывания будет, вероятно, чем-то занят, переход сколько клоков займёт?

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 16:21:50
akl
12val12 писал(а):подскажите как на AVR сделать процедуру задержки
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR
Fo=20000000 cycle=50*Fo/1000000000. Точнее (100 +N*cycle)-1-Δ, где Δ-дополнительная задержка вызванная прерыванием.

Re: Таймеры/счётчики в AVR

Добавлено: Сб окт 29, 2016 18:28:56
12val12
Специалист akl я Вас не понял.
задержа нужна не фиксированная а переменная ..вообще планируется что величина задержки будет приходить по uart
цель с шагом 50 нСек исследовать входной посторяющийся сигнал отдаленный от известного импульса синхронизации на время более 5мксек

например нужно глянуть что через 100.05 мксек после ИЗ
подали величину задержки 100.05 мксек . контроллер отсчитал это время от ИЗ включил на 50 нсек УВХ
защелнул уровень на конденсаторе 20 пф ацп меги измерил уровень и передал обратнопо uart пару задержка100.05- уровень

потом подали величину задержки 100.10 мксек . контроллер отсчитал это время от ИЗ включил на 50 нсек УВХ
защелнул уровеньна конденсаторе 20 пф ацп меги измерил уровень и передал по uart пару задержка100.10- уровень


через некоторое количество посылок (пока что до 65000) будет готовая осцилограмма с разрешающей способностью 50 нсек
спасибо сделал без таймера .
задержка (5 +0.05*int_16)

Re: Таймеры/счётчики в AVR

Добавлено: Вс окт 30, 2016 05:10:45
akl
Понятно. Вы не видите разницу между микросекундой и тактом таймера/контроллера; в выражении задержки явно не хватает коэффициента пропорциональности. Удачи.

Re: Таймеры/счётчики в AVR

Добавлено: Вс окт 30, 2016 09:08:05
12val12
вот тест
с каждым нефиксированным нажатием на кнопку время задежки увеличивается на 50 нс (1 клок при 20МГц)
начальная задежка 4600нсек
аргумент целоцисленный . таким образом моджно менять задержку от 4600нсек до 3280000 нсек с шагом 50 нСек
при тактовой 20Мгц

актуальная часть программы
DDRD.7=1; DDRD.6=1; //
Cycle =0;
while (1)
{
if ( PIND.5 )
{
Cycle=Cycle+1; while (PIND.5) {}
}

for (k=0;k<1 ;k++) { PORTD.6=1 ; } PORTD.6=0 ; //sync
Delay_int_cycle ( Cycle); //процедура задержки
PORTD.7= 1 ; PORTD.7= 0 ;//задержанный импульс
}
}

Re: Таймеры/счётчики в AVR

Добавлено: Вс окт 30, 2016 09:36:48
Vov123
Неправильно.
Задержку в 1 тик даёт только команда ассемблера "nop".

Вот здесь калькулятор задержек на асме http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html

Посмотри сколько команд выполняется на ту или иную задержку, соответственно сколько тиков уходит на её выполнение.

Также обрати внимание на разницу в числе задержки и числа заносимого в регистры.

Re: Таймеры/счётчики в AVR

Добавлено: Вс окт 30, 2016 09:42:57
Z_h_e
Vov123 писал(а):Задержку в 1 тик даёт только команда ассемблера "nop".
Большая часть команд AVR выполняется за один такт.

Re: Таймеры/счётчики в AVR

Добавлено: Вс окт 30, 2016 10:04:06
Jack_A
Не сочтите за оффтопик.
СпойлерКажется, времена изобретения велосипеда закончились - имеем очередное "изобретение" : стробоскопического осциллографа . Жаль, что работать не будет. Но не для работы это делалось - для жизнедеятельности пытливого ума. Только эта пытливость ума не позволяет взять книжку и прочесть, как устроен стробоскопический осциллограф и почему его не сделать на AVR, равно как и почему от батарейки нельзя запитать электровоз.
Учиться, учиться, еще раз учиться ! © Ленин .