demiurg301 писал(а):Народ - а сделать програмно фильтр дребезга ?
вам же было сказано - вы не читаете ответов?
мое мнение - для работы с кнопками таймеры не нужны, прерывания - тоже излишество. бывают случаи, когда без прерываний никак, но чаще всего тупой опрос порта дает самый простой и надежный результат. примерно так:
demiurg301 писал(а):Народ - а сделать програмно фильтр дребезга ?
вам же было сказано - вы не читаете ответов?
мое мнение - для работы с кнопками таймеры не нужны, прерывания - тоже излишество. бывают случаи, когда без прерываний никак, но чаще всего тупой опрос порта дает самый простой и надежный результат. примерно так:
switch(get_key()){
case KEY1 :
// обработка кнопки 1
break;
case KEY2:
// обработка кнопки 2
break;
// и так далее
}
НЕ мне сказано!!! ДА я и влез то потомучто не понимаю как можно на пустом месте создавать проблему! Работа со счётчиком и таймерами проверена и является чуть ли не классическим "фильтром" дребезга. Для каждого типа кнопок можно настроить и программу не тормозит как 10-20 мс задержки в простом циклическом опросе...
demiurg301 писал(а):Работа со счётчиком и таймерами проверена и является чуть ли не классическим "фильтром" дребезга. Для каждого типа кнопок можно настроить и программу не тормозит как 10-20 мс задержки в простом циклическом опросе...
ну, если атомную бомбу считать классическим средством для уничтожения пауков - то и применение таймеров, прерываний и т.п. для работы с кнопками можно назвать классикой жанра хотя лично я считаю, что это скорее категория "из пушки по воробьям". ну а на счет торможения программы - это вообще смешно... однако я снова даю важную ремарку: бывают случаи, когда без прерываний и таймеров действительно не обойтись.
битва с дураками проиграна, победители торжествуют. слава победителям!
demiurg301 писал(а):Работа со счётчиком и таймерами проверена и является чуть ли не классическим "фильтром" дребезга. Для каждого типа кнопок можно настроить и программу не тормозит как 10-20 мс задержки в простом циклическом опросе...
ну, если атомную бомбу считать классическим средством для уничтожения пауков - то и применение таймеров, прерываний и т.п. для работы с кнопками можно назвать классикой жанра хотя лично я считаю, что это скорее категория "из пушки по воробьям". ну а на счет торможения программы - это вообще смешно... однако я снова даю важную ремарку: бывают случаи, когда без прерываний и таймеров действительно не обойтись.
Завод кнопок на прерывание бывает важен например для кнопки аварийного выключения или для немедленной реакции на человека( секундомер например встроеный в устройство).
Делать задержку ( а они бывают очень большие - в зависимости от массы кнопок, степени защиты , времени работы) после выставки "1" в матрице - накладно по времени цикла.
Я использовал фильтр ( как описал выше) для работы с обычной матричной клавой - и ничего ужасного в задействовании одного 8 битного таймера не увидел. Зато точно не сработает от 50Гц наводки или жира с пальцев - а время опрос существенно уменьшается.
demiurg301 писал(а):Завод кнопок на прерывание бывает важен например для кнопки аварийного выключения или для немедленной реакции на человека( секундомер например встроеный в устройство).
мда... какую бы систему вы не делали, завод кнопки на прерывание с целью обеспечения быстрого аварийного отключения СОВЕРШЕННО БЕСМЫСЛЕННО. кнопку нажимает человек, а его мышечная реакция даже у самых-самых тренированных людей редко бывает лучше 0,1 секунды, т.е. 100 миллисекунд. если аварийное отключение должно что-то там опасное остановить, например, пресс или циркулярную пилу, то надо учесть, что быстродействие электромеханических исполнительных устройств не может превысить 0,1 сек, т.е. те же самые 100 миллисекунд. итого даже в самом супер-идеальном случае быстрее, чем 200 миллисекунд никакая аварийная кнопка не сработает. и ваши потуги уменьшить время реакции на нажатие кнопки на жалкие 10-20 миллисекунд - просто пустая трата сил.
demiurg301 писал(а):Делать задержку ( а они бывают очень большие - в зависимости от массы кнопок, степени защиты , времени работы) после выставки "1" в матрице - накладно по времени цикла.
ничуть не так. задержку надо делать после съема значений со всех кнопок. будь их хоть 100, алгоритм прежний:
1. запоминаем состояние всех кнопок
2. делаем задержку
3. сравниваем текущее состояние кнопок с запомненным
4. если оба состояния равны - дребезг кончился, значение можно анализировать.
задержка всегда будет определяться длительностью дребезга, который для обычных кнопок длится не более 20 миллисекунд.
demiurg301 писал(а):ничего ужасного в задействовании одного 8 битного таймера не увидел. Зато точно не сработает от 50Гц наводки или жира с пальцев - а время опрос существенно уменьшается.
а ничего ужасного и нет. просто бесполезно, имхо.
битва с дураками проиграна, победители торжествуют. слава победителям!
Подскажите пожалуйста помню как то создавал такие шняги типа main led (main)
А дальше писал как моргать светском потом еще такую хрень создавал но led1 и другой цикл...
Так вот как бы это написать то?мэин название мэин скобка не помню какая алгоритм и скобка закрываеться,как это правильно написать?и как потом вызвать?спасибо!
ничуть не так. задержку надо делать после съема значений со всех кнопок. будь их хоть 100, алгоритм прежний:
1. запоминаем состояние всех кнопок
2. делаем задержку
3. сравниваем текущее состояние кнопок с запомненным
4. если оба состояния равны - дребезг кончился, значение можно анализировать.
задержка всегда будет определяться длительностью дребезга, который для обычных кнопок длится не более 20 миллисекунд.
И что вам даст запоминание всех кнопок в матричной клавиатуре? 4х4 хотябы
1) выставляем единицу в строке
2) задержка
3) опрос столбцов
4) повторяем 1-3 - 4 раза для каждой строки.
Итого 80мс. А есть кнопки у которых дребезг и 50 и 100мс. Да и кнопки могут банально ржаветь, а там начинает пробивать жир, налёт и окислы... задрежка ещё увеличивается.
В сендуомерах важны даже 20мс, а если кнопка - это концевик какой-нибудь , то срабатывание должно быть как можно короче, т.е. прерывание.
demiurg301 писал(а):И что вам даст запоминание всех кнопок в матричной клавиатуре? 4х4 хотябы
1) выставляем единицу в строке
2) задержка
3) опрос столбцов
4) повторяем 1-3 - 4 раза для каждой строки.
мне - ничего не даст, я глупостями не занимаюсь
а алгоритм должен быть таким:
1) выставляем 1 в строке
2) считываем ВСЕ столбцы одновременно
3) далее п. 1 и 2 по всем строкам.
4) задержка
5) повторяем опрос ВСЕХ кнопок
6) сравниваем старое и новое, как я описывал ранее и принимаем решение.
алгоритм упрощенный, и не для всех случаев применим "тупо", однако сам подход прежний. Интересно, как в вашем алгоритме вы сможете обрабатывать одновременное нажатие нескольких кнопок? число повторов и опросов возрастет... а в моем алгоритме - все делается на раз.
собственно, мой алгоритм рассчитан на небольшое количество кнопок, до 8 оптимально, и его прямой перенос на матрицу может оказаться невыгодным. однако, его модификация может применяться и для матрицы, но об этом в другой раз
битва с дураками проиграна, победители торжествуют. слава победителям!
мне - ничего не даст, я глупостями не занимаюсь
а алгоритм должен быть таким:
1) выставляем 1 в строке
2) считываем ВСЕ столбцы одновременно
3) далее п. 1 и 2 по всем строкам.
4) задержка
5) повторяем опрос ВСЕХ кнопок
6) сравниваем старое и новое, как я описывал ранее и принимаем решение.
алгоритм упрощенный, и не для всех случаев применим "тупо", однако сам подход прежний. Интересно, как в вашем алгоритме вы сможете обрабатывать одновременное нажатие нескольких кнопок? число повторов и опросов возрастет... а в моем алгоритме - все делается на раз.
собственно, мой алгоритм рассчитан на небольшое количество кнопок, до 8 оптимально, и его прямой перенос на матрицу может оказаться невыгодным. однако, его модификация может применяться и для матрицы, но об этом в другой раз
Да, вот только после выставки 1 в строку - даже при ранее нажатой кнопке может возникнуть "дребезг"( например если масло в кнопку попало или ещё что) и вы не получите нажатие(или получите на несколько циклов позже, если палец не уберёте - получается эффект задержки реакции кнопки) . Поэтому я и делаю задержку после кажой выставки 1 . Т.е. пункт 3 и 4 местами поменен. А так смысл тотже - переждать дребезг. Я использовал такой алгоритм и таймер для клавиатур 4*4 , 16*16.
по какой бы причине дребезг не возникал, что мой, что ваш алгоритмы его подавляют, внося дополнительную задержку - принцип подавления одинаков. все прочее - от лукавого
битва с дураками проиграна, победители торжествуют. слава победителям!
Какой из этих вариантов правильней и заведомо менее глючный (ну там оптимизатор, логика компилятора) .
Использую 1й вариант, но появились сомнения, а всегда ли будет взят 1й элемент массива.
Какой из этих вариантов правильней и заведомо менее глючный (ну там оптимизатор, логика компилятора) .
Использую 1й вариант, но появились сомнения, а всегда ли будет взят 1й элемент массива.
нормальный компилятор ДОЛЖЕН понимать ПРАВИЛЬНУЮ запись: PtS = stroka;
битва с дураками проиграна, победители торжествуют. слава победителям!
Какой из этих вариантов правильней и заведомо менее глючный (ну там оптимизатор, логика компилятора) .
Использую 1й вариант, но появились сомнения, а всегда ли будет взят 1й элемент массива.
нормальный компилятор ДОЛЖЕН понимать ПРАВИЛЬНУЮ запись: PtS = stroka;
действительно, вы сделали для меня открытие. А я всегда разадресацию и адресацию ( ну или приведение к типу = хотя видать автоматом всё компилятор делает) делал Не знаю даже, чот в голову не приходило, что указателю просто массив "присвоить". Ща перемучу кое какую прогу -грешу на глюки в указателях.
Так а всётаки - конкретно куда этот указатель будет "указывать". На 1й ( нулевой точнее) элемент массива? Т.е. практически на него ... а документально?