Реклама
Сегодня я попытаюсь немного рассказать вам о регистрах сдвига. Это довольно важная часть программирования Arduino, в основном потому, что они увеличивают количество выходов, которые вы можете использовать, в обмен только на 3 управляющих контакта. Вы также можете объединить регистры сдвига в гирляндной цепи, чтобы получить еще больше выходных данных.
Это значительный скачок в сложности из предыдущих уроков, и я настоятельно рекомендую вам действительно хорошее понимание предыдущего материала (ссылки в конце этой статьи), а также понимание основы бинарного Что такое бинарный? [Технология объяснила]Учитывая, что двоичный файл является настолько фундаментальным для существования компьютеров, кажется странным, что мы никогда раньше не занимались этой темой - поэтому сегодня я подумал, что дам краткий обзор того, что двоичный файл ... Прочитайте больше который я написал в прошлый раз.
Что такое сдвиговый регистр?
Технически говоря, выходной сдвиговый регистр принимает данные последовательно и выводит их параллельно. С практической точки зрения это означает, что мы можем быстро отправить кучу команд вывода на чип, сказать ему активировать, и выводы будут отправлены на соответствующие контакты. Вместо того, чтобы перебирать каждый вывод, мы просто отправляем вывод, необходимый для всех выводов одновременно, в виде одного байта или более информации.
Если это поможет вам понять, вы можете думать о сдвиговом регистре как о «массиве» цифровых выходов, но мы можем пропустить обычные команды digitalWrite и просто отправить серию битов, чтобы включить их или выкл.
Как это работает?
Сдвиговый регистр, который мы будем использовать - 74HC595N, включенный в стартовый комплект Oomlout, - требует только 3 управляющих контакта. Первый - это часы - вам не нужно об этом беспокоиться, так как последовательные библиотеки Arduino контролируют это - но часы - это просто электрический импульс, который задает темп сигнала данных.
Защелкивающийся штырь используется, чтобы сообщить сдвиговому регистру, когда он должен включать и выключать свои выходы в соответствии с битами, которые мы только что отправили, т. Е. Зафиксировать их на месте.
Наконец, вывод данных - это то, куда мы отправили фактические последовательные данные с битами, чтобы определить состояние включения / выключения выходов регистра сдвига.
Весь процесс можно описать в 4 этапа:
- Установите вывод данных на высокий или низкий для первого выходного контакта на сдвиговом регистре.
- Импульсные часы, чтобы «сдвинуть» данные в регистр.
- Продолжайте устанавливать данные и пульсировать часы, пока не установите требуемое состояние для всех выходных контактов.
- Нажмите на фиксатор, чтобы активировать выходную последовательность.
Реализация
Вам нужны следующие компоненты для этого проекта:
- 7HC595N чип сдвигового регистра
- 8 светодиодов и соответствующие резисторы, или все, что вы хотите вывести на
- Обычный макет, разъемы и базовый Arduino
Если у вас есть стартовый комплект Oomlout, вы можете скачать макет отсюда.
Вот видео сборки:
Макет платы:

И мой собранный вариант:

Я изменил исходный код, предоставленный Ooolmout, но если вы хотите попробовать это вместо этого, его можно полностью загрузить здесь. Объяснение кода включено, поэтому скопируйте и вставьте все это снизу или Pastebin прочитать объяснение кода.
/ * * | Учебник Shift Register, основанный на | * | Экспериментальный комплект Arduino CIRC-05 | * |.: 8 Больше светодиодов:. (Сдвиговый регистр 74HC595) | * * | Модифицировано Джеймсом @ MakeUseOf.com | * * / // Определения выводов. // 7HC595N имеет три контакта. int data = 2; // куда мы отправляем биты на управляющие выходы int clock = 3; // синхронизирует данные int latch = 4; // сообщает сдвиговому регистру, когда активировать выходную последовательность void setup () {// установить три управляющих контакта для вывода pinMode (data, OUTPUT); pinMode (часы, ВЫХОД); pinMode (защелка, ВЫХОД); Serial.begin (9600); // чтобы мы могли отправлять отладочные сообщения на последовательный монитор. } void loop () {outputBytes (); // наш основной вывод, который записывает 8 бит, чтобы показать, как работает регистр сдвига. //outputIntegers(); // отправляет целое значение в виде данных вместо байтов, эффективно считая в двоичном виде. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Отладка, отправка вывода на последовательный монитор shiftOut (data, clock, MSBFIRST, i); digitalWrite (защелка, ВЫСОКАЯ); задержка (100); }} void outputBytes () {/ * Байты или 8-биты представлены символом B, за которым следуют 8 0 или 1 с. В данном случае рассмотрим это как массив, который мы будем использовать для управления 8 светодиодами. Здесь я начал байтовое значение как 00000001 * / byte dataValues = B00000001; // изменить это, чтобы скорректировать начальный паттерн / * В цикле for мы начинаем с вытягивания защелки, используя функцию shiftOut Arduino для поговорите со сдвиговым регистром, отправив ему наш байт dataValues, представляющий состояние светодиодов, затем потяните защелку вверх, чтобы зафиксировать их в место. Наконец, мы сдвигаем биты на одну позицию влево, что означает, что следующая итерация включит следующий светодиод в серии. Чтобы увидеть точное двоичное значение, проверьте последовательный монитор. * / for (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // Отладка, отправка вывода на последовательный монитор shiftOut (data, clock, MSBFIRST, dataValues); digitalWrite (защелка, ВЫСОКАЯ); dataValues = dataValues << 1; // Сдвиньте биты на одну позицию влево - измените на >>, чтобы настроить задержку направления (100); } }
Сдвиг битов (функция OutputBytes)
В первом примере цикла - outputBytes () - код использует 8-битную последовательность (байт), которую затем сдвигает влево на каждую итерацию цикла for. Важно отметить, что если вы сдвигаетесь дальше, чем это возможно, бит просто теряется.
Сдвиг битов выполняется с помощью << или >>, за которым следует число битов, на которое вы хотите сместить.
Посмотрите на следующий пример и убедитесь, что вы понимаете, что происходит:
байт val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, мы потеряли эти другие биты! val = val >> 5 // B00000010.
Отправка целых чисел вместо (функция OutputIntegers)
Если вы отправите целое число в регистр сдвига вместо байта, он просто преобразует число в двоичную последовательность байтов. В этой функции (раскомментируйте в цикле и загрузите, чтобы увидеть эффект), у нас есть цикл for, который отсчитывает от 0 до 255 (самое большое целое число, которое мы можем представить одним байтом), и отправляет его вместо этого. Это в основном считается в двоичном формате, поэтому последовательность может показаться немного случайной, если ваши светодиоды не расположены в длинной строке.
Например, если вы прочтете статью с пояснениями в двоичном формате, вы узнаете, что число 44 будет представлено как 00101100, поэтому светодиоды 3,5,6 будут светиться в этой точке последовательности.

