Например TDA7294

Форум РадиоКот • Просмотр темы - Какая у меня ошибка при расчете задержки?
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 23, 2024 23:51:21

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


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



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 12:46:22 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср дек 01, 2021 15:09:09
Сообщений: 141
Рейтинг сообщения: 0
Рассчитал задержку на ассемблере с помощью программы. Задержка равняется 1 секунде. Но почему получился именно такой код? Я по этому коду пробую рассчитать задержку - у меня не получается 1 секунда.
Код:
movlw          0.173
movwf          Reg1
movlw          0.19
movwf          Reg2
movlw          0.6
movwf          Reg3
decfsz          Reg1,1
goto             $-1
decfsz          Reg2,1
goto             $-3
decfsz          Reg3,1
goto             $-5


Я считаю - сначала счет идет от 173 до нуля. Это 173 мкс. Потом программа перескакивает на Reg2. И количество циклов равно 255*19=4845. Потом программа опускается еще ниже и количество циклов уже равно 225*19*6 = 25650. И если общее число циклов сложить, то получится 30668 мкс. Так какая у меня ошибка при расчете задержки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 13:34:22 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7217
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
У вас все циклы "256". Только каждый из первого цикла имеет чуть короче длину. потому как после первого выполнения
Код:
decfsz          Reg1,1
goto             $-1
оно выполнится 173 раза, но для второго выполнения там никто 173 не загружает, поэтому следующий раз этот цикл выполнится 256 раз. Так же и все остальные циклы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 14:02:41 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Рассчитал задержку... бла...бла...бла...

movlw 0.173


Это что за ноль перед точкой?
Я считаю

Вы симулятором МПЛАБа пользоваться умеете? Ваши вопросы однозначно говорят о том, что вы даже не подозреваете о его наличии.
Ну и продолжение мазохизма в коде в стиле "а ля корабельников" да еще и в абсолютном формате не дает возможности наблюдать переменные в Watch.
Вы так ничему толковому никогда не научитесь.


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 15:45:32 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср дек 01, 2021 15:09:09
Сообщений: 141
Рейтинг сообщения: 0
Рассчитал задержку... бла...бла...бла...

movlw 0.173


Это что за ноль перед точкой?
Я считаю

Вы симулятором МПЛАБа пользоваться умеете? Ваши вопросы однозначно говорят о том, что вы даже не подозреваете о его наличии.
Ну и продолжение мазохизма в коде в стиле "а ля корабельников" да еще и в абсолютном формате не дает возможности наблюдать переменные в Watch.
Вы так ничему толковому никогда не научитесь.


Нет там никакого нуля, это здесь я по ошибке написал. В реальности, в программе нуля нет.

Добавлено after 37 minutes 32 seconds:
А команда "decfsz Reg,1" выполняется за два машинных цикла?


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 15:54:33 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7217
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Иногда за 1, иногда за 2. Читайте даташит на микроконтроллер - там всё подробно написано.

Цитата:
If Program Counter (PC) is modified or a conditional test is true, the instruction requires two cycles. The second cycle is
executed as a NOP.


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 16:22:09 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
А команда...

Вообще то опыт расчета блокирующих задержек вреден... :)
В МК блокирующая задержка - зло. Задержки не должны мешать остальным задачам. Исключение составляют короткие задержки примерно до 100...200 машинных циклов. Большие делают на таймере. Причем для всех задержек используют ОДИН таймер, который работает непрерывно, генерируя прерывания, в обработчике которых и инкрементируют/декрементируют счетчики задержек. А в суперлупе просто периодически проверяются эти счетчики. Обычно такой таймер называют системным.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 16:51:23 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
Когда-то в те времена была небольшая утилитка по расчету такой задержки. Както она называлась, чето типа Pause... Надо в своих старых архивах поискать, пользовался ведь...

Ага, нашел-таки!
Вложение:
Pause_ver1.2.zip [96.85 KiB]
Скачиваний: 49

Изображение
Задержка в м.ц. - машинный цикл. А на PIC16 1 м.ц. = 4 такта осциллятора, то есть частота м.ц. в в 4 раза медленнее частоты МК. На картинке 6000 м.ц. = 24000 периодов осциллятора. И при 4 МГц показанная задержка = 6 мс.
PenguinChik вероятно не учитывает, что каждая инструкция в этих циклах занимает 1 м.ц., а инструкция сравнения и перехода - 2 м.ц. (если на память сейчас не ошибаюсь). То есть, нужно не просто циферки в счетчиках считать, а учитывать, сколько м.ц. проходит в каждом круге декремента.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 17:12:14 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
Инструкция сравнения, как уже сказали, занимает один цикл, если условие не выполняется и два - если выполняется. То есть два занимает любой переход.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Пн ноя 14, 2022 17:27:58 
Опытный кот
Аватар пользователя

