Amateur Radio Station R9AL

Обзор

В этом уроке вы узнаете, как использовать восемь больших красных светодиодов с MEGA2560 не расходуя 8 выходных пинов! Хотя вы можете подключить восемь светодиодов каждый с резистором к контакту MEGA2560, но тогоа у вас быстро начнут заканчиваться контакты на вашем MEGA2560. Если у вас нет большого количества модулей, подключенных к вашему MEGA2560 - это нормально, но часто намнужны кнопки, датчики, сервоприводы и т.д., и может оказаться, что у вас не останется свободных выводов. Для уменьшения числа выводов используем микросхему 74HC595 последовательный 8-и битный сдвиговый регистр с параллельным выходным регистром-защелкой. Этот чип имеет восемь выходов и три входа, которые используются для подачи данных в него по одному биту за раз. Эта микросхема немного снизит скорость управления светодиодами (вы можете мигать светодиодами только около 500 000 раз в секунду вместо 8 000 000 в секунду), но он все еще очень быстр, намного быстрее, чем человеческий глаз может заметить, так что оно того стоит!



Необходимые компоненты:

Описание компонентов

74HC595:

Регистр сдвига - это микросхема, которая содержит то, что можно считать восемью ячейками памяти, каждая из которых может быть либо 1, либо 0. Чтобы включить или выключить каждое из этих значений, мы вводим данные с помощью контактов "Data" и "Clok" чипа



Вывод Clok должен принимать восемь импульсов. При каждом импульсе, если вывод Data высок, то 1 выталкивается в регистр сдвига; в противном случае - 0. Когда все восемь импульсов отправлены, включается пин Latch, копируя эти восемь значений в регистр защелки. Это необходимо, в противном случае неправильные светодиоды будут мигать, когда данные загружаются в регистр сдвига. Чип также имеет вывод включения выхода (OE), который используется для включения или отключения всех выходов одновременно. Вы можете прикрепить его к ШИМ-совместимому контакту MEGA2560 ииспользовать analogWrite для управления яркостью светодиодов. Этот вход активен когда не нем низкий уровень, поэтомумы привязываем его к GND.

Принципиальная схема:



Монтажная схема:


Поскольку у нас есть восемь светодиодов и восемь резисторов для подключения, на самом деле существует довольно много соединений, которые нужно сделать. Вероятно, проще всего сначала поставить чип 74HC595, так как почти все остальное подключается к нему. Поместите его так, чтобы маленькая U-образная выемка находилась в верхней части макета. Вывод 1 микросхемы находится слева от этой выемки. Цифровой пин 12 Mega2560 идет на вывод 14 регистра сдвига а цифровой пин 11 идет на вывод номер 12 регистра. Цифровой пин 9 Mega2560 идет на вывод 11 регистра. Все выходы микросхемы, кроме одного, находятся на левой стороне чипа. Следовательно, для удобства подключения именно там находятся светодиоды. После чипа поставьте резисторы на место. Вы должны быть осторожны, чтобы ни один извыводов резисторов не касался друг друга. Затем поместите светодиоды на макетную плату. Более длинные положительные выводы светодиода должны быть направленык чипу, на какой бы стороне макета они ни находились. Прикрепите перемычки, как показано выше. Не забудьте тот, который идет от вывода 8 микросхемы к GND макета. Загрузите скетч, указанный чуть позже, и попробуйте его. Каждый светодиод должен гореть по очереди, пока не включатся все светодиоды, а затем все они погаснут, и цикл повторится.


Код:

После подключения, пожалуйста, откройте программу в папке с кодом - Урок 24 Eight LED with 74HC595 и нажмите кнопку ЗАГРУЗИТЬ, чтобы загрузить программу. См. Урок 2 для получения подробной информации о загрузке программы при наличии ошибок. Первое, что мы делаем, это определяем три пина, которые мы собираемся использовать. Это цифровые выходы MEGA2560, которые будут подключены к контактам latch, clock и data микросхемы 74HC595.

int latchPin = 11;
int clockPin = 9;
int dataPin = 12;
Далее определяется переменная, называемая leds "светодиоды". Это будет использоваться для удержания шаблона по которому светодиоды в данный момент включены или выключены. Данные типа "байт" представляют собой числа, использующие восемь бит. Каждый бит может быть либо включен, либо выключен, так что это идеально подходит для отслеживания,какие из наших восьми светодиодов включены или выключены.
byte leds = 0;
Функция "setup" просто устанавливает три пина, которые мы используем, чтобы назначить их цифровыми выходами.
void setup()
{
pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
}
Функция "loop" изначально выключает все светодиоды, задавая переменной "leds" значение 0. Затем он вызывает "updateShiftRegister", который отправит шаблон "leds" в регистр сдвига, чтобы все светодиоды выключились. Мы будем и меть дело с updateShiftRegister работы позже. Функция цикла приостанавливается на полсекунды, а затем начинает отсчет от 0 до 7, используя цикл "for" и переменную "i". Каждый раз он использует функцию Arduino "bitSet", чтобы установить бит, управляющий этим светодиодом в переменной "leds". Затем он также вызывает "updateShiftRegister", так что светодиоды обновляются, чтобы отразить то, что находится в переменной "leds". Затем происходит полсекундная задержка, прежде чем "i" увеличивается и загорается следующий светодиод.
void loop()
{
leds = 0;
updateShiftRegister();
delay(500);
for (int i = 0; i < 8; i++)
{
bitSet(leds, i);
updateShiftRegister();
delay(500);
}
}
Функция "updateShiftRegister" сначала устанавливает фиксатор на низкий уровень, затем вызывает функцию "shiftOut", прежде чем снова зафиксировать высокий уровень. Для этого требуется четыре параметра, первые два из которых являются выводами для Data и Clock соответственно. Третий параметр указывает, с какого конца данных вы хотите начать. Мы начнем с самого правого бита, который называется "Least Significant Bit" (LSB).

Последний параметр - это фактические данные, которые должны быть перенесены в регистр сдвига, который вданном случае является "светодиодами".
void updateShiftRegister()
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST, leds); 
digitalWrite(latchPin, HIGH);
}
Если бы вы хотели выключить один из светодиодов, а не включить, вы бы вызвали аналогичную Функцию Arduino (bitClear) с переменной "светодиоды". Это установит этот бит "светодиодов" равным 0, и вам просто нужно будет следовать за ним с вызовом "updateShiftRegister", чтобы обновить фактические светодиоды.

Пример:





Обсуждение на форуме





Copyright © R9AL 2020 Все права защищены

Рейтинг@Mail.ru Яндекс цитирования