Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Топ:
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Техника безопасности при работе на пароконвектомате: К обслуживанию пароконвектомата допускаются лица, прошедшие технический минимум по эксплуатации оборудования...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2019-12-21 | 404 |
5.00
из
|
Заказать работу |
|
|
Все микроконтроллеры семейства Mega имеют в своем составе энергонезависимую память (EEPROM-память). Объем этой памяти колеблется от 256 байт в моделях ATmega48x до 4 Кбайт в старших моделях. EEPROM-память расположена в своем адресном пространстве и так же, как и ОЗУ, организована линейно.
Для работы с EEPROM-памятью используются три регистра ввода/вывода: регистр адреса, регистр данных и регистр управления, адреса которых для разных моделей микроконтроллеров приведены в таблице.
Регистры EEPROM
Регистр адреса EEAR (EEPROM Address Register) физически размещается в двух РВВ — EEARH:EEARL. В этот регистр загружается адрес ячейки, к которой будет производиться обращение. Регистр адреса доступен как для записи, так и для чтения. Причем в регистре EEARH используются только младшие биты (количество задействованных битов зависит от объема EEPROM-памяти). Незадействованные биты регистра EEARH доступны только для чтения и содержат нули.
Во время записи в регистр данных EEDR (EEPROM Data Register) заносятся значения, которые будут сохранены в EEPROM по адресу, определяемому регистром EEAR, а во время чтения в этот регистр помещаются данные, считанные из EEPROM.
Регистр управления EECR (EEPROM Control Register) используется для управления доступом к EEPROM-памяти. Формат этого регистра показан на рисунке, а описание его битов для различных моделей приведено в таблице.
Биты регистра EECR
Порты ввода/вывода
1. Регистры портов ввода/вывода.
Порты ввода/вывода (далее я буду писать сокращенно – ПВВ) – п редназначены для общения микроконтроллера с внешними устройствами. С их помощью мы передаем информацию другим устройствам и принимаем информацию от них. В зависимости от типа, микроконтроллер может иметь на своем борту от одного до семи ПВВ. Каждому порту ввода/вывода присвоено буквенное обозначение – A, B, C, D, E, F, G. Все порты в микроконтроллере равнозначные, восьмиразрядные (содержат восемь линий, они же выводы, они же разряды, они же биты) и двунаправленные – могут как передавать, так и принимать информацию. ПВВ в микроконтроллере обслуживают все его устройства, в том числе и периферийные. Поэтому, в зависимости от того какое устройство будет работать с портом он может принимать и передавать или цифровую информацию, или аналоговую.
|
Вообще, порты классифицируются по типу сигнала:
– цифровые порты – которые работают с цифровыми сигналами – логическими “нулями” и логическими “единицами”
- аналоговые порты – которые работают с аналоговыми сигналами – использующими плавно весь диапазон входных напряжений от нуля вольт до напряжения питания МК
- смешанные порты – они и используются в наших МК, могут оперативно переключаться с режима “цифровой порт” в режим “аналоговый порт”, и обратно.
В технической литературе и схемам ПВВ обозначаются следующим образом:
– “ Р ” – первая буква, означающая слово “порт”
– “ А ” (В, С, D, E, F, G) – вторая буква, обозначающая конкретный порт
– “ 0 ” (1, 2, 3, 4, 5, 6, 7) – третий символ – цифра, обозначающая конкретный вывод (регистр, бит) порта.
К примеру: “порт А” – РА, “пятый разряд порта А” – РА5.
Если в МК есть несколько портов, то не обязательно их имена могут идти по порядку – A, B, C. Может быть и так – В, С, D. Поэтому пугаться и судорожно искать где же порт А не надо.
Кроме того, хотя порты восьмиразрядные, выводов у порта не обязательно должно быть 8, может быть и меньше, к примеру 3 – PA0, PA1, PA2. В таком случае порт называют неполным, или урезанным.
Давайте посмотрим на конкретный МК – ATmega8:
Как видите, в этом МК порта с именем “А” нет (отсутствует как класс;). Порт РВ и порт PD – полные, имеют по восемь выводов. А порт С – неполный (ущемленный, нет места в корпусе МК для его вывода), в нем отсутствует восьмой разряд (реально, внутри корпуса МК, он есть, но работать мы с ним не можем).
|
Для управления портами в их электрической схеме имеется два переключателя, которыми мы можем “щелкать” программно, используя специальные регистры ввода/вывода. Такие переключатели имеются для каждого вывода, что означает возможность управлять любым выводом порта. К примеру, один вывод порта можно настроить на ввод информации, три разряда этого же порта на вывод, а оставшиеся вообще не настраивать, оставить их в “Z- состоянии”
2. Конфигурирование портов ввода/вывода.
Как уже было отмечено, порты имеют всего две возможности по конфигурированию:
• задание направления передачи данных (вход или выход);
• подключение/отключение внутреннего подтягивающего резистора.
Направление передачи данных определяется содержимым регистра передачи данных DDRx. Если разряд DDRxn этого регистра установлен в «1», соответствующий n-й вывод порта является выходом. Если же разряд DDRxn этого регистра сброшен в «0», соответствующий вывод порта является входом.
Управление подтягивающим резистором осуществляется с помощью регистра данных порта PORTx. Если разряд Рхп регистра PORTx установлен в «1» и соответствующий вывод порта является входом, между этим выводом и проводом питания подключается подтягивающий резистор. Чтобы отключить подтягивающий резистор, необходимо либо сбросить соответствующий разряд регистра PORTx, либо сделать вывод порта выходом.
В табл.12.1 приведены все возможные конфигурации выводов портов ввода/вывода. При рассмотрении таблицы рекомендуется еще раз обратить внимание на схему, представленную на рис.5.1.
Таблица 12.1
Влияние регистров DDRx и PORTx на конфигурацию выводов портов
DDRxn | Pxn | Функция вывода | Резистор | Примечание |
Вход | Отключен | Третье состояние (Z) | ||
Вход | Подключен | При подключении вывода к общему проводу он является источником тока | ||
Выход | Отключен | Выход установлен в «0» | ||
Выход | Отключен | Выход установлен в «1» |
Примечания:
1) n = 7...0 — номер вывода (разряд порта).
2) Если вывод используется каким-либо периферийным устройством микроконтроллера, то соответствующие этому выводу разряды регистров DDRx и PORTx, как правило, должны быть установлены в соответствии с дополнительной функцией вывода. Однако некоторые периферийные устройства при активизации самостоятельно переопределяют конфигурацию используемых выводов. Об этом упомянуто при описании конкретных периферийных устройств.
|
Таблица 12.2
Альтернативные функции линий портов
Вывод | Альт. функция | Описание |
PORTA | ||
PA0 | ADC0 | Вход АЦП, канал 0 |
PA1 | ADC1 | Вход АЦП, канал 1 |
PA2 | ADC2 | Вход АЦП, канал 2 |
PA3 | ADC3 | Вход АЦП, канал 3 |
PA4 | ADC4 | Вход АЦП, канал 4 |
PA5 | ADC5 | Вход АЦП, канал 5 |
PA6 | ADC6 | Вход АЦП, канал 6 |
PA7 | ADC7 | Вход АЦП, канал 7 |
PORTB | ||
PB0 | T0 | Счетный вход таймера-счетчика 0 |
PB1 | T1 | Счетный вход таймера-счетчика 1 |
PB2 | AIN0 | Прямой вход аналогового компаратора |
PB3 | AIN1 | Инверсный вход аналогового компаратора |
PB4 | SS | Вход выбора микросхемы для интерфейса SPI |
PB5 | MOSI | Выход Master’а и вход Slave’а для SPI |
PB6 | MISO | Вход Master’а и выход Slave’а для SPI |
PB7 | SCK | Выход тактовых импульсов для SPI |
PORTC | ||
PC0 | - | |
PC1 | - | |
PC2 | - | |
PC3 | - | |
PC4 | - | |
PC5 | - | |
PC6 | TOSC1 | Входы для подключения кварцевого резонатора при работе таймера-счетчика 2 в асинхронном режиме |
PC7 | TOSC2 | |
PORTD | ||
PD0 | RXD | Вход приемника UART |
PD1 | TXD | Выход передатчика UART |
PD2 | INT0 | Вход запроса внешнего прерывания 0 |
PD3 | INT1 | Вход запроса внешнего прерывания 1 |
PD4 | OC1B | Выход схемы сравнения В таймера-счетчика 1 |
PD5 | OC1A | Выход схемы сравнения А таймера-счетчика 1 |
PD6 | ICP | Вход на схему захвата таймера-счетчика 1 |
PD7 | OC2 | Выход схемы сравнения таймера-счетчика 2 |
Измерение напряжения и вывод на LCD дисплей
1. Конфигурирование ADC в контролере.
ADC (Analog-to-Digital Converter, в переводе на русский АЦП или аналого-цифровой преобразователь) — это периферия, которая преобразует электрический сигнал на её входе в цифровой код. Затем данный код мы уже используем для обработки или для отображения тем или иным образом данной электрической величины. Это очень распространённая периферия или технология. АЦП активно используется в звукозаписи, измерительной технике, видеозаписи и во многих других случаях. Поэтому нам обойти данную вещь стороной никак не получится, тем более АЦП поддерживается аппаратно в контроллерах PIC16.
|
Как вообще работает цифровое преобразование?
Берётся опорное напряжение и сравнивается с измеряемым. Соответственно, опорное напряжение всегда должно быть больше измеряемого. Если это не так, то нужно будет применять делители напряжения.
Изобразим схематично процесс измерения
Отрезок — это диапазон измерений. Он находится между нулём и опорным напряжением. А стрелка — это измеряемое напряжение.
Данный отрезок делится пополам, и АЦП оценивает, в какой половине находится приложенное напряжение
Если оно находится в стороне нуля, то в самый старший бит результата записывается 0, а если в стороне максимального напряжения, то единица. У нас будет единица. Затем та половина отрезка, на которой находится измеряемое напряжение делится ещё пополам, и АЦП опять измеряет, в какой половинке уже данного отрезка у нас находится измеряемое напряжение
Оценка идёт по тому же принципу — в какой стороне отрезок. В нашем случае будет 0. И этот ноль записывается в следующий более младший бит.
Затем та четвертинка опять делится пополам и АЦП опять оценивает, где находится отрезок
И АЦП так и продолжает такой процесс до тех пор, пока не кончатся ячейки для битов. То есть если мы используем 10-битный режим, то. соответственно, и будет 10 подобных измерений и заполнятся 10 бит величины. Чем больше бит, тем точнее результат, но уже потребуется на это больше времени и более серьёзный и точный АЦП. Имея данный результат, нам несложно будет посчитать величину измеренного напряжения. Мы знаем. что если у нас АЦП 10-битный, то данный результат у нас лежит в промежутке от 0 до 1023 (0xFFFF), получается всего у нас 1023 отрезка. И мы затем наш результат делим на 1024 (количество отрезков плюс 1) и умножаем на величину опорного напряжения.
Теперь посмотрим, как устроен модуль ADC в контроллере PIC16 (нажмите на картинку для увеличения изображения)
Измеряемый сигнал поступает на коммутатор входов, управляемый с помощью битов CHS2:CHS0, в A/D конвертер, в котором преобразовывается в цифровой код. Также в конвертер подаётся опорное напряжение, которое также может поступать из различных источников, что управляется тоже определёнными битами регистров настроек, с которым и сравнивается поступивший сигнал.
A/D-конвертер работает следующим образом. Сигнал, который поступил в него через коммутатор, заряжает внутренний конденсатор C HOLD. Затем модуль преобразует напряжение, удерживаемое на конденсаторе в соответствующий 10-разрядный цифровой код методом, описанным выше (данный метод называется методом последовательного приближения).
Время, необходимое для преобразования напряжения в цифровой код, поэтому складывается из времени заряда конденсатора и времени собственно преобразования. Расчёт этого времени — задача не совсем тривиальная. Подробно об этом рассказано в технической документации. Нам данное время рассчитывать незачем, так как момент окончания преобразования мы будем обнаруживать по состоянию определённого бита, с которым мы познакомимся немного ниже. Тем не менее иногда возникает необходимость досрочного прекращения преобразования, например для того, чтобы обеспечить большую скорость преобразования за счёт уменьшения точности АЦП. Тогда до следующего запуска преобразования необходимо выдержать определённую паузу.
|
2. Подключение библиотеки LCD дисплея.
Жидкокристаллический дисплей (Liquid Crystal Display) LCD 1602 является хорошим выбором для вывода строк символов в различных проектах. Он стоит недорого, есть различные модификации с разными цветами подсветки, вы можете легко скачать готовые библиотеки для скетчей Ардуино. Но самым главным недостатком этого экрана является тот факт, что дисплей имеет 16 цифровых выводов, из которых обязательными являются минимум 6. Поэтому использование этого LCD экрана без i2c добавляет серьезные ограничения для плат Arduino Uno или Nano. Если контактов не хватает, то вам придется покупать плату Arduino Mega или же сэкономить контакты, в том числе за счет подключения дисплея через i2c.
ля взаимодействие Arduino c LCD 1602 по шине I2C вам потребуются как минимум две библиотеки:
· Библиотека Wire.h для работы с I2C уже имеется в стандартной программе Arduino IDE.
· Библиотека LiquidCrystal_I2C.h, которая включает в себя большое разнообразие команд для управления монитором по шине I2C и позволяет сделать скетч проще и короче. Нужно дополнительно установить библиотеку После подключения дисплея нужно дополнительно установить библиотеку LiquidCrystal_I2C.h
Скачать библиотеку для работы с экраном I2C LiquidCrystal_I2C.
После подключения к скетчу всех необходимых библиотек мы создаем объект и можем использовать все его функции. Для тестирования давайте загрузим следующий стандартный скетч из примера.
#include <Wire.h>
#include <LiquidCrystal_I2C.h> // Подключение библиотеки
//#include <LiquidCrystal_PCF8574.h> // Подключение альтернативной библиотеки
LiquidCrystal_I2C lcd(0x27,16,2); // Указываем I2C адрес (наиболее распространенное значение), а также параметры экрана (в случае LCD 1602 - 2 строки по 16 символов в каждой
//LiquidCrystal_PCF8574 lcd(0x27); // Вариант для библиотеки PCF8574
void setup()
{
lcd.init(); // Инициализация дисплея
lcd.backlight(); // Подключение подсветки
lcd.setCursor(0,0); // Установка курсора в начало первой строки
lcd.print("Hello"); // Набор текста на первой строке
lcd.setCursor(0,1); // Установка курсора в начало второй строки
lcd.print("ArduinoMaster"); // Набор текста на второй строке
}
void loop()
{
}
Описание функций и методов библиотеки LiquidCrystal_I2C:
· home() и clear() – первая функция позволяет вернуть курсор в начало экрана, вторая тоже, но при этом удаляет все, что было на мониторе до этого.
· write(ch) – позволяет вывести одиночный символ ch на экран.
· cursor() и noCursor() – показывает/скрывает курсор на экране.
· blink() и noBlink() – курсор мигает/не мигает (если до этого было включено его отображение).
· display() и noDisplay() – позволяет подключить/отключить дисплей.
· scrollDisplayLeft() и scrollDisplayRight() – прокручивает экран на один знак влево/вправо.
· autoscroll() и noAutoscroll() – позволяет включить/выключить режим автопрокручивания. В этом режиме каждый новый символ записывается в одном и том же месте, вытесняя ранее написанное на экране.
· leftToRight() и rightToLeft() – Установка направление выводимого текста – слева направо или справа налево.
· createChar(ch, bitmap) – создает символ с кодом ch (0 – 7), используя массив битовых масок bitmap для создания черных и белых точек.
7-сегментные индикаторы и с динамической индикацией
1. Динамическая индикация.
Динамическая индикация широко применяется для отображения различной информации, например температуры, напряжения, времени или просто количества срабатывания каких-либо устройств или датчиков. Динамическая индикация на базе семисегментных индикаторов отлично согласуется в совместной работе с микроконтроллерами. Однако в литературе по программированию микроконтроллеров AVR данный вопрос рассмотрен очень поверхностно и далеко не в каждой книге, посвященной соответствующей тематике. Поэтому более подробно рассмотрим, как подключить семисегментный индикатор с динамической индикацией к микроконтроллеру, в данном случае – к ATmega8, но аналогия сохраняется для МК AVR любой серии.
По количеству разрядов (цифр) динамические семисегментные индикаторы бывают одноразрядные, двухразрядные, трехразрядные, четырехразрядные и очень редко – шестиразрядные. Основное внимание мы уделим четырехразрядным семисегментным индикаторам, как наиболее применяемому типу динамической индикации. Изготовляются они с общим анодом и общим катодом. Схемы соединения светодиодов отдельных сегментов представлены на рисунках.
Как видно из рисунков, каждый разряд, называемый digit, имеет свой отдельный общий в пределах разряда вывод. Поскольку рассматривается 4-х разрядная динамическая индикация, то таких выводы четыре – digit1, digit2, digit3, digit4.
Распиновка выводов 4-х разрядного семисегментного индикатора приведена на рисунке ниже. В данном случае показан вид сверху, то есть индикатор не нужно переворачивать вверх ногами.
Как работает динамическая индикация
Теперь рассмотрим, как работает динамическая индикация с общим катодом. Например, нам необходимо отобразить число 1987. Для этого следует в первый момент времени подать высокий потенциал на аноды сегментов, образующих единицу – b и c, а на общий катод первого разряда подать низкий потенциал. Общие катоды оставшихся трех разрядов – digit2, digit3 и digit4 остаются не подключенными.
Во второй момент времени получают питания сегменты, образующие цифру 9, общий катод второго разряда подключается к минусу, а digit1 теряет питание; digit2, digit3, как и раннее – остаются не подключенными.
В третий момент времени засвечивается цифра 8 на третьем индикаторе, а остальные индикаторы гаснут.
В четвертый момент времени получает питание последний индикатор и отображается цифра 7.
Далее все повторяется снова. При частоте переключений из разряда на разряда более 25 Гц за счет световой инерции светодиодов наши глаза не успевают заметить, как происходят переключения, поэтому визуально мы воспринимаем целостное свечение одновременно все разрядов.
Схема подключения динамической индикации к микроконтроллеру ATmega8
Сегменты динамической индикации будем подключать через токоограничивающие резисторыноминалом 330 Ом к выводам порта D микроконтроллера ATmega8. Выводы, отвечающие digit1, digit2, digit3, digit4 подсоединим через транзисторы n-p-n тип, например BC547 или 2n2222 к выводам порта B.
Если применять динамическую индикацию с общим анодом, тогда понадобятся биполярные транзисторы p-n-p типа, например BC557, эмиттеры которых нужно подсоединить к плюсу «+» источника питания, а коллекторы – к минусу «-» также через подтягивающий резистор 10 кОм.
2. 7-сегментные индикаторы, способы подключения.
Для того, что бы микропроцессорное устройство было способно выводить информацию в виде цифр и знаков удобно использовать семи сегментные светодиодные индикаторы. Существует огромное множество различных моделей светодиодных индикаторов, разных размеров, цвета свечения. Существуют как индикаторы представляющие собой отдельный один разряд, для индикации всего одной цифры, так и многоразрядные индикаторные панели. В зависимости от модели и схема подключения может быть разной. Кроме того, все индикаторы делятся на две большие группы. Это индикаторы с общим анодом и индикаторы с общим катодом. Схема подключения одиночного индикатора с общим анодом изображена на рисунке 1.
Рис. 1. Подключение одного индикатора
Сегменты индикатора подключены непосредственно каждый к своему выходу порта PB микроконтроллера. Общий анод всех сегментов подключается к источнику питания. На схеме показан вариант питания индикатора от того же источника +5В, от которого питается сам микроконтроллер. Для уменьшения нагрузки на стабилизатор напряжения можно запитать индикатор до стабилизатора. Для того, что бы высветить на индикаторе ту либо иную цифру микроконтроллер просто программирует все выводы порта PB на выход а затем по мере необходимости выводит в порт код, соответствующий выбранному символу. При этом каждый разряд порта отвечает за свой сегмент индикатора. Если в соответствующий разряд выводится логическая единица, то сегмент остается погашенным. Если в разряд выводится логический ноль, то соответствующий сегмент зажигается. Остается подобрать коды таким образом, что бы засветившиеся разряды высветили нужный нам символ.
Для большинства случаев одного разряда индикатора явно не хватает. Подключать же несколько разрядов, каждый к своим выводам явно не получится. Даже самый большой микроконтроллер AVR имеет всего четыре полных порта ввода вывода. Поэтому единственным способом подключения многоразрядных семи сегментных индикаторов к микроконтроллеру является матричный способ. Этот способ очень похож на матричное подключение кнопок клавиатуры, о котором подробно написано в статье "Подключение кнопок". На рисунке 2 показан один из вариантов подключения дисплея из двух семисегментных индикаторов.
Рис. 2. Подключение дисплея
Приведенная схема рассчитана на световые семи сегментные индикаторы небольшой мощности с током потребления не больше 40 мА. Для более мощных индикаторов нужно применять транзисторные ключи. Обратите внимание, что каждый из выходов порта PB микроконтроллера подключен к одноименным сегментам обоих индикаторов. Так вывод PB0 через резистор R1 подключен к выводу сегмента A индикатора HL1 и индикатора HL2. Выход PB1 через резистор R2 подключен к сегментам B обоих индикаторов и так далее. Выбор одного из индикаторов осуществляется посредством двух старших разрядов порта PD. Общий анод индикатора HL1 подключен к выводу PD6, а общий анод индикатора HL2 к выводу PD5. Такая схема включения называется матрицей. Выводы порта PB можно рассматривать, как восемь горизонтальных линий, а два выхода порта PD, как вертикальные линии матрицы. В точках пересечения каждой линии включен один светодиодный сегмент.
Подобная схема включения индикатора всегда работает в режиме динамической индикации. Динамическая индикация состоит в том, что микропроцессор постоянно с достаточно высокой частотой высвечивает символ сначала в первом, а затем во втором разряде индикатора. При частоте переключения выше 24 герц глаз не замечает мерцания и воспринимает изображение на обоих индикаторах как одно статическое изображение. По такому принципу давно уже работают большинство семи сегментных дисплеев в самых различных электронных устройствах.
Для реализации режима динамической индикации процессор должен организовать постоянный цикл. Обычно для этого используют встроенный таймер. Таймер настраивается таким образом, что бы выдавать прерывание с определенной частотой, выбранной для динамической индикации. Каждый раз, при вызове прерывания контроллер выдает изображение символа в новый разряд индикатора. Для этого в порт PB контроллер выставляет код, соответствующий нужному символу, а в соответствующий разряд порта PD (PD5 или PD6) выставляет логическую единицу. В тот разряд, который должен быть потушен, подается логический ноль. На этом обработка прерывания заканчивается, контроллер переходит к выполнению основной программы, а выставленные на выводы порта сигналы так и остаются до следующего прерывания. И все это время в соответствующем разряде индицируется нужный символ. Когда возникает следующее прерывание, в порты выводятся сигналы, которые выводят на индикацию изображение другого разряда индикатора.
На рисунке 2 приведена схема, содержащая всего два разряда индикации. Точно так же можно подключить три, четыре и более разрядов. В случае применения микроконтроллера ATtiny2313 максимальное количество разрядов - 7. Так как порт PD этого контроллера имеет всего семь выводов. В этом случае в процессе индикации только на один из разрядов порта PD подается логическая единица, а на все остальные логический ноль.
Нужно заметить, что в данной схеме выводы PD5 и PD6, к которым подключены общие аноды индикаторов находится под самой большой нагрузкой. Ток протекающий через каждый из них зависит от индицируемого символа и в том случае, когда зажигаются сразу все сегменты в восемь раз больше, чем ток одного сегмента. Такой ток легко может превысить максимально допустимый ток для одного выхода. Однако, во-первых, этот ток носит импульсный характер и среднее значение тока гораздо меньше. А во-вторых, практика показывает, что микроконтроллеры AVR имеют значительный запас по мощности и свободно выдерживают такие нагрузки.
Все вышесказанное относится к индикатором с общим анодом. Что бы зажечь такие индикаторы на общий провод следует подавать плюс источника питания, а на выводы сегментов – минус (соединять с общим проводом). Но бывают другие индикаторы, построенные по схеме с общим катодом. Рассмотрим, как использовать этот тип индикаторов. Схему на рис 1 придется немного переделать. Переделка сведется лишь к тому, что общий анод индикатора нужно отключить от источника +5В и подключить на общий провод. Немного изменится и алгоритм работы. Теперь для того, что бы зажечь сегмент на него нужно подать логическую единицу, а что бы потушить - логический ноль. Схему на рис. 2 переделывать не нужно. Изменится лишь алгоритм. Просто фаза всех сигналов должна поменяться. Там, где раньше мы подавали ноль, теперь нужно подать единицу и наоборот.
Матричная клавиатура
1. Матричная клавиатура 4x4.
Вы наверняка уже создавали на Arduino проекты, где необходим пользовательский ввод информации. Для этого очень часто используются кнопки, причем для подключения каждой кнопки требуется 1 порт Arduino. Если требуется использовать много кнопок, то это непозволительная роскошь, а иногда просто невозможно. Один из вариантов экономии входов Arduino при подключении кнопок – использование матричных клавиатур, например матричной клавиатуры 4x4 (рис. 1).
Рисунок 1. Матричная клавиатура 4х4
На плате матричной клавиатуры находится 16 кнопок, которые расположены в матрице 4х4 по схеме на рис. 2. От платы клавиатуры уходит шлейф на 8 проводов с разъёмом famale и шагом 2,54 мм.
Рисунок 2. Схема соединений матричной клавиатуры 4х4
Принцип работы клавиатуры следующий. Попеременно подаем сигнал низкого уровня на один из контактов 1-4. Если кнопка нажата, то по наличию сигнала низкого уровня на контактах 5-8 определяем нажатую кнопку из ряда 1-4. Например, подаем LOW на вход 2 (на 1,3,4 – сигнал HIGH). Если на контакте 6 сигнал LOW, значит нажата вторая кнопка из второго ряда – "5".
Подключение к плате Arduino
Для подключения клавиатуры к плате Arduino будут задействованы 8 контактов. Схема подключения показана на рис. 3.
Рисунок 3. Схема соединений для подключения матричной клавиатуры 4х4 к плате Arduino
Загрузим на плату Arduino скетч из листинга 1, который выводит в последовательный порт нажатую клавишу.
2. Использование входов/выходов для чтения клавиатуры.
Цифровые сигналы
В отличие от аналоговых сигналов, которые могут принимать любое значение в пределах диапазона, цифровые сигналы имеют только два отдельных значения: высокий (HIGH, 1) и низкий (LOW, 0) уровни. Вы можете использовать цифровые сигналы в ситуациях, где вход или выход будет принимать одно из этих двух значений. Например, одним из случаев, когда вы можете использовать цифровой сигнал, это включение и выключение светодиода.
Функции
В данной статье мы будем использовать следующие связанные с цифровыми сигналами функции Arduino:
pinMode (pin_number, mode)
Поскольку цифровые I/O выводы Arduino могут использоваться в качестве и входа, и выхода, вы должны сначала настроить выводы, которые вы собираетесь использовать для цифрового ввода/вывода, с помощью данной функции. pin_number – это номер вывода, который вы хотите настроить. Режим, mode, может принимать одно из трех значений: INPUT, OUTPUT или INPUT_PULLUP. Когда mode устанавливается в значение INPUT_PULLUP, к выводу подключается внутренний подтягивающий резистор 20 кОм, чтобы привести уровень на выводе к значению HIGH, если к нему ничего не подключено.
digitalWrite(pin_number,value)
Данная функция записывает цифровое значение в вывод. pin задает, в какой вывод на плате Arduino будет записано цифровое значение, а value – это цифровое значение, в которое будет установлен вывод. value может принимать только значения HIGHи LOW.
digitalRead(pin_number)
Данная функция считывает цифровое значение из вывода. pin – это номер цифрового I/O вывода, который вы собираетесь прочитать. Данная функция возвращает одной из двух значений: HIGH или LOW
|
|
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьшения длины пробега и улучшения маневрирования ВС при...
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!