Управление портами ввода микроконтроллера с помощью тактовых кнопок 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Управление портами ввода микроконтроллера с помощью тактовых кнопок



Цель работы

Произвести программирование лабораторного стенда АРД-1, научиться управлять портами ввода микроконтроллера.

 

Ход работы

В данной работе рассматривается подключение кнопки к контроллеру Arduino. При нажатии кнопки будет зажигаться встроенный светодиод.

В случае, когда тактовая кнопка не нажата (т.е. замкнута по умолчанию), выход 5 будет подключен только к земле через подтягивающий резистор. На входе будет считываться HIGH.

В случае, когда кнопка нажата, появляется контакт между входом 5 и напряжением питания (5 В). Будет считываться LOW.

Если вход оставить неподключенным, то на входе будет считываться HIGH или LOW случайным образом. Именно поэтому мы используем подтягивающий резистор, чтобы задать определенное значение при не нажатой кнопке.

Рис. 70 - Схема подключения кнопки к Arduino.

 

Рис. 71 — Схема кнопочного переключателя

 

 

Код программы управления светодиодами с помощью кнопок представлен на рисунке 68:

Рис.72 -  Код программы управления светодиодами с помощью кнопок

Задания к лабораторной работе:

Вариант № Задание
1 Создайте программу заставляющую, светиться светодиод 1 при нажатии кнопки 1, и светиться светодиод 2 при нажатии кнопки 2. При отпускании кнопок светодиоды должны гаснуть. Горение обоих светодиодов при нажатии двух кнопок одновременно не обязательно.  
2 Создайте программу, заставляющую светиться светодиод 1 при однократном нажатии кнопки 1, и гаснуть светодиод 1 при повторном нажатие кнопки 1. Под однократным нажатием подразумевается плавное нажатие на кнопку длительностью не более 1 сек.   
3 Создайте программу реализующую эффект «бегущий огонь» (последовательное зажигание светодиодов 1-5) при зажатии кнопки 2. При отпускании кнопки 2, светодиоды должны гаснуть.
4 Создайте программу, зажигающую светодиод 1 при нажатии кнопки 1, светодиод 2 при нажатии кнопки 2, светодиод 3 при нажатии двух кнопок одновременно. При отпускании кнопки светодиоды должны гаснуть.  
5 Создайте программу, заставляющую светиться светодиод 1 при однократном нажатии кнопки 1, при повторном нажатии кнопки 1 светиться светодиод 1 и 2, при еще одном ее нажатии светодиод 1 и 2 и 3. Под однократным нажатием подразумевается плавное нажатие на кнопку длительностью не более 1 сек. При отпускании кнопки светодиоды не должны гаснуть

 


УПРАВЛЕНИЕ СЕМИСЕГМЕНТНЫМ ИНДИКАТОРОМ

 

Цель работы

Произвести программирование лабораторного стенда АРД-1, научиться управлять семисегментным индикатором и сдвиговыми регистрами с помощью микроконтроллера ATmega328.

 

 

Теоретическая справка

Лабораторный стенд АРД-1 включает в себя семисегментный индикатор BS-C552RD, внешний вид которого представлен на рисунке 69.

Рис. 73 – Схема выводов семисегментного индикатора

 

Данный индикатор представляет из себя 8 миниатюрных светодиодов, имеющих общий катод. Как работать со светодиодами рассмотрено в данном методическом пособии в предыдущих работах.

В данной работе будут рассмотрены сдвиговые регистры (2 шт.). Они используются в том случае, когда необходимо больше выходов (pin), чем представлено в контроллере Arduino. В данном примере используется 74HC595.

74HC595 – восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе.

Другими словами, этот регистр позволяет контролировать 8 выходов, используя всего несколько выходов на самом контроллере. При этом несколько таких регистров можно объединять последовательно для каскадирования. Другие подходящие регистры можно поискать по комбинации "595" и "596" в серийном номере. Так, например, STP16C596 может управлять 16 светодиодами одновременно без использования дополнительных резисторов.

