Например TDA7294

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





Текущее время: Пн июл 07, 2025 14:26:42

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


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



Начать новую тему Ответить на тему  [ Сообщений: 171 ]     ... , , , 7, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 20:48:18 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Вячеслав М. писал(а):
никаких задержек в прерывании не должно быть! Я в прерывании обычно только выставляю флаг события,
совершенно верно.

и, если нужна только проверка флага, то обработчик прерывания можно не запускать, потому что флаг устанавливается и без обработчика:
В обработчик прерывания же вообще можно не заходить и не обрабатывать. А вести опрос флага преывания в цикле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 20:53:58 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
В прошлом IDE выпускал тот, кто и сам МК разрабатывал.
На сегодня это уже таки прошлое...
Способов отладки программ также достаточно много. Наиболее достоверные дает симулятор и отладочный макет (плюс различные варианты внутрисхемной отладки).
Остальное зависит от привычек, возможностей и целей.
8)
Если прерывание не требует немедленной обработки, то есть большая вероятность того, что его использование в программе вообще не требуется.
:tea:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:00:27 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Макет достовернее. Симулятор вряд ли учтёт например разброс параметров периферии, наводки..

..дребезг кнопок :facepalm: :))) :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:12:34 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Симулятор нужен для тонкой пошаговой отладки алгоритмов.
Собственно это аппаратных периферийных модулей редко касается, а вот всяко-разных переходов и фокусов с циклами/адресами и условиями достаточно часто требуется.
8)


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:15:23 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18739
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
shonty писал(а):
а call 2
кроме jmp и call есть еще команды из двух слов.
Вячеслав М. писал(а):
никаких задержек в прерывании не должно быть!
а попробуй запрети всем и каждому!
я вот в своем проекте в прерывании от INT0 делаю задержку, чтобы "поглотить" дребезг кнопки. даже с огромным запасом - 40 мс.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:22:30 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Помимо прерываний есть еще "базовая сетка частот" с установкой флагов по отработке определенных интервалов времени и исполнению соответствующих этим флагам обработчиков в основном цикле программы.
:roll:


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:27:45 
Встал на лапы

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 148
Рейтинг сообщения: 0
А мне не надо в прерывании антидребезгом заниматься, у меня прерывание программу с начала запускает - 1 ms. А вот в в этой программе антидребезг и происходит, причём настраивается на каждый вход индивидуально, с дискретой 1 ms, хватает от 10 до 40 одинаковых результатов на входе и создаётся событие "Нажато", "отжато", "удерживается", и "двойной клик", этого хватает для любых входов общего назначения или кнопок, Так что у меня прерывание очень скоротечно, и не делает ничего кроме событий, которые и флаги то не меняют и ничего в стеке сохранять не нужно, для прерываний даже специально пару регистров зарезервировано. Себе я запретил ))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:32:05 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Это вариации на тему "сетки частот".
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:36:59 
Встал на лапы

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 148
Рейтинг сообщения: 0
В основном цикле очень удобно временные задержки делать, ведь известно что следующий раз программа здесь будет через 1 ms, вот и считай себе, если не дошло значит отпускай, пусть проц другими делами займётся.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 21:39:52 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Starichok51 писал(а):
кроме jmp и call есть еще команды из двух слов.
call, jmp, lds, sts

вроде всё


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 22:00:12 
Встал на лапы

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 148
Рейтинг сообщения: 0
Не разделяю мнение тех кто говорит что надо вручную смотреть адреса переходов, я всё по меткам делаю. У меня даже в макро адреса переходов передаются как метки.

Добавлено after 2 minutes 54 seconds:
А вот интересно конечно же было бы если не пожадничали и выложили все свои макро ))) Это только теоретически, не призываю )))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 22:05:34 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Вячеслав М. писал(а):
бы если не пожадничали и выложили все свои макро )))
Это очень опасно :)))
Начнётся критика переходящая в срач :facepalm: :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Вт фев 04, 2025 23:55:44 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 1
В основном цикле очень удобно временные задержки делать, ведь известно что следующий раз программа здесь будет через 1 ms, ...

Не факт, что основной цикл может иметь строго фиксированную длительность, скорее наоборот.
А вот вариант сетки частот на основе прерываний от таймера, тактируемого системным генератором довольно удобная штука - интервалы всегда точно выдержаны будут.
Да и программных таймеров с контрольными флагами можно сколь угодно добавить.
8)
Что касается макросов...
У каждой программы могут быть свои.
Не забываем, что макрос не подпрограмма - каждый раз развертывается в набор соответствующих кодов при упоминании.
Из реально удачных разве что дополнения к системе команд...
Спойлер
Код:
;
 .macro xchrr ; псевдокоманда "обмен регистра/акумулятора/ с регистром"
     eor @0,@1 ; вызывается как xchrr rd,rs
     eor @1,@0
     eor @0,@1
  .endmacro
;
 .macro ldiw ; псевдокоманда "загрузка слова в регистровую пару /X,Y,Z/"
     ldi @0l,low(@1) ; вызывается как ldiw rp,0xnnnn или ldiw rp,name
     ldi @0h,high(@1) ; (где name=0xnnnn, rp=x,y,z)
  .endmacro
;

8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 06:58:02 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
LDIW удачный макрос. И мнемоника удачная.

А вот практическое применение первого не совсем понятно :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 08:34:13 
Встал на лапы

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 148
Рейтинг сообщения: 0
В основном цикле очень удобно временные задержки делать, ведь известно что следующий раз программа здесь будет через 1 ms, ...

Не факт, что основной цикл может иметь строго фиксированную длительность, скорее наоборот.
8)


