Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс сен 25, 2016 08:11:47

akl писал(а):Не нравится отсутствие синхронности между отсчетом 1 секунды и выводом на индикатор. В часах должно быть всё синхронно.

Если для управления адронным коллайдером или запуском геостационарных спутников - таки да. :) А так ли это важно в обычных бытовых часах ? Конечно, 6 разрядов удобнее, чем 4 с выводом секунд по кнопке. Зато дешевше.

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

Вс сен 25, 2016 21:02:51

я собирался сделать как замену стандартным часам в ваз 2107. как сделаю так напишу статью )

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

Пн сен 26, 2016 21:13:48

mixon46 писал(а):помогите а то совсем не показывает как надо :)

Здравствуйте. Есть рабочий проэкт часов на AT90S2313/ATTiny2313 динамика, CodeVision (работают около 5 лет дома, точность приемлемая). Интересует?

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

Пн сен 26, 2016 21:31:08

не) предпочитаю свои проекты)

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

Пт окт 21, 2016 13:09:52

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

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

Пт окт 21, 2016 13:30:33

Загружаете регистр OCR. Счетчик будет до него считать и обнуляться
Разрешаете прерывание по совпадению с регистром OCR
Задаете источник тактирования для таймера.

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

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

Пт окт 21, 2016 13:48:03

Спойлер
Код:
   .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

А, похоже стало доходить:
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

BlYur писал(а): binary angle modulation?
Тыц

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

Сб окт 29, 2016 10:30:02

подскажите как на AVR сделать процедуру задержки
(100 +N*cycle ) // N - int_16 ; cycle =1/Sysclk
при увеличеннии входящего аргумета на 1 задержка увеличивается на 1 клок (50 нсек при 20 Мгц)
Желательно переносимое на CvAVR

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

Сб окт 29, 2016 12:20:28

За один "клок" в AVR, в лучшем случае, выполнится одна команда, без 8-битного аргумента. Соответственно никак.

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

Сб окт 29, 2016 13:49:40

Vov123 писал(а):без 8-битного аргумента
Лично я не понял, что Вы имеет ввиду.

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

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

Сб окт 29, 2016 14:07:56

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

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

Сб окт 29, 2016 16:21:50

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

Специалист 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

Понятно. Вы не видите разницу между микросекундой и тактом таймера/контроллера; в выражении задержки явно не хватает коэффициента пропорциональности. Удачи.

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

Вс окт 30, 2016 09:08:05

вот тест
с каждым нефиксированным нажатием на кнопку время задежки увеличивается на 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 KiB) Скачиваний: 183

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

Вс окт 30, 2016 09:36:48

Неправильно.
Задержку в 1 тик даёт только команда ассемблера "nop".

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

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

Также обрати внимание на разницу в числе задержки и числа заносимого в регистры.
Последний раз редактировалось Vov123 Вс окт 30, 2016 09:52:45, всего редактировалось 2 раз(а).

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

Вс окт 30, 2016 09:42:57

Vov123 писал(а):Задержку в 1 тик даёт только команда ассемблера "nop".
Большая часть команд AVR выполняется за один такт.

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

Вс окт 30, 2016 10:04:06

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