Arduino:Примеры/Управление светодиодами с помощью сдвигового регистра 74HC595
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Черновик |
Управление светодиодами с помощью сдвигового регистра 74HC595
Данный пример демонстрирует как управлять 8-ю светодиодами задействуя только 3 цифровых контакта Arduino. В этом нам поможет сдвиговый регистр 74HC595.
Сдвиговый регистр это синхронное устройство, он принимает данные по нарастающему фронту сигнала. В данном случае, когда мы подаем на вход SH_CP сдвигового регистра 74HC595 высокий уровень сигнала, все значения, хранящиеся в нем сдвигаются на одну позицию и происходит запись в первую ячейку значения которое установлено на входе DS сдвигового регистра 74HC595. Данные из последней ячейки или отбрасываются или передаются на выход Q7"(при каскадном подключении). За восемь тактов мы можем загрузить в регистр сдвига новые значения. При подаче на вход ST_CP сдвигового регистра 74HC595 высокого уровня напряжения, происходит вывод значений, хранящихся в ячейках, на выходы регистра.
В данном примере мы будем использовать встроенную функцию shiftOut для поразрядной выдачи данных на выход Arduino, которая упростит работу со сдвиговым регистром.
Она принимает в качестве аргументов:
- номер контакта Arduino, подключенный к контакту DS ввода последовательных данных сдвигового регистра;
- номер контакта Arduino, подключенный к тактовому контакту SH_CP сдвигового регистра;
- порядок выдачи битов;
- MSBFIRST - старший бит будет отправлен первым;
- LSBFIRST - младший бит будет отправлен первым;
- значение для вывода на выводы сдвигового регистра;
Необходимые компоненты
- Плата Arduino, 1шт.;
- Сдвиговый регистр 74HC595, 1 шт.;
- Резистор на 220 Ом, 8 шт.;
- Красный светодиод, 8 шт.;
- Провода-перемычки;
- Макетная плата, 1 шт.;
Схема
Контакты 1-7, 15 | Q0-Q7 | Выходные контакты |
Контакт 8 | GND | «Земля», Vss |
Контакт 9 | Q7’’ | Контакт для вывода последовательных данных |
Контакт 10 | MR | Контакт, позволяющий «очистить» значения на всех выходных контактах и выставить их на LOW (если подать на него LOW) |
Контакт 11 | SH_CP | Тактовый контакт для сдвигового регистра |
Контакт 12 | ST_CP | Тактовый контакт для регистра данных (контакт-защелка) |
Контакт 13 | OE | Контакт, разрешающий вывод данных (если подать на него LOW) |
Контакт 14 | DS | Контакт для ввода последовательных данных |
Контакт 16 | Vcc | Контакт для питания напряжением с положительным зарядом |
Код
#define SER 8 // Контакт для ввода последовательных данных в сдвиговый регистр
#define LATCH 9 // Тактовый контакт для регистра данных (контакт-защелка)
// служит для одновременного вывода полученных последовательных данных
// на параллельные выходы сдвигового регистра
#define CLK 10 // Тактовый контакт для сдвигового регистра
// При подаче HIGH происходит запись одного бита в сдвиговый регистр
void setup()
{
//Установка выводов как выходов
pinMode(SER, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(CLK, OUTPUT);
digitalWrite(LATCH, LOW); // устанавливаем LATCH в LOW, чтобы значения на параллельных выходах
// сдвигового регистра не изменялись во время ввода последовательных
// данных
shiftOut(SER, CLK, MSBFIRST, B11101010); // ввод последовательных данных в сдвиговый регистр
digitalWrite(LATCH, HIGH); // устанавливаем LATCH в HIGH для вывода значений
// на параллельные выводы сдвигового регистра
}
void loop()
{
// В этой секции мы ничего не делаем
}