Карма: 2
Рейтинг сообщений: 160
Зарегистрирован: Ср авг 03, 2022 05:22:56
Сообщений: 848
Рейтинг сообщения: 0
а... Ну я пишу чисто по памяти, я ж лет 7 вообще не брал в руки PIC, а на ассемблере его прогал так и того давнее.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Ср ноя 23, 2022 18:17:22 
Встал на лапы
Аватар пользователя

Зарегистрирован: Ср дек 01, 2021 15:09:09
Сообщений: 141
Рейтинг сообщения: 0
Когда-то в те времена была небольшая утилитка по расчету такой задержки. Както она называлась, чето типа Pause... Надо в своих старых архивах поискать, пользовался ведь...

Ага, нашел-таки!


Ну да, с этой программой я разобрался. Все работает. А можно ли реализовать задержку без перезаписываний чисел в регистры? Другим способом? C помощью таймера, например


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Ср ноя 23, 2022 18:59:22 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 1368
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7217
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Можно, как бы странно это не звучало.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Чт ноя 24, 2022 04:20:13 
Друг Кота
Аватар пользователя

Карма: 138
Рейтинг сообщений: 2712
Зарегистрирован: Чт янв 10, 2008 22:01:02
Сообщений: 21837
Откуда: Московская область, Фрязино
Рейтинг сообщения: 0
C помощью таймера, например

Вы вообще читаете ответы?
Я же вам выше все написал. Именно про таймер... :facepalm:
Вообще то опыт расчета блокирующих задержек вреден... :)
В МК блокирующая задержка - зло. Задержки не должны мешать остальным задачам. Исключение составляют короткие задержки примерно до 100...200 машинных циклов. Большие делают на таймере. Причем для всех задержек используют ОДИН таймер, который работает непрерывно, генерируя прерывания, в обработчике которых и инкрементируют/декрементируют счетчики задержек. А в суперлупе просто периодически проверяются эти счетчики. Обычно такой таймер называют системным.

Но "перезаписывать в регистры" все равно придется. Любая программа для МК наполовину состоит из такого кода.
С таймерными задержками исчезнет блокировка исполнения и исчезнет потребность считать машинные циклы для калибровки величины задержки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Чт ноя 24, 2022 09:10:27 
Держит паяльник хвостом

Карма: 10
Рейтинг сообщений: 99
Зарегистрирован: Вт июн 07, 2011 08:03:18
Сообщений: 966
Рейтинг сообщения: 0
Рассчитал задержку на ассемблере с помощью программы.

Берёшь delay.h/delay.c из htpicc, смотришь выхлоп и не паришься, имея us и ms задержки.
Код:
#if XTAL_FREQ >= 12MHZ

// x <= 750 for 4mHz
#define DelayUs(x)  { unsigned char _dcnt; \
        _dcnt = (x) * ((XTAL_FREQ) / (12MHZ)); \
        while(--_dcnt != 0) \
          continue; }
#else

#define DelayUs(x)  { unsigned char _dcnt; \
        _dcnt = (x) / ((12MHZ) / (XTAL_FREQ)) | 1; \
        while(--_dcnt != 0) \
          continue; }
#endif

Код:
#include  "delay.h"

void DelayMs(unsigned char cnt)
{
  #if XTAL_FREQ <= 2MHZ
  do {
    DelayUs(996);
  } while(--cnt);
  #endif

  #if XTAL_FREQ > 2MHZ
  unsigned char i;
  do {
    i = 4;
    do {
      DelayUs(250);
    } while(--i);
  } while(--cnt);
  #endif
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Какая у меня ошибка при расчете задержки?
СообщениеДобавлено: Чт ноя 24, 2022 10:07:16 
Первый раз сказал Мяу!

Карма: -1
Рейтинг сообщений: 1
Зарегистрирован: Вт май 17, 2022 09:49:48
Сообщений: 26
Рейтинг сообщения: 0
бывают столь короткие задержки когда таймер использовать невыгодно. или бывает что по логике программы нужно именно подождать и ничего не делать. а реакции на чето там неотложное как раз по прерываниям и делать


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

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


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

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


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

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


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