В данной схеме используется принцип синхронизированной последовательной передачи сигналов. Необходимые значения сигнала (биты HIGH или LOW) передаются в регистр один за другим, при этом регистр получает синхронизирующий сигнал, который заставляет его считать сигнал с входа. Когда байт (1 байт = 8 бит) считан, значения всех 8 бит распределены по выходам. Другими словами, передача сигналов в регистр происходит последовательно, а на выходе получаются 8 параллельных сигналов.

74HC595 отдает сигналы не только параллельно, но и последовательно. Это необходимо при объединении нескольких регистров, для получения 16 и более выходов. В этом случае первые 8 бит сигнала передаются на следующий регистр для параллельного вывода на нем.

Три возможных состояния на выходе, упомянутые выше, означают, что выход регистра может иметь не только логический нуль или единицу (HIGH или LOW), но и быть в высокоомном (высокоимпедансном) состоянии – когда выход отключен от схемы.

Рис. 74 – Обозначение портов сдвигового регистра 74HC595, где Q0…Q7 – управляемые выходы,

GND – земля, Q7′ – выход предназначенный для последовательного соединения регистров, MR – сброс регистра, SH_CP – вход для тактовых импульсов, ST_CP – вход «защёлкивающий» данные, OE – вход переводящий выходы из HI-Z в рабочее состояние, DS – вход данных, VCC – питание 5 вольт.

Ход работы

Необходимо найти семисегментный индикатор, макетную плату и Arduino Uno в библиотеке компонентов:

Рис.75 - Выбор компонента 7-сегментного экрана

 

 

Рис.76 - Выбор компонента малая макетная плата

Рис.77 - Выбор компонента Ардино UNO R3

 

Далее необходимо собрать схему подключения семисегментного индикатора:

 

 

Рис. 78 - Схема с семисегментным индикатором

 Первым этапом следует обозначить порты подключаемые к каждому сегменту индикатора:

int segA=6;

int segB=7;

int segC=8;

int segD=9;

int segE=10;

int segF=11;

int segG=12;

int point=5;

Далее задаем их в функции setup, как выходы «OUTPUT»:

void setup(){

 pinMode(point,OUTPUT);

 pinMode(segA,OUTPUT);

 pinMode(segB,OUTPUT);

 pinMode(segC,OUTPUT);

 pinMode(segD,OUTPUT);

 pinMode(segE,OUTPUT);

 pinMode(segF,OUTPUT);

 pinMode(segG,OUTPUT);

}

В основном блоке программы loop{} указываем какой сегмент должен загореться, а какой погасить с помощью функции digitalWrite (имя_сегмента, LOW или HIGH).

На рисунке 79 представлен листинг программы выводящей цифру  0 на семисегментном индикаторе.

Рис.79 – Листинг программы выводящий цифры 1 и 0


Задания к лабораторной работе:

Вариант № Задание
1 Создайте программу, последовательно выводящую на 2-х индикаторах числа от 0 до 9.
2 Создайте программу, выводящую на индикатор 1 если нажата кнопка 1, 2 если нажата кнопка 2, 0 если ни одна кнопка не нажата.
3 Создайте программу, выводящую на индикатор число нажатий кнопки 1, если число нажатий более 99, то начать сначала.
4 Создайте программу, выводящую на индикатор количество нажатых на стенде кнопок.
5 Создайте программу, последовательно выводящую на индикатор степени числа 2, если число невозможно отобразить на индикаторе, то начать заново с наименьшей степени.
6 Создайте программу, выводящее число N, где N –сумма количества нажатий первой кнопки, а функция второй кнопки обнуление числа N.
7 Создайте программу-таймер обратного отсчета от 99 до 0, функция первой кнопки – запуск и пауза и продолжение счета. Функция второй кнопки единовременное прерывание счета и выставление значение на 99.
8 Создайте программу, выводящую на индикаторы количество секунд между нажатиями кнопки.
9 Создайте программу, выводящую на индикатор номер нажатой кнопки. Если обе кнопки зажаты единовременно более двух секунд индикатор выведет «0»
10 Создайте программу, исполняющую роль таймера. С помощью нажатий первой кнопки выставляются секунды, с помощью второй кнопки запускается и прерывается таймер.

 



Поделиться:


Последнее изменение этой страницы: 2021-05-27; просмотров: 505; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.81.240 (0.018 с.)