Последовательность маргариток больше, чем в одну смену
Что примечательно в регистрах сдвига, так это то, что если им дается более 8 бит информации (или как бы велик их реестр), они снова вытесняют другие дополнительные биты. Это означает, что вы можете соединить серию из них вместе, вставить одну длинную цепочку битов и распределить ее по каждому регистру отдельно, и все это без дополнительного кодирования с вашей стороны.
Хотя мы не будем здесь подробно описывать процесс или схемы, если у вас есть более одного сменного регистра, вы можете попробовать проект с официального сайта Arduino здесь.
Другие статьи в серии:
- Что такое Arduino и что с этим можно сделать Что такое Arduino и что с этим можно сделать?Arduino - это замечательное небольшое электронное устройство, но если вы никогда не использовали его раньше, то что же это такое и что вы можете сделать с ним? Прочитайте больше ?
- Что такое стартовый комплект Arduino и что в нем содержится? Что входит в стартовый комплект Arduino? [MakeUseOf Объясняет]Ранее я представлял оборудование с открытым исходным кодом Arduino здесь, в MakeUseOf, но вам понадобится больше, чем просто Arduino, чтобы что-то из него построить и начать работу. Arduino "стартовые комплекты" ... Прочитайте больше
- Более крутые компоненты для покупки с вашим стартовым комплектом 8 более интересных компонентов для ваших проектов ArduinoИтак, вы думаете о приобретении стартового комплекта Arduino, но вам интересно, хватит ли каких-нибудь базовых светодиодов и резисторов, чтобы занять вас на выходные? Возможно нет. Вот еще 8 ... Прочитайте больше
- Начало работы с вашим стартовым комплектом Arduino? Установка драйверов и настройка платы и порта Начало работы с вашим Arduino Starter Kit - Установка драйверов и настройка платы и портаИтак, вы купили себе стартовый комплект Arduino и, возможно, некоторые другие случайные классные компоненты - что теперь? Как вы на самом деле начинаете программировать эту штуку Arduino? Как вы это настроили ... Прочитайте больше
- Fritzing, бесплатный инструмент для рисования принципиальных схем Fritzing - лучший инструмент для набросков электронных проектов [кросс-платформенный]Несмотря на то, что Fritzing звучит как алкопоп, на самом деле это невероятное количество свободного программного обеспечения, которое вы можете использовать для создания принципиальные схемы и компоненты для использования с быстродействующими макетными платами, такими как фантастический открытый код Arduino ... Прочитайте больше
- Пристальный взгляд на структуру приложения Arduino и пример программы Blink Первые шаги с Arduino: пристальный взгляд на печатную плату и структуру программыВ прошлый раз я оставил вас, настроив Arduino для работы с Mac или Windows, и загрузив простое тестовое приложение, которое мигало встроенным светодиодом. Сегодня я собираюсь объяснить код ... Прочитайте больше
- Проект Arduino Xmas Tree lights Проект Arduino: Как сделать украшения из рождественских огнейЭто следующая часть нашей обучающей серии Arduino, и на этот раз мы будем изучать и использовать массивы для создания маленького елочного орнамента с различными мигающими последовательностями. Это было бы ... Прочитайте больше (AKA узнает о массивах)
- Что такое бинарный? Что такое бинарный? [Технология объяснила]Учитывая, что двоичный файл является настолько фундаментальным для существования компьютеров, кажется странным, что мы никогда раньше не занимались этой темой - поэтому сегодня я подумал, что дам краткий обзор того, что двоичный файл ... Прочитайте больше
Это так же далеко, как мы сегодня пойдем со сменными регистрами, так как я думаю, что мы многое рассмотрели. Как и всегда, я бы посоветовал вам поиграть и откорректировать код, и не стесняйтесь задавать любые вопросы, которые могут у вас возникнуть в комментариях, или даже делиться ссылкой на ваш удивительный проект на основе регистра сдвига.
Джеймс имеет степень бакалавра в области искусственного интеллекта и сертифицирован CompTIA A + и Network +. Он является ведущим разработчиком MakeUseOf и проводит свое свободное время за игрой в VR-пейнтбол и настольные игры. Он строит компьютеры с детства.