Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Выходные элементы управленияСтр 1 из 4Следующая ⇒
Если какая-то линия порта ввода-вывода в схеме не используется, она должна быть определена как выход (соответствующий бит регистра направления должен соответствовать выходу), и ее выходное значение должно быть равно 0. Большинство линий ввода-вывода могут быть сконфигурированы для выполнения альтернативных функций, обозначенных в назначении выводов микроконтроллера. Для всех линий портов ввода-вывода, как правило, доступна программная конфигурация входных подтягивающих резисторов. Подтягивающие резисторы осуществляют доопределение потенциалов «брошенных» входов напряжением высокого (Pull-up) или низкого (Pull-down) уровня. Для обращения к отдельным линиям порта используется маскирование битов. Входные элементы управления В качестве входных элементов управления могут использоваться · другие элементы схемы; · тумблеры; · джамперы; · множественные переключатели; · кнопки. Тумблеры предназначены для коммутации цепей управления. Обрабатываемый сигнал с тумблера – потенциальный. Различают 1-позиционные и 2-позиционные тумблеры: 1-позиционные Выходные элементы управления В качестве выходных элементов управления могут использоваться · другие элементы схемы; · элементы индикации (единичные светодиоды или светодиодные сборки, в частности, - 7-сегментные индикаторы). Единичные светодиоды
3) Кнопка: подключение и алгоритм борьбы с дребезгом.
Подключение кнопки к микроконтроллеру Если мы подключим один из контактов, например, к общему проводу («земле»), а второй к выбранному выводу микроконтроллера, переключенного в режим входа, то выяснится, что такой метод не работает. При нажатии кнопки вывод микроконтроллера соединяется с землей, и программа будет считывать (с помощью функции digitalRead) логический 0 с этого вывода, но при отпущенной кнопке вывод микроконтроллера не будет соединен ни с какой линией, что часто называют «висит в воздухе». В таком режиме программа будет считать с вывода и 0 и 1 совершенно случайным образом. Правильное подключение предполагает, что в разомкнутом состоянии вывод микроконтроллера должен быть соединен через резистор, например с шиной питания, а в замкнутом - с землей, либо наоборот. Сопротивление резистора не должно быть слишком маленьким, чтобы ток, текущий через него при замкнутых контактах кнопки не был слишком большим. Обычно используют значения порядка 10-100 кОм. Оба варианта подключения можно изобразить следующим образом: Первый вариант предпочтительнее, поскольку подтягивающие к +5В резисторы уже есть внутри микроконтроллера – их нужно только программно включить. Кнопка будет либо соединять вывод микроконтроллера с землей, либо разъединять, и тогда он " притянется" резистором к +5В. После того, как вывод микроконтроллера установлен в режим входа, чтобы включить на нем подтягивающий резистор нужно " записать" в него 1. Пример программы, зажигающей светодиод на 13 выводе при нажатии кнопки на 2 выводе будет выглядеть примерно так: void setup() { Обращаем внимание на то, что значение, прочитанное с 2 вывода, инвертируется с помощью оператора «! », поскольку при нажатии на кнопку будет считываться «0», а при ее отпускании «1».
Дребезг контактов На практике зачастую приходится бороться с таким явлением, как дребезг контактов, которое заключается в том, что при соприкосновении или расхождении контактов в механических переключающих устройствах, таких, как реле или кнопка, происходит многократное замыкание и размыкание. Схематично это может быть представлено следующим образом: Чтобы микроконтроллер не обработал такую пачку переключений как множественное нажатие и отпускание кнопки нужно либо применить специальную схему, либо побороть дребезг программно. Идея программной борьбы проста – после того, как произошло переключение (от момента нажатия или отпускания кнопки), в течение некоторого защитного интервала времени игнорировать любые другие переключения. Существует специальная библиотека Bounce, упрощающая борьбу с дребезгом контактов, и имеющая дополнительные возможности: http: //www.arduino.cc/playground/Code/Bounce http: //www.arduino.cc/playground/uploads/Code/Bounce.zip Как и в большинстве случаев, установка библиотеки сводится к распаковке архива в подпапку \hardware\libraries\ папки с ПО Arduino. Полная документация на библиотеку может быть найдена на сайте разработчика, а здесь рассмотрим только наиболее важное. Метод Bounce:: update Вызов: имя_объекта.update() Возвращает значение типа int – истину, если состояние вывода изменилось, ложь, если нет. Метод Bounce:: read Вызов: имя_объекта.read() Возвращает значение типа int – состояние вывода. Метод Bounce:: rebounce Вызов: имя_объекта.rebounce(время_повтора) Повторяет последнее произошедшее событие через заданное время в миллисекундах. Рассмотрим исходный код программы, посылающей в последовательный порт сообщение «pressed» при нажатии кнопки, сообщение «released» при ее отпускании, и повторяющей сообщение «pressed» каждые пол секунды при удержании кнопки.
4) Сторожевой таймер.
Сторожевой таймер (контрольный таймер, англ. Watchdog timer — букв. «сторожевой пёс») — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему). Автоматизированные системы, не использующие оператора-человека, хотя тоже подвержены ошибкам, зависаниям и другим сбоям (в том числе аппаратным), с использованием сторожевых таймеров увеличивают стабильность работы — нет необходимости ручного сброса. Поэтому наиболее частое их использование — встроенные системы различного назначения.
5) Радиальные и векторные прерывания, примеры.
Режимы обмена по магистрали - Обмен по прерываниям. При радиальном прерывании в магистрали имеются столько линий запроса прерывания сколько всего может быть разных прерываний, т.е. каждое устройство ввода/вывода имеют свою линию запроса. Процессор определяет номер прерывания по номеру линии, по которому пришел сигнал прерывания. При использовании радиальных прерываний в систему включается дополнительная система - контролер прерывания. Векторные прерывания обеспечивают системе большую гибкость, в системе их может быть очень много, однако, они требуют дополнительных аппаратных узлов во всех устройствах для обслуживания цикла безадресного чтения. Радиальных прерываний в системе немного. 6) Стек, очередь. Стек Стеком (англ. stack) называется хранилище данных, в котором можно работать только с одним элементом: тем, который был добавлен в стек последним. Стек должен поддерживать следующие операции: Push Добавить (положить) в конец стека новый элемент Pop Извлечь из стека последний элемент Back Узнать значение последнего элемента (не удаляя его) Size Узнать количество элементов в стеке Clear Очистить стек (удалить из него все элементы) Хранить элементы стека мы будем в массиве. Для начала будем считать, что максимальное количество элементов в стеке не может превосходить константы MAX_SIZE, тогда для хранения элементов массива необходимо создать массив размера MAX_SIZE. Объявим структуру данных типа stack. const int MAX_SIZE=1000;struct stack { int m_size; // Количество элементов в стеке int m_elems[MAX_SIZE]; // Массив для хранения элементов stack(); // Конструктор ~stack(); // Деструктор void push(int d); // Добавить в стек новый элемент int pop(); // Удалить из стека последний элемент // и вернуть его значение int back(); // Вернуть значение последнего элемента int size(); // Вернуть количество элементов в стеке void clear(); // Очистить стек }; Объявленная здесь структура данных stack реализует стек целых чисел. Поле структуры m_size хранит количество элементов в стеке в настоящее время, сами элементы хранятся в элементах массива m_elems с индексами 0..m_size-1. Элементы, добавленные позже, получают большие номера. Упражнение A - простой стек Реализуйте структуру данных " стек", реализовав все указанные здесь методы. Напишите программу (функцию main), содержащую описание стека и моделирующую работу стека. Функция main считывает последовательность команд и в зависимости от команды выполняет ту или иную операцию. После выполнения одной команды программа должна вывести одну строчку. Возможные команды для программы: Push n Добавить в стек число n (значение n задается после команды). Программа должна вывести ok. Pop Удалить из стека последний элемент. Программа должна вывести его значение. Back Программа должна вывести значение последнего элемента, не удаляя его из стека. Size Программа должна вывести количество элементов в стеке. Clear Программа должна очистить стек и вывести ok. Exit Программа должна вывести bye и завершить работу. Гарантируется, что набор входных команд удовлетворяет следующим требованиям: максимальное количество элементов в стеке в любой момент не превосходит 100, все команды pop_back и back корректны, то есть при их исполнении в стеке содержится хотя бы один элемент. Пример протокола работы программы Ввод Выводpush 2 ok push 3 ok push 5 ok back 5 size 3 pop 5 size 2 push 7 ok pop 7 clear ok size 0 exit bye Очередь Очередью (aнгл. queue)) называется структура данных, в которой элементы кладутся в конец, а извлекаются из начала. Таким образом, первым из очереди будет извлечен тот элемент, который будет добавлен раньше других. Элементы очереди будем также хранить в массиве. При этом из очереди удаляется первый элемент, и, чтобы не сдвигать все элементы очереди, будем в отдельном поле m_start хранить индекс элемента массива, с которого начинается очередь. При удалении элементов, очередь будет " ползти" дальше от начала массива. Чтобы при этом не происходил выход за границы массива, замкнем массив в кольцо: будем считать, что за последним элементом массива следует первый. Описание структуры очередь: const int MAX_SIZE=1000;struct queue { int m_size; // Количество элементов в очереди int m_start; // Номер элемента, с которого начинается очередь int m_elems[MAX_SIZE]; // Массив для хранения элементов queue(); // Конструктор ~queue(); // Деструктор void push(int d); // Добавить в очередь новый элемент int pop(); // Удалить из очереди первый элемент // и вернуть его значение int front(); // Вернуть значение первого элемента int size(); // Вернуть количество элементов в очереди void clear(); // Очистить очередь }; Дек Деком (англ. deque – аббревиатура от double-ended queue, двухсторонняя очередь) называется структура данных, в которую можно удалять и добавлять элементы как в начало, так и в конец. Дек хранится в памяти так же, как и очередь. Система команд дека: push_front Добавить (положить) в начало дека новый элемент push_back Добавить (положить) в конец дека новый элемент pop_front Извлечь из дека первый элемент pop_back Извлечь из дека последний элемент Front Узнать значение первого элемента (не удаляя его) Back Узнать значение последнего элемента (не удаляя его) Size Узнать количество элементов в деке Clear Очистить дек (удалить из него все элементы) Упражнение G - простой дек Аналогично заданиям A и D, но для дека. Количество элементов в деке в любой момент не превосходит 100. Все операции pop_front, pop_back, front, back всегда корректны. Динамическая индикация. Схемотехника Для вывода часто применяют светодиодные индикаторы. Выводить информацию на них можно как статически, так и динамически. Дальше я попробую в картинках показать какие виды динамической индикации бывают и как она вообще работает. 2. Динамическая индикация.
13) Touchscreen. Се́ нсорный экран — устройство ввода информации, представляющее собой экран, реагирующий на прикосновения к нему.
14) Таймеры, генерация ШИМ. Матричная клавиатура Начинающим 8 Сентябрь 2008 DI HALT 82 Comments Допустим нам надо подавать команды нашему девайсу. Проще всего это делать посредством обычных кнопок, повешенных на порт. Но одно дело когда кнопок две три, и другое когда их штук двадцать. Не убивать же ради этого двадцать выводов контроллера. Решение проблемы есть — матрицирование. То есть кнопки группируются в ряды и столбцы, а полученная матрица последовательно опрашивается микроконтроллером, что позволяет резко снизить количество нужных выводов ценой усложнения алгоритма опроса. Клавиатурная матрица. Считывающий порт включается в режиме Pull-up входа, то есть вход с подтягивающими резисторами. Если контроллер это не поддерживает, то эти резисторы надо повесить снаружи. Сканирующий порт работает в режиме выхода, он подключен к столбцам. Столбцы должны быть подтянуты резисторами к питанию. Впрочем, если используется полноценный Push-Pull то подтяжка не нужна — выход сам поднимет ногу на нужный уровень. Работает следующим образом.
В сканирующий порт выводится значение, состоящее из одного нуля и единицы на всех остальных выводах. Пусть, например, ноль будет на выводе А. Наличие нуля сразу же придавливает подтяжку и весь столбец ложится на землю. Теперь считываем сразу все значение из читающего порта. Если на столбце А не нажата ни одна кнопка, то в порту будут все единички. Но стоит нажать любую кнопку из столбца А, так она сразу же замкнет линию А, на этот вывод порта. В линии А у нас в данный момент 0, это обеспечивает ноль на сканирующем выводе контроллера. Поэтому и на соответствующем выводе порта будет 0 Потом число в сканирующем порту сдвигается на один бит влево (или вправо) и сканируется второй столбец и так по кругу. В итоге, зная какой столбец мы сканируем, получив ноль на считывающем порту, мы, как по координатам, поймем какая кнопка из матрицы нажата. Можно определить одновременные нажатия многих кнопок — надо просто делать проверку не по байту, а по конкретному биту. Увеличение разрядности Дешифратор, это такая микросхема, принимающая на вход двоичный код, а на выходе выдает единицу в выбранный разряд. Т.е. подали число «101» — получили «1» на выводе номер 5. Ну, а у инверсного дешифратора будет 0. Можно пойти еще дальше и поставить микросхему счетчик, который дергать импульсом с порта, значение со счетчика прогонять через дешифратор. Таким образом, можно влепить сколько угодно выводов, хватило бы разрядности дешифратора. Главное учитывать на каком такте счетчика у нас будет какой столбец. Если сканируется обычная клавиатура, нажимаемая человеком, то можно не заморачиваться на скорость опроса и сделать его в качестве побочного продукта, повесив на какое-нибудь левое прерывание. Достаточно чтобы клава опрашивалась хотя бы 10-20 раз в секунду. Этого уже достаточно, для комфортной работы. Дребезг контактов и борьба с ним. Но микроконтроллер работает с такой скоростью, что успевает посчитать эти всплески как устойчивые состояния. Решить эту проблему можно аппаратно, с помощью RS триггера, так и программно — внеся небольшую задержку перед следующим опросом кнопки. Задержка подбирается такой, чтобы дребезг успел прекратиться к ее окончанию. 21) Если какая-то линия порта ввода-вывода в схеме не используется, она должна быть определена как выход (соответствующий бит регистра направления должен соответствовать выходу), и ее выходное значение должно быть равно 0. Большинство линий ввода-вывода могут быть сконфигурированы для выполнения альтернативных функций, обозначенных в назначении выводов микроконтроллера. Для всех линий портов ввода-вывода, как правило, доступна программная конфигурация входных подтягивающих резисторов. Подтягивающие резисторы осуществляют доопределение потенциалов «брошенных» входов напряжением высокого (Pull-up) или низкого (Pull-down) уровня. Для обращения к отдельным линиям порта используется маскирование битов. Входные элементы управления В качестве входных элементов управления могут использоваться · другие элементы схемы; · тумблеры; · джамперы; · множественные переключатели; · кнопки. Тумблеры предназначены для коммутации цепей управления. Обрабатываемый сигнал с тумблера – потенциальный. Различают 1-позиционные и 2-позиционные тумблеры: 1-позиционные Выходные элементы управления В качестве выходных элементов управления могут использоваться · другие элементы схемы; · элементы индикации (единичные светодиоды или светодиодные сборки, в частности, - 7-сегментные индикаторы). Единичные светодиоды
3) Кнопка: подключение и алгоритм борьбы с дребезгом.
Популярное:
|
Последнее изменение этой страницы: 2017-03-11; Просмотров: 768; Нарушение авторского права страницы