Смысл примерно одинаков: увидели нажатие, подождали, ещё раз проверили. Если оно осталось - ура, это был не дребезг. Если не было - значит дребезг.
Мелкие вопросы по МК и ПЛИС.
Может быть не одна реализация.. Зависит от того, как опрашиваются кнопки. Настолько замусоленная тема, товарищи, воспользуйтесь гуглом для начала.
Смысл примерно одинаков: увидели нажатие, подождали, ещё раз проверили. Если оно осталось - ура, это был не дребезг. Если не было - значит дребезг.
Смысл примерно одинаков: увидели нажатие, подождали, ещё раз проверили. Если оно осталось - ура, это был не дребезг. Если не было - значит дребезг.
- Реклама
- Сообщения: 79
- Зарегистрирован: Пт июн 15, 2012 13:11:36
- Сообщения: 79
- Зарегистрирован: Пт июн 15, 2012 13:11:36
Можно с простой задержкой а можно с использованием таймера. Что лучше ????
Полумеры тоже надо знать, т.к. в некоторых случаях они являются достаточны. Я же не утверждаю это единственно верным способомJack_A писал(а):учите полумерам
yron:
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
void main(void)
{
while(1){
if(PINC&(1<<PC0)){
_delay_us(50);
if(PINC&(1<<PC0)){
// наше умное действие, дребезга не было
}
}
}
}
- Реклама
- Сообщения: 79
- Зарегистрирован: Пт июн 15, 2012 13:11:36
Спасибо с простой задержкой delay я уже знаю как работать мне сейчас таймер бы понять.
Чтоб не привязываться к конкретному типу МК,yron писал(а): Но хотелось бы увидеть решение и в программном виде .
Если его поместить в прерывание по таймеру, то п. 2 будет выполняться автоматически,
об опросе кнопок можно забыть и только в основной программе периодически посматривать
на состояние флага. При обработке измененного флага , конечно, его необходимо сбросить.
При этом легко реализуется срабатывание как по нажатию, так и по отпусканию кнопки.
- Вложения
-
- A_K.JPG
- (35.6 КБ) 613 скачиваний
чет я не понял во втором алгоритме сразу начинаем с паузы?зачем,?и зачем столько флагов держать?
yron, я так и не понял в какой момент должен второй светодиод потухнуть. в момент перехода ко второму пункту или когда,если так,то он и будет включаться каждые пять сек и выключиться через десять,пока не включится эта вторая кнопка
yron, я так и не понял в какой момент должен второй светодиод потухнуть. в момент перехода ко второму пункту или когда,если так,то он и будет включаться каждые пять сек и выключиться через десять,пока не включится эта вторая кнопка
В поисках истины человек развивается.
Если поместить в прерывание , то п.2 не нужен, я же сказал, что он выполняется автоматически, если прерывание настроено на 10мс. А если чаще, то п.2 -- это внутренний счетчик : "N-1 прерываний пропускаем, а на N-ом срабатываем". 3 раза - для надежности. Из проверенной рабочей программы.
И пот`ом каждый автор имеет свой стиль. "Что ни город, то норов".
И пот`ом каждый автор имеет свой стиль. "Что ни город, то норов".
- Сообщения: 79
- Зарегистрирован: Пт июн 15, 2012 13:11:36
Да он будет включатся каждые 5 сек и выключатся через 10 пока не включится эта вторая кнопка. Пока нажата 2 кнопка все 3 светодиода горят безостановочно.vitalik_1984 писал(а):чет я не понял во втором алгоритме сразу начинаем с паузы?зачем,?и зачем столько флагов держать?
yron, я так и не понял в какой момент должен второй светодиод потухнуть. в момент перехода ко второму пункту или когда,если так,то он и будет включаться каждые пять сек и выключиться через десять,пока не включится эта вторая кнопка
Из темы: http://radiokot.ru/forum/viewtopic.php? ... &start=120
КРАМ писал(а):Ни при одной кнопке ни при матрице прерывания от клавиатуры формировать не нужно. Делают это так.UR5FDG писал(а):И еще вопрос, а если у меня матричная клавиатура, то при нажатии любой кнопки генерировать сигнал прерывания?
Верхняя эпюра - это входной сигнал от кнопки (кнопок).
Средняя - это прерывания от таймера.
Нижняя - это программное состояние кнопки (кнопок).
Т.е. в прерываниях от таймера, которые должны следовать реже, чем длительность дребезга, но чаще, чем необходимая скорость реакции на нажатие кнопки, происходит защелкивание состояния входа от кнопки. Программное состояние кнопки фиксируется только тогда, когда два защелкнутых состояния подряд одинаковы.
КРАМ писал(а):...............
Выбираете свободный таймер или используете уже имеющийся. Интервал переполнения этого таймера (прерываний от него) берете больше времени дребезга выбранных кнопок (смотрите в даташите, обычно порядок этого времени 10...50 мс). Пусть это будет 65 мс. Значит если таймер 16 битный, а частота на его входе 1 МГц, то прерывания будут следовать примерно через 65 мс.
Вот в обработчике этого прерывания читаете состояние порта к которому подключена кнопка. Это состояние вдвигаете справа на лево в некую переменную и тут же маскируете у нее все разряды кроме двух младших. Если значение этой переменной = 0, то пишите в программное состояние кнопки 0, если значение этой переменной = 3, то программное состояние кнопки 1, а если переменная равна 1 или 2, то изменять значение программной кнопки нельзя - оно останется прежним.
В программе пользуетесь только программным значением кнопки (0 или 1).
Дребезга у программного значения не будет.
yron, нашёл ошибку
Меняем строку
if (!step_2 && !PIND.3) PORTD.7 = 1; //если на входе ноль то выводим на третий выход единицу
на две строки
if (!step_2)
if (!PIND.3) PORTD.7 = 1; //если на входе ноль то выводим на третий выход единицу
Протупил, как мышара... Теперь всё моргает, проверил в протеусе.
С дребезгом сами разберётесь, или покумекать за компанию?
И кстати, тут прочёл ваши уточнения - если датчик после загорания 3-го св.диода вдруг станет 1, цикл так же начинаем с начала? Если да, то надо править, я под первое ТЗ лепил.
Меняем строку
if (!step_2 && !PIND.3) PORTD.7 = 1; //если на входе ноль то выводим на третий выход единицу
на две строки
if (!step_2)
if (!PIND.3) PORTD.7 = 1; //если на входе ноль то выводим на третий выход единицу
Протупил, как мышара... Теперь всё моргает, проверил в протеусе.
С дребезгом сами разберётесь, или покумекать за компанию?
И кстати, тут прочёл ваши уточнения - если датчик после загорания 3-го св.диода вдруг станет 1, цикл так же начинаем с начала? Если да, то надо править, я под первое ТЗ лепил.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
Всё, победился и дребезг, и прочая. Весь проект (кодевижн + протеус) в архиве.
Прерывание по входу можно отключить (а можно и не трогать), теперь всё привязано только к таймеру 10Гц, так оказалось проще.
Удачи, я спать
Да, включение-выключение через 2 сек, как тут где-то проскакивало...
Прерывание по входу можно отключить (а можно и не трогать), теперь всё привязано только к таймеру 10Гц, так оказалось проще.
Удачи, я спать
Да, включение-выключение через 2 сек, как тут где-то проскакивало...
- Вложения
-
- mega8.zip
- (59.01 КБ) 157 скачиваний
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
просто добавить в конце прерывания что то вроде
я уже делал почти так с одним третьим выходом- нормально тухнет.
сейчас негде попробовать пока что.
UPD
Молодец Eprinter всех удивил, вроде циферблат никто не говорил делать
Код: Выделить всё
if (PIND.3) PORTD.7 = 0;PORTD.6 = 0; step_1=50;
сейчас негде попробовать пока что.
UPD
Молодец Eprinter всех удивил, вроде циферблат никто не говорил делать
В поисках истины человек развивается.
- Сообщения: 7
- Зарегистрирован: Вс июн 17, 2012 22:05:31
в качестве диплома писал реализацию алгоритма шифрования ГОСТ 28147-89 на ПЛИС xilinx на VHDL.
стоит ли здесь выложить текст основной части + текст программы в качестве мануала как писать для совсем нубов + разбор типичных ошибок при написании?
стоит ли здесь выложить текст основной части + текст программы в качестве мануала как писать для совсем нубов + разбор типичных ошибок при написании?
Дык без него никак не получалось отловить, в каком же месте перекодил в первой версииvitalik_1984 писал(а):вроде циферблат никто не говорил делать
А так видно, идёт ли отсчёт и какой из двух.
Кстати, в коде много что ещё можно (и нужно) улучшить, например исключить срабатывание при залипании кнопки, таки что не расслабляйся, yron
А почему собственно нет?mahury писал(а):в качестве диплома писал реализацию алгоритма шифрования ГОСТ 28147-89 на ПЛИС xilinx на VHDL.
стоит ли здесь выложить текст основной части + текст программы в качестве мануала как писать для совсем нубов + разбор типичных ошибок при написании?
Только оформить лучше как статью, деталей не подскажу, сам не делал.
[color=#006699]In der großen Familie nicht kluven klatz-klatz![/color]
- Сообщения: 79
- Зарегистрирован: Пт июн 15, 2012 13:11:36
Всем большое спасибо за помощь.
Eprinter Благодарю вас особенно за тот труд который вы сделали для меня.
Eprinter Благодарю вас особенно за тот труд который вы сделали для меня.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Добрый день)) Решил вот тут поюзать EEPROM.
Есть устройство, которое управляет координатами станка. При первом подключении происходит его калибровка (устанавливается значение переменной х = 0, а устройство передвигается в нулевое положение), а в последующем все перемещения осуществляются либо увеличением х, либо его уменьшением.
Необходимо чтобы даже после выключения устройство знало о текущем местоположении втулки станка, чтоб при последующем запуске правильно управлять втулкой.
Ранее было решено использовать EEPROM для этой цели, но сегодня наткнулся на статью, что EEPROM позволяет перезаписывать себя только 10000 раз, а моя установка будет делать это около 100 раз в сутки... Так ли это, и если да, то какие ещё можно рассмотреть варианты?
Есть устройство, которое управляет координатами станка. При первом подключении происходит его калибровка (устанавливается значение переменной х = 0, а устройство передвигается в нулевое положение), а в последующем все перемещения осуществляются либо увеличением х, либо его уменьшением.
Необходимо чтобы даже после выключения устройство знало о текущем местоположении втулки станка, чтоб при последующем запуске правильно управлять втулкой.
Ранее было решено использовать EEPROM для этой цели, но сегодня наткнулся на статью, что EEPROM позволяет перезаписывать себя только 10000 раз, а моя установка будет делать это около 100 раз в сутки... Так ли это, и если да, то какие ещё можно рассмотреть варианты?
Зачем писать в энергонезависимую память, если станок не выключается? Для этого есть ОЗУ.
- Сообщения: 2316
- Зарегистрирован: Вс июн 26, 2011 20:03:21
Устройство работает от сети. Тоесть после каждого использования оно обесточивается...



