Обсуждаем контроллеры компании Atmel.
Ответить

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср фев 28, 2018 16:24:12

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Ср фев 28, 2018 16:43:20

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

Категорически не соглашусь! Информация должна быть качественной. В идеале форумы должны быть информативными, а не постоянными повторениями, а подскажите-ка мне то-то. Этому персонажу лень жопу от стула оторвать, один раз книжку прочитать. Ему проще лежа на печи на диване на смартфоне настучать сиюминутный вопрос. Если мучать форум, так более содержательными вопросами...

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 01, 2018 21:14:07

Почитал книги, порылся в интернете, но так и не нашел однозначного ответа. Нужно в Attiny 13 использовать внешнее прерывание по INT_0(что то вроде бистабильного реле- одно нажатие-вкл, второе-выкл).

Вопрос: нужно ли делать антидребезг при использовании этого прерывания (программный или аппаратный)?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 01, 2018 21:45:27

кнопка... там не нужно прерывание, с ним больше возни. Лучше запустить таймер с периодом в 20мс, в его прерывании один раз смотреть кнопку, ловить изменения(сранивая результаты нынешнего и предыдущего скана) и переключать то что вам надо. С прерыванием на кнопку НУЖЕН антидребезг и реализовать его достаточно просто и изящно не получится.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 01, 2018 21:49:07

Это почему? А запретить прерывание от INT, запустить таймер, а по истечении времени проверить состояние. Выполнить задачу согласно состояния и разрешить прерывания по INT.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Чт мар 01, 2018 21:55:02

Планируется использование команды Sleep, а значит либо сторожевой, либо внешнее прерывание, что бы не будить контроллер без необходимости.
Но суть понятна - антидребезг нужен.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 02, 2018 11:45:38

Скорее "ожидание подтверждения отпускания"...
:roll:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 02, 2018 12:20:58

Даже в этом случае, прерывание по порту с кнопкой пусть только будит контроллер скажем на время не более 100мс, а опрос кнопок - по таймеру. Таймер на время сна просто останавливать. Впрочем, во время глубокого сна с отключением тактирования можно и не останавливать.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 02, 2018 14:16:34

То есть что то вроде:

EXT_INT0:
ldi temp,250
d1:
dec temp
brne d1

reti

при 128 кГц /8 ?

прерывание по спадающему фронту
Последний раз редактировалось Jetetex Пт мар 02, 2018 15:02:30, всего редактировалось 1 раз.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 02, 2018 14:40:33

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

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Пт мар 02, 2018 18:52:43

нет, сразу же выходишь с прерывания и ВСЁ. В прерывании ничего делать не надо. Его задача - пробудить контроллер, а дальше будут работать обычные механизмы отработки нажатия кнопок и т.д.
После команды SLEEP обнулить таймер, чтобы с нуля пошел считать и если кнопка реально была нажата то через 10-20мс вы об этом узнаете, если кнопка не нажата и ничего не надо больше делать считаете по таймеру 5...10 переполнений и снова в SLEEP.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 09:08:47

нет, сразу же выходишь с прерывания и ВСЁ. В прерывании ничего делать не надо. Его задача - пробудить контроллер, а дальше будут работать обычные механизмы отработки нажатия кнопок и т.д.

Если ничего не делать, то прерывание по INT будет постоянно отрабатывать пока не будет отпущена кнопка… такое дрыганье не есть гуд.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 09:29:35

Уточнение, прерывание, которое настроено на низкий уровень. А не по спаду или фронту.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 11:02:21

Как простой выход из ситуации - перед сном прерывание разрешать, а после сна запрещать.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 11:13:17

Alexeyslav писал(а):если кнопка не нажата
тогда с какого хера он проснулся?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 12:15:30

От помехи, например.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 13:31:02

Уточнение, прерывание, которое настроено на низкий уровень.

Это и так понятно, так как другие варианты не разбудят МК.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 13:39:03

Почему не разбудят? Уточнения же небыло что это сон с отключением тактового генератора.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вс мар 04, 2018 13:55:26

Потому что в 90% случаях режим сна используется для экономии энергопотребления в мобильных устройствах, а это PowerDown…

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Вт мар 06, 2018 12:13:00

Добрый день, у меня похожая ситуация с кнопкой.
Решил испробовать прерывание PCINT у Attiny13A, и написал простенькую программу с кнопкой (с PB3 на общий, и подтяжка 47К сверху) и светодиод с PB0 на общий.
Поскольку, PCINT это прерывание по смене состояния вывода, решил сделать так. Для борьбы с дребезгом, при в ходе в прерывание запрещаются прерывания, и запускается задержка на 50 мс, пока кнопка дребезжит. Далее, проверяется состояние кнопки, и если кнопка нажата (PB3 = 0), происходит выход, и возврат в главный цикл. Когда кнопка отпускается, происходит новое прерывание, но так как кнопка отжата (PB3=1), происходит переход на выполнение команд смены состояния выхода.
Выглядит все красиво, но на практике не работает. Точнее, работает еще хуже, чем если вообще никак не бороться с дребезгом. Однако, если "нажимать кнопку" от источника без дребезга (генератор на другом МК), то все работает идеально, и в связи с этим подозреваю что, либо по каким-то причинам не отрабатывает задержка, либо при нажатии или отпускании кнопки происходит больше чем одно прерывание, которое МК откладывает "на потом". Об этом говорит то, что если сделать большую задержку (1сек), то при нажатии на кнопку, светодиод загорается на секунду и гаснет.
Никак не могу понять что с этим делать, помогите разобраться. Может, просто элементарно ступил где-то.
Вложения
PCINT_check.asm
(1.55 KiB) Скачиваний: 218
Ответить