Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Пн июн 11, 2012 18:03:35
Открыл глаза
Зарегистрирован: Пт мар 23, 2012 17:11:00 Сообщений: 46
Рейтинг сообщения:0
То есть все время работы мк он будет прерываться и проверять имело ли место нажатия кнопки? а это разве не повлияет на производительность? или на высокой частоте это не значительно?
Пример. Время одного машцикла при тактовой частоте 8 МГц - 125 нс (для Меги). Для исполнения обработчика прерывания с обозначенным выше алгоритмом потребуется порядка 15 машциклов, включая латентность самого прерывания. Т.е. примерно 2...2,5 мкс. Они следуют с частотой 65 мс. Скважность процесса - 30 000 минимум. Т.е. потеря производительности составит 0,003%... Если учесть, что любимый цикл для Вас - пустой, то о чем тут речь?
Программное состояние кнопки фиксируется только тогда, когда два защелкнутых состояния подряд одинаковы.
По факту достаточно ОДНОГО защелкивания. Ведь в процессе дребезга на момент защелкивания может быть считано только одно из двух 1 или 0. Но поскольку конкретно этот момент считывания обрамляют разные уровни 1 и 0 либо 0 и 1 то каким бы ни было считывание в момент дребезга оно лишь приведет к отставанию считывания реального состояния кнопки максимум на время одного опроса.
т.е. что получается в момент дребезга при нажатии кнопки : 0-0-"1"-1-1 или 0-0-"0"-1-1 в момент отпускания: 1-1-"1"-0-0 или 1-1-"0"-0-0. Ни в одном из случаев нет разрыва последовательности, которая могла бы привести к дребезгу.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Нет, уважаемый, код Вы будете писать сами. .... Вот в обработчике этого прерывания читаете состояние порта к которому подключена кнопка. Это состояние вдвигаете справа на лево в некую переменную и тут же маскируете у нее все разряды кроме двух младших. Если значение этой переменной = 0, то пишите в программное состояние кнопки 0, если значение этой переменной = 3, то программное состояние кнопки 1, а если переменная равна 1 или 2, то изменять значение программной кнопки нельзя - оно останется прежним...
А все таки, для особо тупых хотелось бы кусочек кода. Я опрос кнопок делаю по другому - таймер настроен на прерывания с частотой 1 мс (там же в прерывании и опрос кнопок и индикация семисегментная):
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт мар 19, 2013 20:34:08
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:-1 Медали: 1
Цитата:
Если кнопка нажата - переменная KeyUpCnt=50.
А какой смысл ждать, пока переменная наберёт число 50 ? Ваш вариант - это обычный опрос ПИНа - как поймали "лог 0" на выводе - кнопка нажата. Просто ещё появилась задержка на 50 мс.
Заголовок сообщения: Re: Обработка нажатия кнопки в AVR...
Добавлено: Вт мар 19, 2013 20:59:32
Модератор
Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4510 Откуда: Планета Земля
Рейтинг сообщения:-1 Медали: 1
KeyUpCnt=50 это тоже самое, что KEY_UP=0, только через 50 Мс. Можно просто опросить KEY_UP и узнать нажата кнопка или нет, на выводе всё равно "0" сам по себе не появится, а ловите Вы всего одно состояние - "кнопка нажата". По поводу "хотелось бы кусочек кода" - смотрите в соседней ветке про кнопки.
Нет смысла городить огород с обнулением переменной от дребезга. Делай просто счетчик до 10 и каждое 10-е прерывание фиксируй состояние кнопок. Дребезг не будет беспокоить(если он длиться меньше 10мс).
Всем привет! Пишу программу гирлянды ,для ATtiny2313,в CodeVisionAVR. Есть несколько световых эффектов(управление PORTB) и кнопка PIND.0. Вопрос в том как реализовать переключение между режимами световых эффектов,нажатием этой кнопки. Что-то в этом роде:нажал-1эфект,еще раз нажал-2 эффект и т.д.,а последнее нажатие - вызывает почередное включение всех эффектов. Программировать только учусь,поэтому прошу сильно не пинать,и буду признателен любой информации. Спасибо!
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения