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

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

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

который я написал в прошлый раз.

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

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

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

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

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

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

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

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

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

Реализация

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

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

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

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

Макет платы:

программирование Arduino

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

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

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

/ * ------------------------------------------------ ---------
* | Учебник Shift Register, основанный на |
* | Экспериментальный комплект Arduino CIRC-05 |
* | .: 8 Больше светодиодов:. (Сдвиговый регистр 74HC595) |
* ------------------------------------------------- --------
* | Модифицировано Джеймсом @ MakeUseOf.com |
* ------------------------------------------------- --------
* /
// Pin Pin Definitions
// 7HC595N имеет три контакта
int data = 2; // куда мы отправляем биты на управляющие выходы
int clock = 3; // синхронизируем данные
int latch = 4; // сообщает регистру сдвига, когда активировать выходную последовательность
void setup ()
{
// установить три вывода управления для вывода
pinMode (данные, ВЫХОД);
pinMode (часы, ВЫХОД);
pinMode (защелка, ВЫХОД);
Serial.begin (9600); // чтобы мы могли отправлять отладочные сообщения на последовательный монитор
}
void loop () {
outputBytes (); // наш основной вывод, который записывает 8 бит, чтобы показать, как работает регистр сдвига.
// outputIntegers (); // отправляет целое значение в виде данных вместо байтов, эффективно считая в двоичном виде.
}
void outputIntegers () {
для (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);
}
}

[/ NOEDIT]

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

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

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

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

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

[/ NOEDIT]

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

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

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

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

Daisy Chaining больше, чем одна смена

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

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

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

  • Что такое Arduino Что ты можешь сделать с этим

    ?

  • Что такое стартовый комплект Arduino? Что это содержит?
  • Более крутые компоненты для покупки с вашим стартовым комплектом
  • Начало работы с вашим стартовым комплектом Arduino? Установка драйверов Настройка платы порт
  • Fritzing, бесплатный инструмент для рисования принципиальных схем
  • Пристальный взгляд на структуру приложения Arduino Пример программы Blink
  • Проект Arduino Xmas Tree lights

    (АКА узнает о массивах)

  • Что такое бинарный?

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

Ссылка на основную публикацию
Adblock
detector