Можно временные коды в начале цикла ставить, тогда джиттер будет совсем незначительный, но это большая натяжка, обычно не нужно точность больше чем 1 ms, это время для обработки всей программы, в тысячи задач, и точней не надо, так же нужно иметь ввиду что программа занимается вводом/выводом в строгом времени и никакого джиттера вообще нет, разумней в начале цикла. Это реализация программы реального времени, с множеством задач. Основная программа в главном цикле не занимается вводом/выводом, она лишь собирает таблицу, а далее по событию от прерывания ввод/вывод, каждую 1 ms.

Добавлено after 21 minute 59 seconds:
LDIW удачный макрос. И мнемоника удачная. :dont_know:


У меня подобных удачных макросов несколько десятков, например есть регистры с защитной предустановкой, вот на них есть макросы, для разных процев IF стоит, включая xmega, ну естественно все словные макросы как в вашем случае, так же в макрос передаётся оперативный регистр который можно использовать в данном участке программы, и прочее. Это вы откликнулись на предложение обменяться макросами?))) Так много макросов я у DI Halt _а стащил, потом немножко подправил.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 09:11:03 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Вячеслав М. писал(а):
Это вы откликнулись на предложение обменяться макросами?)))
Нет))
У меня только один стабильный макрос, это задержка. Выкладывать не буду, точно критика будет :)))
Остальные больше ситуационные и привязанные к конкретным задачам, например к драйверам периферии.. + в них могут использоваться ситуационные дефы регистров/портов и т.п..

Вячеслав М. писал(а):
Так много макросов я у DI Halt _а
Однажды, начитавшись DI_Halt-а, я увлёкся макросами. Но потом осознал, что во первых мне теперь нужно учить "язык своих макросов", а во вторых макросы абстрагируют от процессов и железа..
Тогда проще на ЯВУ перейти, чем активно макросы использовать..))

Мне конечно не жалко, но это точно никому не нужно.
Тем более там ещё и смещение адреса *2-2
Для примера:
Спойлер
Код:
.MACRO DSPL_field
   ldi ZL, low    (@0 *2-2)
   ldi ZH, high    (@0 *2-2)
   call SET_dspl_AREA
.ENDMACRO

   DSPL_field str_2

str_0:   .dw 10,319,5      ,20
str_1:   .dw 10,319,5+25*1   ,20+25*1
str_2:   .dw 10,319,5+25*2   ,20+25*2
str_3:   .dw 10,319,5+25*3   ,20+25*3
str_4:   .dw 10,319,5+25*4   ,20+25*4
...
...


Добавлено after 5 minutes 7 seconds:
Макросы нужно в связке с алгоритмами рассматривать. Макрос чаще вторичен же))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 11:14:06 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18739
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
shonty писал(а):
смещение адреса *2-2
а зачем минус 2? а почему не -20?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 11:48:46 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
Starichok51 писал(а):
а зачем минус 2? а почему не -20?
Потому что -2 ещё терпимо, а -20 уже холодно :)))

Ну на самом деле.. деталей много, но если по сути:
Нужно расположить в массиве 16 битные данные, но так, чтобы и читабельны были.
То есть:
или
.db high(50), low(50), high(300), low(300),...... и т.д..
или
.dw 50, 300,........

Если .dw использовать, то при считывании массива через LPM сначала будет считываться low(), потом high(), что усложняет чтнение в цикле.

Поэтому подгружаем адресс массива со смещением -2, а цикл примерно так будет выглядеть:
Спойлер
Код:
   ldi R17, n         ; число слов в массиве
loop:
   adiw ZL, 3         ; встаём на нечётный адрес памяти программ (MSB)
   lpm
   манипулируем с R0
   ...
   ...
   sbiw ZL, 1         ; встаём на чётный адрес памяти программ (LSB)
   lpm
   манипулируем с R0
   ...
   ...
   dec R17
   brne loop


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 11:50:10 
Друг Кота
Аватар пользователя

Карма: 94
Рейтинг сообщений: 1466
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 15069
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Что макрос, что подпрограмма - для подстановки часто встречающихся последовательностей кодов.
Преимущество подпрограмм в экономии ПЗУ, минусы - время на стековые операции при вызове/возврате.
Для макроса оптимально 3, максимум 4 команды или случай, когда стековые операции неудобны(или недопустимы).
В принципе все определяется автором основной программы.
Касательно
shonty писал(а):
...
А вот практическое применение первого не совсем понятно :dont_know:

xchrr (xch) - это обмен данными между двумя регистрами регистрового файла.
Можно с MOV - но тогда потребуется три регистра и чуток больше команд
Ранее в системах команд были XCH, XCHD и SWAP - команды тетрадных (двоично-десятичных) манипуляций.
SWAP у АВРок осталась, а вот обмен тетрадами и обмен регистров исчезли (как и ранее часто встречавшаяся DAA - десятичная коррекция после сложения у I8080,Z80,MCS51,MCS48).
Правда на сегодня двоично - десятичный формат практически в счетчиках не используется - все в двоичном считать стараются.
8)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по программированию задержки внутри прерывания
СообщениеДобавлено: Ср фев 05, 2025 12:07:07 
Мучитель микросхем
Аватар пользователя

Карма: 1
Рейтинг сообщений: 38
Зарегистрирован: Ср янв 11, 2012 18:20:26
Сообщений: 473
Рейтинг сообщения: 0
BOB51 писал(а):
это обмен данными между двумя регистрами
я понял, что это "рокировка", только не пойму, где её применить можно :dont_know:

Добавлено after 3 minutes 31 second:
Ещё смысл вот этой записи не понимаю (встречается иногда):
eor R0, R0
есть же clr


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

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


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

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


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

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


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