Описание: Управление светодиодом одной кнопкой |
Поиск в теме | Версия для печати |
Гость |
Отправлено: 27 Июня, 2012 - 16:08:11
|
УДАЛЁН
|
обнаружить нажатие кнопки
задержку порядка 50 мс,
проверить, что кнопка еще нажата
зажигать/тушить светодиод. |
|
|
Гость |
Отправлено: 27 Июня, 2012 - 18:17:12
|
УДАЛЁН
|
это не програмирование это алгоритм.
крутится цикл, ждет на ноге 0 или 1 (зависит от вашей схемы)
дождалось-вылетело из цикла
задержка на 50мс
проверить, что кнопка еще нажата - весь дребезг уже ушел.
действовать согласно затее.
примерно так (предполагается, что пинД0 подтянут к питанию и кнопкой сажается на землю):
while (1) //открытие бесконечного цикла
{
while (PIND.0==1) {} //ждем 0 на ноге D.0
delay_ms(50); //задержка
if (PIND.0==0) // проверка после окончания дребезга
{ // действия согласно затее
if (PINB.0==1)
{ PORTB.0=0; }
else
{ PORTB.0=1; }
}
while (PIND.0==0) {} // ожидание, когда юзер кнопку отпустит
};
}
при отпускании кнопки благодаря дребезгу мы снова попадем в проверку, но после ожидания 50 мс на ноге не будет 0.
теперь о аппаратном методе: нужно к ноге с кнопкой подключить конденсатор и резистор, практически всё равно дребезг будет проскакивать. |
|
|
segey |
Отправлено: 28 Июня, 2012 - 10:27:23
|
Рядовой

Сообщений всего: 15
Дата рег-ции: Июнь 2012
|
Спасибо за помощь!
Запрограммировал вот так:
while (1) //открытие бесконечного цикла
{
while (PIND.0==1) {} //ждем 0 на ноге D.0
delay_ms(50); //задержка
if (PIND.0==0) // проверка после окончания дребезга
{ // действия согласно затее
if (PINB.0==1)
{ PORTB.0=0; }
else
{ PORTB.0=1; }
}
while (PIND.0==0) {} // ожидание, когда юзер кнопку отпустит
};
}
Уже стало лучше, но иногда проскакивает дребезг.
Какой конденсаторт и резистор подключить к ноге с кнопкой?
(Добавление)
Predator пишет:теперь о аппаратном методе: нужно к ноге с кнопкой подключить конденсатор и резистор
Какой номинал резистора и конденсатора?
Predator пишет:практически всё равно дребезг будет проскакивать
Меня это не устривает.
Роль кнопки будет выполниять реле, управляемое датчиком. Вместо сведодиода я хочу поставить реле.
Подскажите, пожалуйста, что можно сделать, чтобы схема работала надежно без збоев? |
|
|
Гость |
Отправлено: 28 Июня, 2012 - 12:49:07
|
УДАЛЁН
|
больше таймер поставить 100 мс например.
а вообще в хорошей документации на реле, кнопки ... есть упоминание на эту тему.
тут так: чем мощнее контакты, тем дольше они дребезжат. |
|
|
Гость |
Отправлено: 28 Июня, 2012 - 17:27:59
|
УДАЛЁН
|
а у реле на входе есть нормально замкнутый контакт (который размыкается при срабатывании)?
если есть, то ставьте микросхемку 74АС74 или любой аналог (отечественные *ТМ2)
и будет очень надежно работать. |
|
|
Гость |
Отправлено: 28 Июня, 2012 - 21:26:50
|
УДАЛЁН
|
ну если само устройство - побочный эффект от изучения контроллеров, то приближайте антидребезговую задержку к времени удержания реле в замкнутом состоянии.
обратите внимание на ток потребления выходного реле и не забудьте поставить параллельно катушке выходного реле диод. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): [1] 2 3 » |
« С чего начать? » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
  |
|
|
|