Pull to refresh

Управление сдвиговым регистром с Arduino

Я использовал микросхему 74HC595, но другие на неё похожи, так что вы можете продолжать читать. Для начала приведу распиновку.

https://cxem.net/arduino/arduino166.php, модифицировано
https://cxem.net/arduino/arduino166.php, модифицировано

Q1...Q7 — параллельные выходы регистра. Предназначены для подключения управляемых элементов, например, светодиодов.
GND — земля ("минус").
VCC — питание ("плюс"). Сюда подаются 5 В.
DS — вход данных. На этот вход передаются восемь последовательных бит данных для установки значений на параллельных выходах.
OE — вход для вывода последовательных данных на параллельные выходы. Черта сверху означает, что активный уровень для этого входа низкий. Если на него подаётся напряжение низкого уровня, параллельные выходы будут включены, а при подаче напряжения высокого уровня — выключены.
ST_CP — синхронизация выходов.
SH_CP — вход тактовых импульсов. При подаче на него импульса высокого напряжения в сдвиговый регистр считывается один бит данных со входа DS. Для считывания всех восьми бит данных необходимо подать на этот вход восемь импульсов.
MR — сброс значений регистра при подаче на него напряжения низкого уровня.
Q7` — выход, предназначенный для соединения регистров друг с другом (это называется "делать каскады").

Теперь попробуем подключить эту штуку к Arduino. Вот схема.

Извиняюсь за надписи "Часть1". Я не знаю, как их убрать.
Извиняюсь за надписи "Часть1". Я не знаю, как их убрать.

К выводам Q1...Q7 подключите управляемые элементы, например, светодиоды.

Осталось написать код. Я уже дал распиновку, схему подключения и объяснил, какой вывод за что отвечает. Теперь вы можете написать код сами. Но если не можете (или вам лень), то вам понадобится готовый код, который я привожу ниже. Тут на управляемые элементы последовательно, с интервалом в 1 секунду, подаётся высокое напряжение, после чего они все выключаются и всё начинается сначала.

#define data 2 //Вывод данных
#define clock 3 //Тактовый вывод
#define latch 4 //Вывод синхронизации

byte elementsStates[8] = {0b10000000, 0b11000000, 0b11100000,
0b11110000, 0b11111000, 0b11111100, 0b11111110, 0b11111111,
0b00000000}; //Данные для подачи на вход данных

void setup() {
//Назначение выводов выходами
pinMode(data, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(latch, OUTPUT);
}

void loop() {
//Цикл, ежесекундно отправляющий в регистр новые данные
for (int i = 0; i < 8; i++) {
digitalWrite(latch, LOW); //Закрыть вывод данных на параллельные выходы
shiftOut(data, clock, MSBFIRST, elementsStates[i]) //Отправить данные в регистр
digitalWrite(latch, HIGH); //Вывести данные на параллельные выходы
delay(1000); //Задержка на секунду
}
}

Ну вот и всё. Только не забудьте загрузить код в Arduino.

Хорошего дня!

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.