Например TDA7294

Форум РадиоКот • Просмотр темы - AVR: Синхронизация исполнения кода к значению таймера Т1
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вс июн 01, 2025 16:46:00

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Пн сен 03, 2012 21:13:37 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
Есть задача очень критичная к времени исполнения кода..
параллельно задаче крутиться еще несколько задач - поэтому критичная задача реализована через T1 в режиме CTC top=OCR1A OC1=toggle - то есть генерация сигнала идет по таймеру и очень точно..
в прерывании T1 осуществляется обработка и задание новых значений OCR1A и т.д..

в принципе сам смысл захода в прерывание предполагает возможность возникновения некоторого джиттера захода в 1-3 такта (прерывание всегда ждет окончания исполнения текущей команды и только после этого осуществляется переход по вектору)

вопрос: никто не писал процедуру которая бы добивалась того чтобы определенный код исполнялся бы с определенного значения таймера вне зависимости от джиттера входа в прерывание ?

то есто чтото вроде алгоритма:

IN temp, TCNT1
cpi temp, значение
если значение рядом - то ждем
если значение не рядом - то много ждем

подождали и оказались здесь в значение таймера равное константе (при любом заходе с любой задержкой)

p.s. в принципе думаю что эту задачу решу, но вдруг ктото уже заморачивался...


Вернуться наверх
 
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 09:32:49 
Прошу прощения, но по-моему, эта проблема у вас надумана сильно. Я делал похожую задачу, и при частоте кварца 16 МГц и периодом прерываний 0,1 мс я на цифровом осциллографе не смог увидеть этот "дребезг". Просто по этому прерыванию я программно формировал короткий импульс на одной ножке (запуск внешнего АЦП). При этом задача тоже была весьма критичная во времени. Все процедуры были у меня оптимизированы так, что к моменту наступления следующего прерывания они гарантированно должны были закончиться и фактически просто крутился вхолостую основной цикл. Естественно писалось всё на ассемблере. А если 1-3 такта так критичны, то может тогда использовать другой МК с бОльшей тактовой?


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 11:39:28 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
orinoko писал(а):
Прошу прощения, но по-моему, эта проблема у вас надумана сильно. Я делал похожую задачу, и при частоте кварца 16 МГц и периодом прерываний 0,1 мс я на цифровом осциллографе не смог увидеть этот "дребезг". Просто по этому прерыванию я программно формировал короткий импульс на одной ножке (запуск внешнего АЦП). При этом задача тоже была весьма критичная во времени. Все процедуры были у меня оптимизированы так, что к моменту наступления следующего прерывания они гарантированно должны были закончиться и фактически просто крутился вхолостую основной цикл. Естественно писалось всё на ассемблере. А если 1-3 такта так критичны, то может тогда использовать другой МК с бОльшей тактовой?


гм..
у меня программа генерит изображение на телевизор
рабочая частота меги 16 мгц.
1\16000000=0.0625 мкс
на вывод одной точки трачу 0.125 мкс
за 0.1 мс я выведу 8 точек !

так что мне задержки важны.. очень...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 11:55:26 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ВитГо писал(а):
на вывод одной точки трачу 0.125 мкс
за 0.1 мс я выведу 8 точек !

странная арифметика )
за 0.1 мс при 0.125 мкс на точку вы должны вывести 800 точек или я чет недопонимаю?


Вернуться наверх
 
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 12:08:12 
Тогда либо другого типа МК (STM) с бОльшей тактовой, либо часть процесса вывода огранизовать аппаратно с двойной буферизацией. МК пишет в промежуточный буфер, а внешняя схема синхронизации (на жёсткой логике) байт будет переписывать в сдвиговый регистр. Что-то такое было реализовано в Спектруме версии АТМ-Турбо. Таким образом куча времени на запись в промежуточный буфер


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 12:56:29 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
BCluster писал(а):
ВитГо писал(а):
на вывод одной точки трачу 0.125 мкс
за 0.1 мс я выведу 8 точек !

странная арифметика )
за 0.1 мс при 0.125 мкс на точку вы должны вывести 800 точек или я чет недопонимаю?


ой.. да, ошибся...

в общем мне важно синхронизироваться по таймеру...


Последний раз редактировалось ВитГо Вт сен 04, 2012 13:43:58, всего редактировалось 1 раз.

Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 12:58:46 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
orinoko писал(а):
Тогда либо другого типа МК (STM) с бОльшей тактовой, либо часть процесса вывода огранизовать аппаратно с двойной буферизацией.


все уже написано, и все работает.. нужно только сделать синхронизацию...

кстати на stm все еще веселее, так как там порты тактируются отдельно от процессора, так что там будут свои не менее интересные грабли при выводе :-)))

в принципе есть мысли как это сделать.. попробую наверное сегодня ночью написать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 13:41:31 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1464
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15016
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
внешний "рассыпушный" элемент, тактируемый сигналом из ведущего МК (МОНГОФАЗНАЯ СИНХРОНИЗАЦИЯ времен когда сам МК на рассыпухе собран был))
или МК с приоритетным контроллером прерываний (родичи MCS51) :beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 13:49:41 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
неее, это точно не то..

в принципе после прерывания счетчика он сбрасывается в ноль..
причем это происходит вне зависимости от исполняемых процессором команда и входа в прерывание.
поэтому нужно по входу в прерывание прочитать значение TCNT1L
у него будут значения например от 1 до 5..
далее в зависимости от этих значений нужно сделать переход на исполнение

гм..
может быть так:

