Лабораторная работа 9. Дребезг контактов
Цель работы:
Получение дополнительных навыков по работе с кнопкой, знакомство с явлением дребезга конактов на примере управления яркостью светодиода с помощью кнопок.
Теоретическая часть
Дребезг - явление, происходящее в электромеханических коммутационных устройствах, длящееся некоторое время после замыкания электрических контактов и состоящее из многократного неконтролируемого замыкания и размыкания контактов. Явление обусловлено упругостью материалов и деталей контактной системы - контакты «подпрыгивают» некоторое время при соударениях, размыкая и замыкая электрическую цепь. Таким образом, дребезг - явление между двумя стабильными со- стояниями контактов (Рисунок 9.1).
Рисунок 9.1. Явление дребезга
Есть два способа решения этой проблемы: программный и аппаратный (на уровне железа).
Для программного устранения дребезга, достаточно после первого изменения состояния кнопки установить паузу в несколько миллисекунд для того, чтобы контакт стабилизировался и дребезг был проигнорирован.
Аппаратное устранение дребезга, в подавляющем большинстве случаев, более предпочтительно программному способу по ряду причин:
- аппаратная реализация всегда более надежна,
- высвобождаются ресурсы процессора из-за отсутствия необходимости дополнительных вычислений,
- уменьшается объем кода и упрощается процесс отладки.
При возникновении дребезга в задачах с прерыванием решить проблему программным способом невозможно.
Для аппаратного устранения дребезга необходимо изменить принципиальную электрическую схему. В первую очередь, необходимо резистор сделать не стягивающим (резистор, установленный между участком цепи и землёй), а подтягивающим (резистор, установленный между участком цепи и плюсом), а во-вторых, параллельно с выводами кнопки, установить конденсатор. Применение данной схемы позволит устранить дребезг.
При выполнении данной работы дребезг будет присутствовать для демонстрации и оценки его влияния на ход работы. В качестве дополнительных задач будет предложено произвести изменения, чтобы исключить влияние дребезга на работу.
Практическая часть
В данной лабораторной работе необходимо разработать программу, которая будет управлять яркостью светодиода с помощью кнопок. Для этого рассмотрим тип данных boolean.
Тип данных boolean
Описание:
boolean – логический (булевый) тип данных. Переменная такого типа данных может принимать только одно из значений true («логическая еди- ница», 1) или false («логический ноль», 0). Переменная занимает в памяти 1 байт.
Схема подключения:
К данной рабочей программе используется следующая схема под- ключения (Рисунок 9.2). Для реализации проекта потребуются следую- щие компоненты: макетная плата, резистор на 220 Ом (1 шт), тактовая кнопка (2 шт), светодиод (1 шт) и провода.
Рисунок 9.2. Схема подключения
После сборки схема имеет следующий вид (Рисунок 9.3):
Рисунок 9.3. Внешний вид схемы после сборки
Рабочая программа:
#define plus_button_pin 2
#define minus_button_pin 3
#define led_pin 12
int brightness = 100;
// Использование булевой переменной для хранения
// значения с кнопки
boolean plusUp = true;
boolean minusUp = true;
// Функция имеет 3 параметра: номер пина с кнопкой (buttonPin),
// состояние до проверки (wasUp) и градация яркости (delta).
// Функция возвращает обратно новое, текущее состояние кнопки.
// Функция будет постоянно вызываться, и при изменении состояния
// кнопки будет меняться яркость.
boolean handleClick(int buttonPin, boolean wasUp, int delta)
{
boolean isUp = digitalRead(buttonPin); if (wasUp && !isUp)
{
delay(10);
isUp = digitalRead(buttonPin);
// при нажатии меняется яркость от 0 до 255 if (!isUp)
brightness = constrain(brightness + delta, 0, 255);
}
// Возвращение значения обратно, в вызывающий код return isUp;
}
void setup()
{
pinMode(led_pin, OUTPUT);
// С помощью INPUT_PULLUP в функции pinMode можно
// использовать подтягивающий резистор
// при открытии пина на вход, что позволит
// избежать дребезга
pinMode(plus_button_pin, INPUT_PULLUP);
pinMode(minus_button_pin, INPUT_PULLUP);
}
void loop()
{
analogWrite(led_pin, brightness);
// Реакция на нажатие с помощью написанной функции
plusUp = handleClick(plus_button_pin, plusUp, +35);
minusUp = handleClick(minus_button_pin, minusUp, -35);
}
Контроллер КПМИС позволяет воспользоваться уже встроенными в плату кнопками. Всего на плате имеется шесть кнопок. Далее, в программе идёт обращение к первой встроенной кнопке, подключенной к 35 пину.
Схема подключения:
К данной рабочей программе используется следующая схема под- ключения (Рисунок 9.4). Для реализации проекта потребуются следую- щие компоненты: макетная плата, резистор на 220 Ом (1 шт), светодиод (1 шт) и провода.
Рисунок 9.4. Схема подключения
После сборки схема имеет следующий вид (Рисунок 9.5):
Рисунок 9.5. Внешний вид схемы после сборки
Рабочая программа:
#define plus_button_pin 30
#define minus_button_pin 31
#define led_pin 12
int brightness = 100;
// Использование булевой переменной для хранения
// значения с кнопки
boolean plusUp = true;
boolean minusUp = true;
// Функция имеет 3 параметра: номер пина с кнопкой (buttonPin),
// состояние до проверки (wasUp) и градацию яркости (delta).
// Функция возвращает обратно новое, текущее состояние кнопки.
// Функция будет постоянно вызываться и при изменении состояния
// кнопки будет меняться яркость.
boolean handleClick(int buttonPin, boolean wasUp, int delta)
{
boolean isUp = digitalRead(buttonPin);
if (wasUp && !isUp)
{
delay(10);
isUp = digitalRead(buttonPin);
// При нажатии, меняется яркость от 0 до 255 if (!isUp)
brightness = constrain(brightness + delta, 0, 255);
}
// Возвращение значения обратно, в вызывающий код return isUp;
}
void setup()
{
pinMode(led_pin, OUTPUT);
// С помощью INPUT_PULLUP в функции pinMode можно
// использовать подтягивающий резистор при
// открытии пина на вход, что позволит
// избежать дребезга
pinMode(plus_button_pin, INPUT_PULLUP);
pinMode(minus_button_pin, INPUT_PULLUP);
}
void loop()
{
analogWrite(led_pin, brightness);
// Реакция на нажатие с помощью написанной функции
plusUp = handleClick(plus_button_pin, plusUp, +35);
minusUp = handleClick(minus_button_pin, minusUp, -35);
}
Список контрольных вопросов:
- Что такое дребезг?
- Как работает программное устранение дребезга?
- Как работает аппаратное устранение дребезга?
- Какие преимущества и недостатки имеют различные типы устранения?
- В каких задачах нельзя использовать программное устранение?
Center-nav