Если для управления адронным коллайдером или запуском геостационарных спутников - таки да.akl писал(а):Не нравится отсутствие синхронности между отсчетом 1 секунды и выводом на индикатор. В часах должно быть всё синхронно.
Таймеры/счётчики в AVR
Re: Таймеры/счётчики в AVR
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: Таймеры/счётчики в AVR
я собирался сделать как замену стандартным часам в ваз 2107. как сделаю так напишу статью )
Re: Таймеры/счётчики в AVR
Здравствуйте. Есть рабочий проэкт часов на AT90S2313/ATTiny2313 динамика, CodeVision (работают около 5 лет дома, точность приемлемая). Интересует?mixon46 писал(а): помогите а то совсем не показывает как надо
- mixon46
- Говорящий с текстолитом
- Сообщения: 1644
- Зарегистрирован: Сб фев 18, 2012 15:42:29
- Откуда: Курск
Re: Таймеры/счётчики в AVR
не) предпочитаю свои проекты)
Re: Таймеры/счётчики в AVR
Здрасьте.
Никак не доходит, как на ATTiny2313 настроить таймер TC0 в режиме СТС и прерывание по OCR.
Читаю даташит, книги разных умных людей.
Выписал себе на листок нужные (как мне кажется) регистры, биты, флаги, но в голове никак не хочет складываться воедино общая картина.
Кому не в западло, плиз, черканите эти заветные несколько строчек инициализации TC0 желательно (но не обязательно) на ассемблере.
Никак не доходит, как на ATTiny2313 настроить таймер TC0 в режиме СТС и прерывание по OCR.
Читаю даташит, книги разных умных людей.
Выписал себе на листок нужные (как мне кажется) регистры, биты, флаги, но в голове никак не хочет складываться воедино общая картина.
Кому не в западло, плиз, черканите эти заветные несколько строчек инициализации TC0 желательно (но не обязательно) на ассемблере.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Таймеры/счётчики в AVR
Загружаете регистр OCR. Счетчик будет до него считать и обнуляться
Разрешаете прерывание по совпадению с регистром OCR
Задаете источник тактирования для таймера.
И все. Если прерывания разрешены глобально, он будет возникать при совпадении с регистром OCR.
Разрешаете прерывание по совпадению с регистром OCR
Задаете источник тактирования для таймера.
И все. Если прерывания разрешены глобально, он будет возникать при совпадении с регистром OCR.
Re: Таймеры/счётчики в AVR
Спойлер
Код: Выделить всё
.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
А, похоже стало доходить:
1) Записать требуемое значение в регистр сравнения OCR0A
2) TCCR0A <-- 0b00000010 - режим СТС
3) TCCR0B <-- битами CS02, CS01 и CS00 выбираем предделитель.
КАКОЙ ПРЕДДЕЛИТЕЛЬ ЛУЧШЕ ВЫБРАТЬ ДЛЯ binary angle modulation?
4) TIMSK <-- 0b00000001 - разрешение прерываний от TC0
5) sei - глобально разрешаем прерывания.
Как-то так?
1) Записать требуемое значение в регистр сравнения OCR0A
2) TCCR0A <-- 0b00000010 - режим СТС
3) TCCR0B <-- битами CS02, CS01 и CS00 выбираем предделитель.
КАКОЙ ПРЕДДЕЛИТЕЛЬ ЛУЧШЕ ВЫБРАТЬ ДЛЯ binary angle modulation?
4) TIMSK <-- 0b00000001 - разрешение прерываний от TC0
5) sei - глобально разрешаем прерывания.
Как-то так?
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Таймеры/счётчики в AVR
ТыцBlYur писал(а): binary angle modulation?
Re: Таймеры/счётчики в AVR
подскажите как на AVR сделать процедуру задержки
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR
ух ты.... показывает
Re: Таймеры/счётчики в AVR
За один "клок" в AVR, в лучшем случае, выполнится одна команда, без 8-битного аргумента. Соответственно никак.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Таймеры/счётчики в AVR
Лично я не понял, что Вы имеет ввиду.Vov123 писал(а):без 8-битного аргумента
12val12 запускаете таймер -100 тактов переполнения. Затем запускает на нужное чиссло. Таймер 16 битный. Отрицательное число не знаю как, может если минус то без задержки.
Re: Таймеры/счётчики в AVR
Ну настроит он таймер по совпадению, сработает прерывание, сколько "клоков" на это уйдёт до реагирования на событие, вероятно не один, а товарищ хочет именно один. К тому-же проц его до прерывания будет, вероятно, чем-то занят, переход сколько клоков займёт?
Re: Таймеры/счётчики в AVR
Fo=20000000 cycle=50*Fo/1000000000. Точнее (100 +N*cycle)-1-Δ, где Δ-дополнительная задержка вызванная прерыванием.12val12 писал(а):подскажите как на AVR сделать процедуру задержки
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR
Re: Таймеры/счётчики в AVR
Специалист 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)
задержа нужна не фиксированная а переменная ..вообще планируется что величина задержки будет приходить по 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
Понятно. Вы не видите разницу между микросекундой и тактом таймера/контроллера; в выражении задержки явно не хватает коэффициента пропорциональности. Удачи.
Re: Таймеры/счётчики в AVR
вот тест
с каждым нефиксированным нажатием на кнопку время задежки увеличивается на 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 ;//задержанный импульс
}
}
с каждым нефиксированным нажатием на кнопку время задежки увеличивается на 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 ;//задержанный импульс
}
}
- Вложения
-
- strobo_mega8.zip
- (31.65 КБ) 196 скачиваний
ух ты.... показывает
Re: Таймеры/счётчики в AVR
Неправильно.
Задержку в 1 тик даёт только команда ассемблера "nop".
Вот здесь калькулятор задержек на асме http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html
Посмотри сколько команд выполняется на ту или иную задержку, соответственно сколько тиков уходит на её выполнение.
Также обрати внимание на разницу в числе задержки и числа заносимого в регистры.
Задержку в 1 тик даёт только команда ассемблера "nop".
Вот здесь калькулятор задержек на асме http://www.home.unix-ag.org/tjabo/avr/AVRdelayloop.html
Посмотри сколько команд выполняется на ту или иную задержку, соответственно сколько тиков уходит на её выполнение.
Также обрати внимание на разницу в числе задержки и числа заносимого в регистры.
Последний раз редактировалось Vov123 Вс окт 30, 2016 09:52:45, всего редактировалось 2 раза.
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Таймеры/счётчики в AVR
Большая часть команд AVR выполняется за один такт.Vov123 писал(а):Задержку в 1 тик даёт только команда ассемблера "nop".
Re: Таймеры/счётчики в AVR
Не сочтите за оффтопик.
Учиться, учиться, еще раз учиться ! © Ленин .
Спойлер
Кажется, времена изобретения велосипеда закончились - имеем очередное "изобретение" : стробоскопического осциллографа . Жаль, что работать не будет. Но не для работы это делалось - для жизнедеятельности пытливого ума. Только эта пытливость ума не позволяет взять книжку и прочесть, как устроен стробоскопический осциллограф и почему его не сделать на AVR, равно как и почему от батарейки нельзя запитать электровоз.Учиться, учиться, еще раз учиться ! © Ленин .