in R16 , TCNT1L
cpi R16 , 5 ; 1
breq l2 ; 1 точка (1) если условие не сравнялось и 2 если сравнялось
; здесь мы уже задержались на 1 лишний такт
cpi R16 , 4 '; 1
breq l1 ; еще 1 такт если не сравнялось и 2 если сравнялось
; получается что здесь относительно точки (1) мы уже на 2-3 такта сдвинулись
...
...
...

l1:
nop
l2:
; здесь типа уже синхронизированы..


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 14:07:10 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Ни хрена не понял , есть константа , есть таймер , на фига искать совпадение таймера с константой , если константу можно загнать в таймер.....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 16:42:23 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
а потому что таймер работает с OC1A, и состояние на выводе OC1A при совпадении TCNT и OCR уже поменялось.. и мне нужно строго в определенный момент начать вывод информации..
строго определенный от момента изменения состояния на OC1A

а константу в счетчик загнать - это установить паузу без учета того времени которое мы потратили на вход в прерывание


Последний раз редактировалось ВитГо Вт сен 04, 2012 17:22:38, всего редактировалось 1 раз.

Вернуться наверх
 
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 17:10:51 
И всё же ещё раз предложу использовать жёсткую логику для разгрузки МК в критичном месте. Потому как, по-моему, вы тут стараетесь впихнуть невпихуемое.


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 17:15:57 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Во первых Режим таймера в Normal mode
Во - вторых Считывать не TCNT а OCR
В третьих Const-X = OCR где Х время на прерывание


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 17:21:53 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ILYAUL писал(а):
Во первых Режим таймера в Normal mode
Во - вторых Считывать не TCNT а OCR
В третьих Const-X = OCR где Х время на прерывание


еще раз повторю:
режим таймера CTC, top=OCR1A, toggle OC1A - это не изменяемо.. на этом работает программа

кстати а что даст по вашему мнению считывание OCR в нормальном режиме таймера?

в общем такое ощущение что не поняли вопрос...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 17:25:50 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
А для таймера и Ваших отсчётов и прерываний ничего не изменится , зато всегда будете знать ,что Вы писали в OCR и кстати добавится точность.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 17:42:37 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
ладно, вопрос снят, ларчик открылся просто

Код:
;здесь  вошли в прерывание, могла быть задержка от 0 до 5 тактов

                  ldi R16   , TCNT1L    ; 1

                  cpi R16   , 5         ; 1 поздно вошли в прерывание, уже 5 тиков прошло
                  breq  after_5       ; 1 (2)

                  cpi   R16   , 4         ; 1 прошло 4 тика
                  breq  after_4       ; 1 (2)

                  cpi   R16   , 3         ; 1 прошло 3 тика
                  breq after_3       ; 1 (2)                  

                  cpi   R16   , 2         ; 1 прошло 2 тика
                  breq after_2       ; 1 (2)                  

                  cpi   R16   , 1         ; 1 прошел 1 тик
                  breq after_1       ; 1 (2)                  
                       
                  rjmp  after_0      ; 1 (2)

after_5:            ; сюда попали потратив 4 тика
                        nop             ; разница входа между after_5 и after_4 один тик
after_4:            ; сюда попали потратив 6 тиков
                        nop
after_3:            ; сюда попали потратив 8 тиков
                        nop
after_2:            ; сюда попали потратив 10 тиков
                        nop
after_1:            ; сюда попали потратив 12 тиков

after_0:                ; сюда попали потратив 13 тиков

; в эту точку программы мы попадем строго через 13 тиков после генерации запроса на прерывание T1 CTC, top=OCR1A


а вы говорите невпихуемое :-)

перефразирую классиков: "процессор, рассыпуха... главное алгоритм !"


Вернуться наверх
 
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 18:07:48 
чё та я логики тут не очень усматриваю. Тут вам не жалко потратить 13 тактов (0,8 мкс при 16МГц) в воздух, но при этом
Цитата:
на вывод одной точки трачу 0.125 мкс
(8 точек - 1 мкс)


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 18:15:04 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
Формат видеосигнала предусматривает задержку в 5.8 мкс перед выдачей изображения..
вот в этой задержке я себе совершенно спокойно прощаю задержку в 13 тактов

а вот когда начинается генерация видео - там время уже ни на что не тратиться.. и на счету каждый такт

самое главное в этом подходить к генерации строки видео в одно и тоже время от синхроимпульса, вне зависимости от того какую команду нам пришлось завершать перед вызовом прерывания... - вот для этого я и задавал вопрос...


Вернуться наверх
 
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 18:19:08 
кстати, не поленился и просимулировал в АВР Студии этот код для проверки по тактам. От точки
Цитата:
cpi R16 , 5 ; 1 поздно вошли в прерывание, уже 5 тиков прошло
до конца
R16 5 4 3 2 1
такты 7 8 9 10 11


Вернуться наверх
   
 
Не в сети
 Заголовок сообщения: Re: AVR: Синхронизация исполнения кода к значению таймера Т1
СообщениеДобавлено: Вт сен 04, 2012 18:40:19 
Вымогатель припоя

Карма: 1
Рейтинг сообщений: 101
Зарегистрирован: Ср фев 24, 2010 19:16:07
Сообщений: 680
Рейтинг сообщения: 0
Гм.. а как симулировали, у меня все работает так как задумано

у меня:
R16 = 5 . до конца 8 тактов (+ 5 тактов на которые мы задержались=13 тактов)
R16 = 4 . до конца 9 тактов (+ 4 такта на которые мы задержались =13 тактов)
R16 = 3 . до конца 10 тактов (+ 3 такта на которые мы задержались =13 тактов

дальше не стал проверять

для желающих попробовать даю ссылку на проект http://vg.ucoz.ru/raznoe/time_test.zip


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y