Измеряем длительность импульса

  Рет қаралды 2,071

Andrey Frolov

Andrey Frolov

Күн бұрын

Пікірлер: 16
@ДмитрийТисов-ж6я
@ДмитрийТисов-ж6я 5 ай бұрын
Спасибо
@alekskapitonov2738
@alekskapitonov2738 Жыл бұрын
Спасибо за урок.
@elmuroddusimov
@elmuroddusimov Жыл бұрын
Приходят INT0 и TIMER0_OVF, в результате выполняется INT0 и счетчик на единицу меньше
@GRafGRay81
@GRafGRay81 Жыл бұрын
Думаю конфликт прерываний
@ЭльМеф
@ЭльМеф 8 ай бұрын
А есть же в 16 битном таймере режим input capture
@MrVersusCR
@MrVersusCR Жыл бұрын
При входе инт0 по фронту обнуляйте tcnt вручную и начинайте считать количество переполнений + остаток по спаду. В практике была подобная задача была найти импульс определённой длины среди кучи других.
@andreyfrolov301
@andreyfrolov301 Жыл бұрын
если вы не заметили это уже реализовано :)
@MrVersusCR
@MrVersusCR Жыл бұрын
​@@andreyfrolov301 да действительно, не заметил))))
@vladimirpetrov7943
@vladimirpetrov7943 9 ай бұрын
Думаю, что проблема состоит в том, что ты не инициализируешь TCNT0. В примере ты запрещаешь и разрешаешь прерывания по таймеру, но это таймер не останавливает и не запускает. Таймер всегда работает и считает тики и на момент когда считывается его значение, оно не определено на фронте.
@AlexRootx
@AlexRootx Жыл бұрын
предположу, что в первом варианте прерывание по инт прилетело, когда в счетчике (второе прерывание) было значение 0, отсюда и разница в одно переполнение
@alexandrvalentinovich164
@alexandrvalentinovich164 Жыл бұрын
У инт0 приоритет выше, допустим таймер досчитал до 100, тут сработал инт0 по фронту и сбросили коунтер имхо отсюда + лишнее переполнение
@andreyfrolov301
@andreyfrolov301 Жыл бұрын
мы ж его сбросили а не добавили +1... врядли в в этом дело
@alexandrvalentinovich164
@alexandrvalentinovich164 Жыл бұрын
@@andreyfrolov301 сбросили коунтер по фронту, а в момент этого фронта сработало прерывание от таймера, т.е. оно встало в очередь т.к. ниже приоритетом чем INT0, когда очередь подошла (закончилась обработка INT0), прерывание от таймера плюсануло коунтер к нулевому значению коунтера, потом первое переполнение еще раз плюсануло, отсюда и +1 переполнение.
@andreyfrolov301
@andreyfrolov301 Жыл бұрын
@@alexandrvalentinovich164 кажется я понял :)
@АлексейАмброзяк
@АлексейАмброзяк Жыл бұрын
в чем проблема включить дизасемблер в отладке и смотерть куда твоя программа прыгает? во время вычислений происходят прерывания - вот тебе потеряные такты. в прерваниях нечго решать примеры с умножением и делением. ты должен поднять флаг прерывания, который делается за один такт и быстро свалить с прерывания в основную программу, обрабатывать этот флаг. было там прерывание или не было, выполнять рассчеты и прочее. посмотри в даташите сколько тактов занимает умножение и всё станет ясно. прерывание должно выполняться максимально быстро, чтоб не затормаживать работу основной программы. в этом его суть. перемести все расчеты в основную программу по поднятию флага прерывания и будет красота.
@ДенисСемёнов-н4ф
@ДенисСемёнов-н4ф 9 ай бұрын
вычисления в прерывании? ни к чему так делать
SIZE DOESN’T MATTER @benjaminjiujitsu
00:46
Natan por Aí
Рет қаралды 4,7 МЛН
I thought one thing and the truth is something else 😂
00:34
عائلة ابو رعد Abo Raad family
Рет қаралды 10 МЛН
FOREVER BUNNY
00:14
Natan por Aí
Рет қаралды 32 МЛН
Проблемы с топливоподачей находим ... сканером.
9:31
Компьютерная автодиагностика и видеокурсы
Рет қаралды 15 М.
Софт (VS code + ESP-IDF) для беспилотника на ESP32
16:15
Беспилотник на ESP32
Рет қаралды 3,8 М.
Алгоритм "Сортировка пузырьком"
9:11
Andrey Frolov
Рет қаралды 1,4 М.
Что должен знать C# Junior разработчик?
9:33
Sergey Nemchinskiy
Рет қаралды 108 М.
ПИД регулятор
30:35
Andrey Frolov
Рет қаралды 7 М.
SIZE DOESN’T MATTER @benjaminjiujitsu
00:46
Natan por Aí
Рет қаралды 4,7 МЛН