Программирование Arduino - игра с регистрами сдвига (a.k.a еще больше светодиодов)

  • Michael Cain
  • 0
  • 2652
  • 690
Реклама

Сегодня я постараюсь рассказать вам немного о регистрах сдвига. Это довольно важная часть программирования Arduino, в основном потому, что они увеличивают количество выходов, которые вы можете использовать, в обмен только на 3 управляющих контакта. Вы также можете объединить регистры сдвига гирляндной цепи, чтобы получить еще больше выходов.

Это значительный скачок в сложности из предыдущих уроков, и я настоятельно рекомендую вам действительно хорошо разбираться в предыдущем материале (ссылки в конце этой статьи), а также в понимании основ двоичного кода Что такое двоичный файл? [Объяснение технологии] Что такое бинарный код? [Объяснение технологии] Учитывая, что двоичный файл является настолько фундаментальным для существования компьютеров, кажется странным, что мы никогда не занимались этой темой раньше - поэтому сегодня я подумал, что дам краткий обзор того, что двоичный файл ... который я написал последний раз.

Что такое сдвиговый регистр?

Технически говоря, выходной сдвиговый регистр принимает данные последовательно и выводит их параллельно. С практической точки зрения это означает, что мы можем быстро отправить кучу команд вывода на чип, сказать ему активировать, и выводы будут отправлены на соответствующие выводы. Вместо того, чтобы перебирать каждый вывод, мы просто отправляем вывод, необходимый для всех выводов одновременно, в виде одного байта или более информации.

Если это поможет вам понять, вы можете думать о сдвиговом регистре как о «массиве» цифровых выходов, но мы можем пропустить обычные команды digitalWrite и просто отправить серию битов, чтобы включить или выключить их..

Как это работает?

Сдвиговый регистр, который мы будем использовать - 74HC595N, включенный в стартовый комплект Oomlout, - требует только 3 управляющих контакта. Первый - это часы - вам не нужно сильно беспокоиться об этом, поскольку последовательные библиотеки Arduino управляют им, - но часы - это, по сути, просто электрический импульс включения / выключения, который задает темп сигнала данных..

Защелкивающийся штифт используется, чтобы сообщать сдвиговому регистру, когда он должен включать и выключать свои выходы в соответствии с битами, которые мы только что отправили, т. Е. Защелкивать их на месте.

Наконец, вывод данных - это то место, куда мы отправили фактические последовательные данные с битами, чтобы определить состояние включения / выключения выходов регистра сдвига..

Весь процесс может быть описан в 4 этапа:

  1. Установите вывод данных на высокий или низкий для первого выходного контакта на регистре сдвига.
  2. Импульсные часы, чтобы «сдвинуть» данные в регистр.
  3. Продолжайте устанавливать данные и пульсировать часы, пока не установите необходимое состояние для всех выходных контактов..
  4. Нажмите на фиксатор, чтобы активировать выходную последовательность.

Реализация

Вам нужны следующие компоненты для этого проекта:

  • 7HC595N чип сдвигового регистра
  • 8 светодиодов и соответствующие резисторы, или все, что вы хотите вывести на
  • Обычный макет, разъемы и базовый Arduino

Если у вас есть стартовый комплект Oomlout, вы можете скачать макет отсюда.

Вот видео сборки:

Макет платы:

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

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

/ * ------------------------------------------------ --------- * | Учебник 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); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100);   void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues <> отрегулировать задержку направления (100);  

Сдвиг битов (функция OutputBytes)

В первом примере цикла - outputBytes () - код использует 8-битную последовательность (байт), которую затем сдвигает влево на каждую итерацию цикла for. Важно отметить, что если вы сдвигаетесь дальше, чем это возможно, бит просто теряется.

Сдвиг битов выполняется с помощью <>, за которым следует число битов, на которые вы хотите сместить.

Посмотрите на следующий пример и убедитесь, что вы понимаете, что происходит:

байт val = B00011010 val = val << 3 // B11010000 val = val <> 5 // B00000010 

Отправка целых чисел вместо (функция OutputIntegers)

Если вы отправите целое число в регистр сдвига вместо байта, он просто преобразует число в двоичную последовательность байтов. В этой функции (раскомментируйте в цикле и загрузите, чтобы увидеть эффект), у нас есть цикл for, который отсчитывает от 0 до 255 (самое большое целое число, которое мы можем представить одним байтом), и отправляет его вместо этого. Это в основном считается в двоичном формате, поэтому последовательность может показаться немного случайной, если ваши светодиоды не расположены в длинной строке.

Например, если вы прочитаете статью с объяснением в двоичном коде, вы будете знать, что число 44 будет представлено как 00101100, поэтому светодиоды 3,5,6 будут светиться в этой точке последовательности.

Последовательность маргариток больше, чем в одну смену

Что примечательно в регистрах сдвига, так это то, что если им дается более 8 бит информации (или как бы велик их реестр), они снова вытесняют другие дополнительные биты. Это означает, что вы можете соединить их серию вместе, вставить одну длинную цепочку битов и распределить ее по каждому регистру отдельно, и все это без дополнительного кодирования с вашей стороны..

Хотя мы не будем здесь подробно описывать процесс или схемы, если у вас более одного сменного регистра, вы можете попробовать проект с официального сайта Arduino здесь.

Другие статьи в серии:

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

Это так же далеко, как мы сегодня пойдем со сменными регистрами, так как я думаю, что мы многое рассмотрели. Как всегда, я бы посоветовал вам поиграть и настроить код, и не стесняйтесь задавать любые вопросы, которые могут возникнуть в комментариях, или даже делиться ссылкой на ваш удивительный проект на основе регистра сдвига..




О современных технологиях, просто и доступно.
Ваш гид в мире современных технологий. Узнайте как использовать технологии и гаджеты, которые нас окружают каждый день и научитесь открывать интересные вещи в Интернете.