Ранее мы уже научились , однако гораздо интересней управлять этим процессов с помощью кнопок, а светодиодная гирлянда послужит хорошим наглядным примером.
Подключение кнопки к микроконтроллеру
Схема гирлянды приведена ниже.
Когда кнопка (ключ) подключается к микроконтроллеру, то соответствующий вывод МК должен быть настроен на вход. При этом микроконтроллер будет постоянно считывать состояние, а точнее уровень потенциала на данном выводе. Поэтому алгоритм программы можно построить таким образом, что если на определенном выводе МК произойдет смена потенциала с высокого на низкий или наоборот, то выполнится определенное действие, например засветится светодиод.
Чтобы настроить определенные выводы (пин) МК на вход, следует в соответствующие биты регистра DDR записать нули. Кстати, если пины МК не задействованы, то их рекомендуется также настроить на вход. Поскольку к порту B мы будем подключать только кнопки, то в регистр DDRB мы запишем все нули следующий командой:
DDRB = 0b00000000;
Когда вывод микроконтроллера настроен на вход, то изначально он может находиться в двух состояниях, которые устанавливаются с помощью регистра PORT.
Если в бит регистра PORT записан ноль, то пин имеет высокое входное сопротивление.
При установке бита в единицу к ножке МК подключается подтягивающий резистор. Резистор называется так потому, что посредством его “подтягивается” высокий потенциал (+ 5 В) к соответствующей точке электрической цепи; в данном случае – к пину микроконтроллера.
Проверка состояния вывода МК с помощью PINx
Чтобы в любой момент времени знать, какой потенциал присутствует на выводе, следует проверить (считать) соответствующий бит в регистре PIN.
Данный регистр по аналогии можно сравнить с датчиком. С него можно только считывать информацию. Записать в него ничего нельзя. PIN является противоположность регистра PORT, в который выполняется только запись, но не считывание данных.
Боле предпочтительным является установка регистра PORT в единицу, т.е. применение внутреннего подтягивающего резистора МК. Такой вариант имеет значительную помехоустойчивость, поскольку для изменения высокого потенциала на низкий, вывод необходимо напрямую соединить с землей или общим проводом.
Если же пин сделать с высоким входным сопротивлением, то любая более-менее мощная электромагнитная помеха, может навести на нем некоторый потенциал, превышающий определенное значение и микроконтроллер воспримет помеху, как смена низкого потенциала на высокий. Поэтому в нашей программе мы будем использовать внутренний подтягивающий резистор.
Один контакт ключа соединим с землей (общим проводом), а второй – с выводом микроконтроллера. Когда ключ разомкнут, — вывод находится под высоким потенциалом (+ 5 В), подтянутый внутренним резистором МК. При этом соответствующий бит регистра PIN будет установлен в единицу.
При нажатии на кнопку данный вывод соединится с общим проводом (“минусом”) и на нем возникнет низкий потенциал. А бит регистра PIN автоматически установится в ноль.
Обратите внимание, что подтягивающий резистор еще защищает цепь от короткого замыкания при нажатой кнопке.
Светодиодная гирлянда в коде
Теперь давайте напишем целиком код программы, а затем рассмотрим его отдельные элементы. Алгоритм работы программы следующий: при замыкании первого ключа “лампочки” будут включаться в одной последовательности, а при замыкании второго – “лампочки” будут загораться иначе. Если обе кнопки на нажаты, то все светодиоды должны быть выключены.
#define F_CPU 1000000UL // Объявляем частоту работы микроконтроллера 1 МГц
#include
#include
#define Z 300 // Значению задержки присваиваем имя Z
#define VD PORTD // Присваиваем порту D имя VD
#define K PORTB // Присваиваем порту B, к которому подключены кнопки, имя K
int main(void)
DDRB = 0b00000000; // Настраиваем порт B на вход
DDRD = 0b11111111; // Настраиваем порт D на выход
VD = 0b00000000; // Выключаем все огни
K = 0b11111111; // Включаем подтягивающие резисторы
while (1)
if (PINB == 0b11111110) // Проверяем, нажата ли 1-я кнопка
VD = 0b11111111; // Если ключ замкнут, то мигаем «лампочками»
_delay_ms (Z);
VD = 0b00000000;
_delay_ms (Z);
else
VD = 0b00000000; // Если ключ разомкнут, то все LED выключены
if (PINB == 0b11111101) // Проверяем, нажата ли 2-я кнопка
VD = 0b00000001; // Если кнопка нажата, то поочередно включаем LED
_ delay _ ms (Z); // с задержкой 0,3 с
VD = 0b00000011;
_delay_ms (Z);
VD = 0b00000111;
_delay_ms (Z);
VD = 0b00001111;
_delay_ms (Z);
LED = 0b00011111;
_delay_ms (Z);
VD = 0b00111111;
_delay_ms (Z);
VD = 0b01111111;
_ delay_ms (Z);
VD = 0b11111111;
_delay_ms (Z);
VD = 0b00000000;
_ delay _ ms (Z);
else
VD = 0b00000000; // Если ключ не замкнут, то все LED выключены
Операторы if и else
Назначение препроцессоров и ним хорошо известны из предыдущих статей. Здесь новым для нас есть оператор if . If переводится с английского «если». Если условие, указанное в круглых скобках, выполнятся, т.е. истинное, то выполняется код программы в фигурных скобках. Например, если переменная a больше 1 единицы, то переменной c присвоится значение a + b.
if (a >1)
c = a + b;
В противном случае, когда значение a меньше или рвано единице, код программы в фигурных скобках не будет выполняться.
Если в фигурных скобках выполняется только одна команда, то синтаксис языка Си позволяет упростить запись и обойтись без фигурных скобок:
if (a >1) c = a + b;
Также оператор if работает в связке с оператором else .
if (a >1) → если a >1, то = a + b
c = a + b;
else → в противном случае, c = a — b
c = a — b;
Работает это так. Если a > 1, то c = a + b. В противном случае, т.е. когда а меньше или равно единице, то c = a – b.
Пояснение кода программы
Теперь возвращаемся к нашей программе. Если кнопка, соединенная с PB0 нажата, то на выводе появляется низкий потенциал и соответствующий бит регистра PINB устанавливается в ноль. При этом будет выполняться условие в фигурных скобках, т.е. начнет мигать гирлянда.
Обратите внимание, что команда присвоения состоит из одного знака равно «=», а команда проверки условия «равно» состоит из двух знаков равно, написанных без пробела «==».
Когда кнопка не нажата, в бите регистра PINB появится единица, вызванная высоким потенциалом подтягивающего резистора. В этом случае управление перейдет к оператору else и все LED будут выключены.
При замыкании второго ключа, вывод которого соединен с портом PB1, выполнится второй код программы, и светодиоды начнут поочередно включаться с задержкой времени 0,3 секунды.
Таким образом, гирлянда на микроконтроллере может содержать разное количество LED и ключей. Причем для каждого замыкания или размыкания контактов ключа можно прописать свой алгоритм работы гирлянды.
Также ею можно управлять с помощью всего одной кнопки. Такой вариант имеет несколько сложнее код, и его мы рассмотрим в отдельной статье. Там же мы рассмотрим, как подключать мощные LED к МК.
Ранее в статье вы подробно рассмотрели настройку на выход, а здесь – на вход. Теперь объединим все вместе и приведем простой наглядный алгоритм.
Способов разукрасить новогоднюю елку много, вот один из них.
На рисунке 1 изображена схема новогодней гирлянды. Она содержит четыре канала, к которым подключаются последовательно соединённые светодиоды, изображенные на рисунке 2.
Ядром схемы является микроконтроллер PIC16F628A. Микроконтроллер работает по алгоритму, изображенному на рисунке 3. Код программы написан на языке ассемблер, смотреть листинг Garland\16F628ATEMP.ASM.
Полный цикл внутрисхемного программирования и отладки микроконтроллера PIC16F628A был осуществлён при помощи (интегрированная среде разработки), компилятор MPASM v5.22 (входит в MPLAB IDE v8.15) и MPLAB ICD 2 (внутрисхемный отладчик - «Дебагер»). Для тех, кто не располагает средствами приведёнными выше, а имеет свою программу для работы с HEX файлами и иной программатор, можно в соответствующем проекте найти файл 16F628ATEMP.HEX. Техническую спецификацию микроконтроллера можно найти на сайте и .
Микроконтроллер DD1 имеет функциональные выходы RB4 – RB7, к которым подключаются усиливающие полевые MOSFET транзисторы VT1 – VT4. Техническую спецификацию транзисторов можно найти на сайте . Стоки транзисторов подключены к нажимным клеммникам X2 – X5. Напряжение питание нагрузки задаётся источником питания схемы, который подключают к разъёму X1. Максимальный коммутируемый ток на канал составляет 0.5 А. Микроконтроллер DD1 не имеет функции принудительного сброса, вывод для сброса подключен через резистор R1 к положительному потенциалу питания. Для генерации тактовой частоты в микроконтроллере используется встроенный генератор тактовой частоты на кристалле. Прибор может эксплуатироваться в диапазоне температур от – 40 °С до +85 °С.
Прибор запитывается от переменного или постоянного источника напряжения, подключаемого к разъему X1. Номинальное напряжение источника питания 12 В. Номинальный ток источника питания зависит от нагрузки и составляет 0.5 – 2 А. Для стабилизации питания используется обычная схема из диодного моста VD1, линейного стабилизатора DA1, фильтрующих конденсаторов C1 – C4.
В микроконтроллер запрограммированы 3 световых эффекта в основе лежит эффект «бегущие огни».
1) Гирлянды поочерёдно загораются и гаснут в одну и так же повторяют в другую сторону.
2) Гирлянды поочерёдно загораются и когда все четыре гирлянды горят, начинают поочерёдно гаснуть в том же направлении, так же повторяется и в обратном порядке.
3) 1 и 2, 3 и 4 гирлянды поочерёдно перемигиваются между собой. Микроконтроллер запрограммирован таким образом, что выполняет заранее установленное число повторов светового эффекта. Стоить отметить, что интервал времени между загораниями гирлянд меняется (нарастает, достигая пика, а затем падает), то есть виден эффект «временной раскачки». Для лучшей демонстрации световых эффектов гирлянды (так как они пронумерованы на схеме) следует располагать по порядку в одной плоскости. В данном случае украшение ели от корней до верхушки (по вертикали, разбив ель на четыре сектора для гирлянд), от 1 до 4 гирлянды, соответственно.
Питание гирлянд связано с источником питания подключаемым к разъёму X1, следовательно нужно рассчитывать последовательно соединённые светоизлучающие элементы (светодиоды, лампы накаливания). Общее напряжение питания находится из суммы напряжений последовательно соединённых светоизлучающих элементов. Так например, последовательно соединённых ярких светодиодов рассчитанных на напряжение 2 – 2,5 В будет 6 штук в одной гирлянде. Так как светодиоды потребляют 20 мА, не исключено параллельного подключения последовательно соединённых светодиодов в ряды.
Монтаж деталей односторонний. Размер отверстий от 0.7 мм до 3 мм. Файлы для изготовления печатной платы смотреть в папке .
Печатная плата изображена на рисунке 4. Расположение деталей смотреть на рисунке 5.
В данном устройстве можно заменить следующие детали. Микроконтроллер DD1 из серии PIC16F628A-I/P-xxx с рабочей тактовой частотой 20 МГц в корпусе DIP18. Стабилизатор напряжения DA1 отечественный КР142ЕН5А (5 В, 1.5 А). Полевые MOSFET транзисторы и VT1 – VT4 (N-канал) в корпусе I-Pak (TO-251AA), подойдут аналоги номиналов указанных на схеме. Диодный мост VD1 на рабочее напряжение не меньше 25 В и ток не меньше 2 А. Разъём питания X1 аналогичный указанному на схеме с центральным контактом d=2.1 мм. Неполярные конденсаторы С1 и С2 номиналом 0.01 – 0.47 µF x 50 V. Электролитические конденсаторы С3 и С4 ёмкостной номинал тот же, а напряжение не ниже указанного на схеме. Разноцветные светодиоды VD1 – VD6 на напряжение 2 - 2.5 В.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
DD1 | МК PIC 8-бит | PIC16F628A | 1 | В блокнот | ||
DA1 | Линейный регулятор | L7805AB | 1 | КР142ЕН5А | В блокнот | |
VT1-VT4 | MOSFET-транзистор | IRLU024N | 4 | В блокнот | ||
VD1 | Диодный мост | 2W10M | 1 | В блокнот | ||
С1 | Конденсатор | 0.1 мкФ | 1 | В блокнот | ||
C2 | Конденсатор | 0.1 мкФ | 1 | В блокнот | ||
С3 | 100мкФ 10В | 1 | В блокнот | |||
C4 | Электролитический конденсатор | 220мкФ 25В | 1 |
Среди множества световых приборов, используемых для оформления новогодних елок, особое место занимает схема китайской гирлянды. Она, как и все аналогичные китайские изделия, отличается простотой и дешевизной. Возникает много споров о надежности подобных гирлянд, однако, большинство потребителей использует именно их.
Схема классической китайской гирлянды
Данная конструкция оснащена плавным управлением яркостью. Для этого используется фазовое управление, регулирующее угол открывания тиристоров. Автоматика использует целых восемь программ, обеспечивающих большое разнообразие алгоритмов управления. Благодаря своим качествам, прибор очень дешев, поэтому и расходится миллионными тиражами.
В основе контроллера лежит плата небольшого размера, где предусмотрено место . Здесь же располагается и микроконтроллер с четырьмя выходами. Он представляет собой небольшой кусочек генитакса, где с помощью эпоксидной смолы крепится микрочип. Через выходы микроконтроллера, с помощью токоограничительных резисторов, осуществляется управление четырьмя тиристорами. Данное устройство рассчитано на анодное напряжение до 600 вольт и ток в пределах 0,6-0,8 ампер. В отдельных конструкциях дешевых гирлянд, вместо входного диодного мостика остается один диод. В то же время, подключение электродов, управляющих тиристорами, осуществляется напрямую к выходам микроконтроллера, без , ограничивающих ток.
Как правило, мощность микроконтроллера очень маленькая, поэтому, он не в состоянии контролировать работу мощных симисторов. Для того, чтобы решить эту проблему, необходимо использовать отдельный маломощный источник питания, имеющий гальваническую развязку от общей сети. В этих целях можно использовать адаптер малой мощности, например, такой, который питает усилитель телевизионной антенны, содержащий в своей схеме стабилизатор.
Другие пути решения проблем
Чтобы совместить маломощный микроконтроллер с мощными симисторами, практикуется применение транзисторных ключей, где используются транзисторы с высоким коэффициентом усиления тока. Таким образом, схема китайской гирлянды не перегружает выходы микроконтроллера. Чтобы обеспечить гальваническую развязку, применяются специальные микросхемы, на входе которых содержится светодиод, а на выходе установлен маломощный симистор.
Для того, чтобы китайская гирлянда нормально работала, ее нужно синхронизировать с сетью с помощью сигнала. С этой целью, на вход микроконтроллера подается фаза, номиналом 220 вольт через установленный резистор. Нейтральный провод сети, соединяется с общим проводом всего устройства.
Замена блока управления Китайской гирлянды
Попросили меня как-то собрать несложную и недорогую гирлянду на микроконтроллере. Под руку попался самый дешёвый восьми битный AVR микроконтроллер Attiny13. В данной статье я хочу пошагово описать процесс сборки данного устройства.
Из деталей нам понадобится:
Микроконтроллер Attiny13 - 1шт.
Панелька DIP-8 - 1шт.
Резистор 4.7кОм - 1шт.
Резистор 100 Ом - 5шт.
Штырьки PLS - 2шт.
Светодиоды (любые) - 5шт.
Гнездо BLS-2 - 1шт.
Отсек для батареек - 1шт.
Сборку устройства я разделил на несколько этапов:
Этап 1. Изготовление платы
Этап 2. Запаивание радио деталей на плату
Этап 3. Изготовление программатор для прошивки микроконтроллера
Этап 4. Прошивка микроконтроллера
Этап 1. Изготовление платы
Внимание! Крайне не обязательно изготавливать плату, можно воспользоваться макетной платой. Но всё же лучше и красивее изготовить плату для устройства.
И так, для начала нам понадобится следующее:
Кусочек текстолита (размером 45 на 30мм)
Небольшая ёмкость
Вода
Перманентный маркер
Немного технического спирта или одеколона
Ластик
Поверхность текстолита покрыта медной фольгой, а фольга, как и любой другой металл имеет свойство окислятся на воздухе. Поэтому возьмём ластик и протрем медную часть текстолита.
Нарисовали? Отлично. Теперь надо вытравить плату используя хлорное железо.
Во время травления, хлорное железо выедает (не закрашенную маркером) часть медного покрытия текстолита.
И так, поскольку хлорное железо это порошок нам его надо развести в воде.
Вот пропорция: 100гр. хлорного железа на 700мл воды. Но нам так много не надо, поэтому берём 10гр. на 100 мл. воды. Далее в этот раствор опускаем нашу плату.
И ждём примерно часа два (пока раствор хлорного железа не выест не закрашенную часть медного покрытия текстолита).
После того, как плата вытравилась, достаём её из емкости и промываем под проточной водой.
Вот фотография вытравленной платы.
Теперь стираем с платы маркер (для этого отлично подходит технический спирт или одеколон).
Поскольку у меня нет электродрели я использую свой школьный циркуль
После того, как все отверстия в плате сделаны надо зачистить её тонкой наждачной бумагой.
Теперь включаем паяльник и залудим плату. Внизу фотография залуженной платы
Оставшийся на плате канифоль можно стереть техническим спиртом или жидкостью для снятия лака.
Плата готова! Этап 1 завершен!
Этап 2. Запаивание радио деталей на плату
После того как сделали плату (а может кто-то не делал её, а решил использовать макетную плату) необходимо запаять на неё радио детали.
Схема светодиодной гирлянды на микроконтроллере Attiny13:
Запаиваем радио детали на плату (по схеме выше) и получаем следующее устройство:
Всё устройство почти готово, дело остаётся за малым это прошить микроконтроллер.
Этап 2 завершён!
Этап 3. Изготовление программатор для прошивки микроконтроллера
Внимание! Если у вас уже есть программатор для AVR микроконтроллеров вы можете пропустить этот этап и прошить микроконтроллер самостоятельно! Скачать прошивку вы можете по ссылке внизу страницы.
Собирать программатор мы будем на LPT порт компьютера. Вот схема программатора:
На рисунке в прямоугольнике (где LPT порт) номер контакта, куда подсоединять проводок. Провода старайтесь делать покороче (не более 20 см). Если провода будут длиннее 20 см то во время прошивки или чтения микроконтроллера будут ошибки, которые могут стоить микроконтроллеру жизни!
Будьте очень аккуратны,
LPT порт очень легко спалить!
Для изготовления программатора нам понадобится:
25-контактный разъем для LPT порта (папа)
Резисторы 150 Ом 4 шт.
Резистор 10 кОм 1 шт.
Батарея на 3 вольта
Вот мой вариант программатора:
Теперь можно приступить к прошивке микроконтроллера.
Этап 4. Прошивка микроконтроллера
Внимание! В этом этапе описывается прошивка микроконтроллера Attiny13 с помощью программы и программатора на LPT порт.
Всем известно, что без прошивки, микроконтроллер - это ничего не делающая микросхема, а чтобы она управляла нашей гирляндой нам её надо прошить.
Для прошивки мы будем использовать ранее изготовленный нами LPT программатор, компьютер и программу PonyProg2000.
Для начала скачайте прошивку для гирлянды (ссылка внизу страницы), потом из интернета скачайте программу PonyProg2000 и установите её.
Теперь всё почти готово для прошивки микроконтроллера. Остаётся лишь подключить микроконтроллер к программатору а программатор подключить к компьютеру.
После того как всё подключили запускаем программу PonyProg2000.
Выскачет такое окно:
В окне нажимаем кнопку "Yes".
После калибровки появится вот такое сообщение:
Все, программа откалибрована!
Теперь заходим в настройки (Setup > Interface Setup…). Появится вот такое окно:
После в главном окне программы выбираем "AVR micro", "Attiny13"
Теперь осталось открыть прошивку, для этого в меню "File" выбираем "Open Device File…". В списке "Тип файлов:" выбираем "*.hex" и указываем путь к прошивке нашей светодиодной гирлянды, нажимаем кнопку "Открыть".
В главном окне нажмите на кнопку "Write device":
После появление такого сообщения:
Микроконтроллер прошит и работоспособен! Но подождите нам ещё необходимо установить фьюз биты. Кстати, фьюз биты это раздел (4 байта) в AVR микроконтроллерах в котором хранится конфигурация работы микроконтроллера.
Для установки фьюз битов в меню "Command" выберите "Security and Configuration Bits…", в появившимся окне нажмите кнопку "Read" и установите галочки как на картинке ниже:
После установки галочек (как на картинке выше) нажмите кнопку "Write". Всё готово!
Теперь выключите компьютер и извлеките микроконтроллер из программатора, вставьте микроконтроллер в панельку на плате гирлянды. Если всё сделано правильно, то при подаче питание (3 вольта) гирлянда должна заработать!
В заключении хотелось бы сказать, что программу я писал в среде (исходник прилагается), программе 9 подпрограмм эффектов, так что ничего не мешает создавать вам свои эффекты.
По умолчанию устройство имеет 4 разных эффекта:
1. Бегущая точка
2. Бегущая линия
3. Переключение светодиодов
4. Моргание
Скачать прошивку, исходники, проект в Proteus вы можете ниже
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот | |
---|---|---|---|---|---|---|---|
Гирлянда | |||||||
U1 | МК AVR 8-бит | ATtiny13 | 1 | В блокнот | |||
R1-R5 | Резистор | 300 Ом | 5 | В блокнот | |||
R6 | Резистор | 4.7 кОм | 1 | В блокнот | |||
D1-D5 | Светодиод | 5 | В блокнот | ||||
Панель | 1 | DIP-8 | В блокнот | ||||
Резистор |
Гирлянда на ATtiny2313 собирается очень просто. В этой простой статье мы с вами будет делать мини-гирлянду из 4 светодиодов.
Нажата ли ты, наша кнопочка, или отжата?”, – именно таким вопросом мы задавались в прошлой статье. И в зависимости от состояния кнопки мы делали эффект из 4 светодиодов. В этой статье мы с вами разберем похожую ситуацию. Итак, погнали!
Помните китайскую гирлянду за 100 руб?
Нажимаем кнопочку и эффект моргания становится абсолютно другой;-) Именно этим мы с вами и займемся в этой статье;-)
Мы не будем делать китайску гирлянду с N-ным количеством лампочек, а сделаем упрощенную схему такой гирлянды на МК AVR Tiny2313 и четырех светодиодах. С помощью кнопки мы будем менять эффект моргания.
Итак, наша задача буквально звучит так:
Создать гирлянду на МК AVR Tiny2313 из четырех светодиодов и одной кнопки с самовозвратом (кнопка, которую нажал и сама отжимается). Нажимаем один раз кнопку – появляется первый эффект моргания кнопки, нажал второй раз кнопку – появился второй эффект моргания и тд. Всего у нас будет семь эффектов. Условие такое, что пока светодиоды переливаются морганием, у нас МК не реагирует на кнопку. То есть пока не прошел эффект, нажатие на кнопку никак не отображается на эффекте. Эффект НЕ прерывается. Когда эффект закончится, только тогда МК будет обрабатывать нажатие на кнопку.
Задача вроде бы ясна. Для начала составим простенькую схемку в Proteus. Схемка будет выглядеть примерно как-то так (кликните для увеличения, откроется в новом окне):
Все? Нет не все! Теперь шьем наш МК HEX-файлом. А где его взять? Из Atmel Studio 6. Но чтобы его создать, нам потребуется для начала написать программу, по которой будет работать наш МК. Как все это сделать, смотрим в этой статье.
Ниже приведен текст с комментариями:
Обратите внимание также на строчку кода:
{_delay_ms(50); //включаем задержку 50 миллисекунд для антидребезга
Программа Proteus спокойно бы работала и без этой строчки кода. Зачем мы тогда ее вставили? Дело все в том, что реальное положение дел чуточку хуже. Козлом отпущения в данном случае будет самая безобидная кнопка, которую мы поставим в схему на переключение гирлянд, собрав ее на макетной плате.
Что делает кнопка в схеме согласно схемотехнике МК? Подает логический ноль или единицу на ножку МК. Так? Так. Но в реальной схеме она не сразу замыкает и размыкает цепь. При замыкании или размыкании кнопки у нас нет четкого переключения уровней сигнала с логической единицы на ноль и наоборот. Переключение с помощи кнопки выглядит примерно вот так:
С логической единицы в ноль примерно вот так:
С нуля на единицу как-то вот так:
Вся эта билиберда при переключении кнопки носит название дребезг контактов и мешает разработчикам логических устройств. Дело в том, что эти хаотические импульсы МК может посчитать как за логическую единичку, так и за нолик. В настоящее время это недоразумение с помощью нехитрой строчки кода устранено.
Прикрепляю к проекту СИшник, HEX и файл Протеуса.