Например TDA7294

Форум РадиоКот • Просмотр темы - Длительность периода в реальном времени
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 00:27:02

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


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



Начать новую тему Ответить на тему  [ Сообщений: 32 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пн мар 27, 2017 12:02:08 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2801
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18065
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
akl, там, в конце нужно разрешить все прерывания. ты этого не написал.
выход с запрещенными прерываниями - красивое решение.

Добавлено after 22 minutes 53 seconds:
извиняюсь, есть там проход через разрешение всех прерываний.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Пн мар 27, 2017 16:00:51 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
akl, плюсик Вам :beer: за идею инкрементирования регистра без изменения флагов.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 11:45:30 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
Z_h_e, я правильно понял вашу идею?

Код:
;==============
;   Процедура обработки прерывания по событию захвата таймера 1
tc1capt:        in      r14,    SREG
                set                     ;   Установка флага события для основного цикла
                add     r10,    r1      ;   Инкремент номера события
                adc     r11,    r0
                mov     r2,     r18     ;   Сохранение старого временного штампа
                mov     r3,     r19
                mov     r4,     r20
                mov     r5,     r21
                in      r18,    ICR1L   ;   Чтение аппараной части временного штампа
                in      r19,    ICR1H
                mov     r20,    r12     ;   Чтение программной части временного штампа
                mov     r21,    r13
                in      r15,    TIFR    ;   Проверка наличия флага переполнения
                sbrs    r15,    TOV1
                rjmp    tc1capt_1       ;   Если установлен, то продолжить
                mov     r15,    r19     ;   Проверка старшего бита аппараной части ВШ
                sbrc    r15,    7
                rjmp    tc1capt_1       ;   Если сброшен, то продолжить
                add     r20,    r1      ;   Коррекция программной части ВШ
                adc     r21,    r0
tc1capt_1:      out     SREG,   r14
                reti
;==============
;   Процедура обработки прерывания по переполнению таймера 1
tc1ovf:         in      r14,    SREG
                add     r12,    r1
                adc     r13,    r0
                out     SREG,   r14
                reti
;==============

В прерывании по захвату читаем аппаратную и программную часть временного штампа. Затем, если установлен флаг переполнения таймера и сброшен старший бит аппаратной части, то считаем, что переполнение произошло до события захвата и не было обработано (Вариант Д). Поэтому корректируем программную часть штампа, увеличивая её на единицу.

Аlex писал(а):
B@R5uk писал(а):
Вариант Г
1) Событие захвата;
2) Событие переполнения;
3) Обработка события переполнения;
4) Обработка события захвата.
Из-за накладки результат получается неправильный. Программная часть временного штампа на единицу больше, чем надо.
Этот вариант исключён.
Я правильно понимаю, что если у МК имеется несколько запланированных прерываний, то выполнятся будет то, которое выше по списку?

Хотя вопрос снят. Нашёл ответ в разделе 4.7 Reset and Interrupt Handling:
Цитата:
The list also determines the priority levels of the different interrupts. The lower the address the higher is the priority level. RESET has the highest priority, and next is INT0 – the External Interrupt Request 0


Последний раз редактировалось B@R5uk Вт мар 28, 2017 12:01:19, всего редактировалось 1 раз.

Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 12:01:08 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 42
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Сообщений: 1312
Откуда: Казань
Рейтинг сообщения: 0
А вы код в столбик ручками выравниваете или есть какой-то более автоматизированный способ?


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 12:03:50 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
НАПАЛМ, если вопрос стоит в том, как сконвертировать табуляцию в пробелы, то я использую программу Sublime Text 2. Она позволяет настраивать количество пробелов на символ табуляции. Остальные действия — исключительно копипаст.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 12:17:16 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 42
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Сообщений: 1312
Откуда: Казань
Рейтинг сообщения: 0
Я имею в виду именно написание в студии. Например, mov + tab, а если in, то tab + space - так делаете?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 16:27:43 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
B@R5uk писал(а):
Z_h_e, я правильно понял вашу идею?
Сегодня голова чего-то не варит, целый день сплю. Есть такое чувство что что-то в коде не так, возможно ложное.

По сколько голова не варит, решил накидать свой код :). Переменные решил сделать так же как и у Вас, в регистрах, видимо Ваш проект это позволяет, если индексные регистры свободны, то их использование вроде как должно укоротить код.

Опеределения регистров. В Len будет измеренная длина периода импульса.
Спойлер
Код:
.def zero=R1

.def Len0=R2
.def Len1=R3
.def Len2=R4
.def Len3=R5

.def Old0=R6
.def Old1=R7

.def CountOVF0=R8
.def CountOVF1=R9

.def store=R14

.def buf=r16
Обработчик переполнения таймера
Спойлер
Код:
//----------
TIM1_OVF:
   in Store,SREG

   inc CountOVF0
   ADC CountOVF1,zero

   out SREG,Store
   reti

Обработчик захвата
Спойлер
Код:
TIM1_CAPT:
   in Store,SREG
   push buf

   //захваченные данные
   in Len0,ICR1L
   in Len1,ICR1H
   mov Len2,CountOVF0
   mov Len3,CountOVF1

   BST Len1,7 //если захвачены счетчик больше половины
   brTS NetDob
   in buf, TIFR   //если произошло событие переполнения
   andi buf,1<<TOV1
   breq NetDob

   inc Len2      //добавляем единичку
   adc len3,zero

   out TIFR,buf   //сброс флага переполнения

NetDob:
   //вычитаем старое значение
   Sub Len0,Old0
   SBC Len1,Old1
   Sbc Len2,zero
   sbc Len3,zero

   //новое старое значение
   in Old0,ICR1L
   in Old1,ICR1H

   //сброс счетчика переполнений
   clr CountOVF0
   clr CountOVF1

   set //флаг события захвата длины импульса

   pop buf
   out SREG,Store
   reti


Код не проверял, не уверен что без ошибок и если помозговать, то наверное можно с оптимизировать. Тут еще конечно нюансы конкретного МК надо учитывать.

Не забывайте про необходимость атомарности операций. Например, Вы хотите отправить по UART измеренную длительность. Для этого следует запретить прерывания которые могут изменить Len3:0. Копируете Len в некий буфер, разрешаете прерывания и затем спокойненько отправляете данные из буфера.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 17:17:51 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2801
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18065
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
inc CountOVF0
ADC CountOVF1,zero
инкремент не устанавливает флаг переноса. но зато устанавливает флаг нуля. нужно сделать проверку на ноль, и если ноль, тогда сделать просто инкремент следующего регистра.

зачем занимать еще 2 регистра?
CountOVF0 и CountOVF1 и есть те самые Len2 и Len3.
или можно сделать наоборот. оставить имена Len2 и Len3, а имена (регистры) CountOVF0 и CountOVF1 - убрать.

_________________
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 17:23:59 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Starichok51 писал(а):
инкремент не устанавливает флаг переноса.
Давно не прогал на асме, забывается, а в справочник не смотрел. Да, тут другое решение нужно. Можно как и у ТС, держать единицу в регистре. А если использовать индексный регистра, то еще проще.
Starichok51 писал(а):
зачем занимать еще 2 регистра?
Хотел так, но тогда результат куда-то сохранять надо будет.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 18:06:42 
Друг Кота

Карма: 64
Рейтинг сообщений: 966
Зарегистрирован: Пт мар 07, 2008 06:54:43
Сообщений: 4220
Откуда: Ижевск
Рейтинг сообщения: 0
Код:
TIM1_CAPT:
   in Store,SREG
;
;
   set //флаг события захвата длины импульса
;
   out SREG,Store
   reti
Извините, ошибочная конструкция. Выход будет без флага T, если он не был взведён ранее.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 18:13:25 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
я бездумно повторил из кода ТС. Замечание верное, надо воспользоваться другим флагом или устанавливать непосредственно перед выходом из прерывания. Код без теста - недокод.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Длительность периода в реальном времени
СообщениеДобавлено: Вт мар 28, 2017 20:13:03 
Собутыльник Кота
Аватар пользователя

Карма: 28
Рейтинг сообщений: 756
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Сообщений: 2893
Откуда: приходит весна?
Рейтинг сообщения: 0
НАПАЛМ писал(а):
Я имею в виду именно написание в студии.
В АВР-студии есть автоотступ по типу как в мелкосовтовской визуальной студии. Остальные места — ручками. Табуляции везде, кроме комментариев, очень удобно для выравнивания.

akl писал(а):
Извините, ошибочная конструкция.
Вот вы очень внимательны, завидую. Я эту ошибку обнаружил, только когда в железе попробовал, — МК ничего в комп не слал.


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

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


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

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


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

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


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