это справочный листок или азбука цифровой техники . Несколько устройств которые используются с Arduino.
регистр- защелка в современном исполнении 74 серия – логическая схема которая может увеличить количество выводов у Ардуино как бы, перевод последовательный цифровой код в параллельный.
в большинстве цифровых устройств даже в компьютере ibm pc используется и параллельный регистр- защелка , 74ls323 к555ир23, тоже возможно будет, а здесь более нужный вариант для микроконтроллера, у которого всего 4 – 7 выводов универсальных можно использовать. Будет пример – часы на цифровых лампах, на советских ИН14 ИН-16 , где получается в каждой неонке 9 цифр и запятая еще, а ламп минимум 4 а то и 6 с секундами, через регистры включаются 60 электродов.
Официальный сайт компании Arduino по адресу arduino.cc
Arduino.ru
Множим выходы с помощью сдвигового регистра 74HC595
Пт, 18/02/2011 – 21:59 | by Alexander
Рассмотрим типичную ситуацию, когда вам нужно больше выходов (пинов), чем может предложить контроллер Arduino. В этом случае самый простой выход — использовать сдвиговый регистр. В данном примере используется 74HC595.
74HC595 — восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе.
Другими словами этот регистр позволяет контролировать 8 выходов, используя всего несколько выходов на самом контроллере. При этом несколько таких регистров можно объединять последовательно для каскадирования. Другие подходящие регистры можно поискать по комбинации “595” и “596” в серийном номере. Так, например, STP16C596 может управлять 16 светодиодами одновременно без использования дополнительных резисторов.
В данной схеме используется принцип синхронизированной последовательной передачи сигнаналов. Необходимые значения сигнала (биты HIGH или LOW) передаются в регистр один за другим, при этом регистр получает синхронизирующий сигнал, который заставляет его считать сигнал с входа. Когда байт (1 байт = 8 бит) считан, значения всех 8 бит распределены по выходам. То есть передаем в регистр сигналы последовательно, на выходах регистра имеем параллельно 8 сигналов.
74HC595 может отдавать сигналы не только параллельно, но и последовательно. Это необходимо при объединении нескольких регистров, для получения 16 и более выходов. В этом случае первые 8 бит сигнала передаются на следующий регистр для параллельного вывода на нем, об этом будет рассказано более подробно во втором примере.
Три возможных состояния на выходе, упомянутые выше, означают, что выход регистра может иметь не только логический ноль или единицу (HIGH или LOW), но и быть в высокоомном (высокоимпедансном) состоянии — когда выход отключен от схемы. В высокоомное состояние не может быть переведен отдельный выход, а только все выходы регистра разом. Если мы говорим об управлении светодиодами, это может быть полезно в случае, когда мы хотим переключить управление ими на другой контроллер. В примере ниже это состояние никак не используется и довольно редко может быть полезно.
Распиновка входов/выходов регистра
Пины 1-7, 15 | Q0 ” Q7 | Параллельные выходы | |
Пин 8 | GND | Земля | |
Пин 9 | Q7″ | Выход для последовательного соединения регистров | |
Пин 10 | MR | Сброс значений регистра. Сброс происходит при получение LOW | |
Пин 11 | SH_CP | Вход для тактовых импульсов | |
Пин 12 | ST_CP | Синронизация (“защелкивание”) выходов | |
Пин 13 | OE | Вход для переключения состояния выходов из высокоомного в рабочее | |
Пин 14 | DS | Вход для последовательных данных | |
Пин 16 | Vcc | Питание |
Пример с одним регистром
Подключим:
- GND (пин 8) на землю
- Vcc (пин 16) к питанию 5В
- OE (пин 13) на землю
- MR (пин 10) к питанию 5В
Итак, мы запитали регистр и сделали все выходы активными. Это несколько упрощенный способ подключения, так как в момент подачи питания на схему на выходах будут случайные значения. Можно контролировать пин MR и OE непосредственно с Arduino, чтобы обнулить входы и/или подключить выходы в нужный момент. Для упрощения схемы и минимизации количества задействованных выходов Arduino мы будем использовать более простую схему, так как значения регистров и выводов будут перезаписаны, как только программы начнет работать.
Соединяем с Arduino:
- DS (пин 14) с 11-ым цифровой выход Arduino (на схеме синий провод)
- SH_CP (пин 11) с 12-ым цифровым выходом (желтый провод)
- ST_CP (пин 12) c 8-ым (зеленый провод)
Далее эти выходы в тексте и коде именуются dataPin, clockPin и latchPin соответственно. Обратите внимание на конденсатор 0.1 микрофарада на latchPin, он минимизирует шум в схеме при подаче “защелкивающего” импульса.
Подключаем светодиоды к выходам регистра 74HC595, катод (короткая ножка) светодиода подключается к общей земле, а анод (длинная ножка) через ограничительный 220-ОМ резистор к выходам регистра. При использовании регистров отличных от 74HC595 следует свериться с документацией и проверить схему подключения. К некоторым регистрам светодиоды подключаются наоборот — катод к выходам.
Схема подключения
Ниже приведен код трех программ. Первая, “Hello world”, выводит значения байта от 0 до 255. Вторая по одному включает светодиоды. Третья циклически проходит по массиву.
Пониманию кода могут помочь “временная диаграмма сигналов” регистра и “таблица логики”. Когда clockPin переглючается с LOW на HIGH, регистр считывает значения с DS пина. По мере считывания данные записываются во внутреннюю память. Когда latchPin переключается с LOW на HIGH, данные “защелкиваются”, то есть передаются на выходы регистра, включая светодиоды.
Код примера 1.1показать код
Код примера 1.2показать код
Пример использования каскада сдвиговых регистров
В этом примере подключаются два регистра, доводя количество выходов до 16, при это на Arduino по прежнему задействовано то же количество выходов.
Подключаем второй регистр к питанию и общей земле точно так же, как и первый.
Далее DS вход (пин 14) подключается к Q7′ выходу (пин 9) первого регистра (синий провод). А SH_CP (пин 11) и ST_CP (pin 12) подключаются параллельно регистру к соответствующим входам первого регистра. Желтый и зеленый провод соответственно.
К выходам второго регистра подключаем зеленые светодиоды.
Схема подключения
Код примера 2.1
//**************************************************************// |
// Name : shiftOutCode, Hello World |
// Author : Carlyn Maw,Tom Igoe, David A. Mellis |
// Date : 25 Oct, 2006 |
// Modified: 21 Mar 2010 |
// Modified: 19 Feb 2011 |
// Version : 2.0 |
// Notes : Программа использует два сдвиговых регистра 74HC595 |
// : для вывода значений от 0 до 255 |
//**************************************************************** |
//Пин подключен к ST_CP входу 74HC595 |
int latchPin = 8; |
//Пин подключен к SH_CP входу 74HC595 |
int clockPin = 12; |
//Пин подключен к DS входу 74HC595 |
int dataPin = 11; |
void setup() { |
//устанавливаем режим OUTPUT |
pinMode(latchPin, OUTPUT); |
pinMode(clockPin, OUTPUT); |
pinMode(dataPin, OUTPUT); |
} |
void loop() { |
// отсчитываем от 0 до 255 и отображаем значение на светодиоде |
for ( int numberToDisplay = 0; numberToDisplay < 256; numberToDisplay++) { |
// устанавливаем синхронизацию "защелки" на LOW |
digitalWrite(latchPin, LOW); |
// передаем отсчет для вывода на зеленые светодиоды |
shiftOut(dataPin, clockPin, MSBFIRST, numberToDisplay); |
// передаем обратный отсчет для вывода на красные светодиоды |
shiftOut(dataPin, clockPin, MSBFIRST, 255-numberToDisplay); |
//"защелкиваем" регистр, тем самым устанавливая значения на выходах |
digitalWrite(latchPin, HIGH); |
// пауза перед следующей итерацией |
delay(500); |
} |
} |
Код примера 2.2:
/* |
Программа поочередно включается все светодиоды, подключенные к двум |
сдвиговым регистрам 74HC595 .Created 22 May 2009 |
Modified 23 Mar 2010 |
by Tom Igoe |
*/ |
//Пин подключен к ST_CP входу 74HC595 |
const int latchPin = 8; |
//Пин подключен к SH_CP входу 74HC595 |
const int clockPin = 12; |
//Пин подключен к DS входу 74HC595 |
const int dataPin = 11; |
char inputString[2]; |
void setup() { |
//устанавливаем режим OUTPUT |
pinMode(latchPin, OUTPUT); |
pinMode(dataPin, OUTPUT); |
pinMode(clockPin, OUTPUT); |
Serial.begin(9600); |
Serial.println( "reset" ); |
} |
void loop() { |
// проходим циклом по всем 16 выходам двух регистров |
for ( int thisLed = 0; thisLed < 16; thisLed++) { |
// записываем сигнал в регистр для очередного светодиода |
registerWrite(thisLed, HIGH); |
// если это не первый светодиод, то отключаем предыдущий |
if (thisLed > 0) { |
registerWrite(thisLed - 1, LOW); |
} |
// если это первый светодиод, то отключаем последний |
else { |
registerWrite(15, LOW); |
} |
// делаем паузу перед следующией итерацией |
delay(250); |
} |
} |
// этот метод отсылает бит на сдвиговый регистр |
void registerWrite( int whichPin, int whichState) { |
// для хранения 16 битов используем unsigned int |
unsigned int bitsToSend = 0; |
// выключаем светодиоды на время передачи битов |
digitalWrite(latchPin, LOW); |
// устанавливаем HIGH в соответствующий бит |
bitWrite(bitsToSend, whichPin, whichState); |
// разбиваем наши 16 бит на два байта |
// для записи в первый и второй регистр |
byte registerOne = highByte(bitsToSend); |
byte registerTwo = lowByte(bitsToSend); |
// "проталкиваем" байты в регистры |
shiftOut(dataPin, clockPin, MSBFIRST, registerTwo); |
shiftOut(dataPin, clockPin, MSBFIRST, registerOne); |
// "защелкиваем" регистр, чтобы биты появились на выходах регистра |
digitalWrite(latchPin, HIGH); |
} |
Экранчик на жидких кристаллах. ( на многих приборах раньше были и неоновые цифры – но они не дешевые и им надо напряжение 200 вольт) еще как вариант есть индикаторы светодиодные – восьмерки из светящихся сегментов. Самый экономичный из всех, меньшее потребление тока, конечно на жидких кристаллах.
LCD 16×02 i2c подключение дисплея к Ардуино
СОДЕРЖАНИЕ ►
- Как подключить к Ардуино дисплей без i2c
- Схема i2c интерфейса для подключения LCD
- Как подключить к Ардуино дисплей LCD по i2c
- Подключение нескольких дисплеев к i2c шине
- Библиотека LiquidCrystal_I2C.h для LCD 1602
LCD дисплей Arduino позволяет визуально отображать данные с датчиков. Расскажем, как правильно подключить модуль QAPASS LCD к Arduino по I2C и рассмотрим основные команды инициализации и управления LCD 1602. Также рассмотрим различные функции в языке программирования C++, для вывода текстовой информации на дисплее, который часто требуется использовать в проектах Ардуино.
Как подключить к Arduino LCD без I2C
Текстовый экран 16×2 используется для вывода информации с датчиков, отображения меню или подсказок. На экране выводятся черные символы размером 5×8 пикселей. Встроенная подсветка включается подачей питания на пины модуля. Текстовый дисплей 16×2 без модуля IIC подключается к микроконтроллеру через 16 контактов. Распиновка экрана с примером подключения размещена ниже.
Для этого занятия потребуется:
- Arduino Uno / Arduino Nano / Arduino Mega;
- LCD монитор 1602 i2c;
- провода «папа-мама».
LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
SDA | A4 | A4 | 20 |
SCL | A5 | A5 | 21 |
Жидкокристаллический дисплей имеет 2 ряда по 16 символов, отсюда и его название LCD 1602. В память устройства встроено 192 знака, еще 8 знаков может определить сам пользователь. При подключении дисплея без IIC модуля потребуется использовать 6 портов общего назначения у микроконтроллера Arduino, не считая питания. Соберите схему, как на картинке выше и загрузите следующую программу в плату.
Скетч. Ардуино и LCD 1602 без I2C модуля
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// подключаем библиотеку для работы с экраном #include <LiquidCrystal.h> // объявляем объект, для управления дисплеем указываем пины LiquidCrystal LCD(13, 12, 11, 10, 9, 8); void setup() { LCD.begin(16, 2); // указываем количество строк и столбцов LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print("I LOVE"); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print("ARDUINO"); // печатаем сообщение на второй строке } void loop() { } |
Пояснения к коду:
- для данного примера используется стандартная библиотека LiquidCrystal.h для QAPASS, которая не поддерживает кириллицу;
- чтобы упростить схему и не использовать большое количество пинов микроконтроллера, следует использовать дисплей с модулем I2C.
Принцип работы I2C интерфейса Arduino
I2C — последовательная двухпроводная шина для связи интегральных схем внутри электронных приборов, известна, как I²C или IIC (англ. Inter-Integrated Circuit). I²C была разработана фирмой Philips в начале 1980-х годов, как простая 8-битная шина для внутренней связи между схемами в управляющей электронике (например, в компьютерах на материнских платах, в мобильных телефонах и т.д.).
В простой системе I²C может быть несколько ведомых устройств и одно ведущее устройство, которое инициирует передачу данных и синхронизирует сигнал. К линиям SDA (линия данных) и SCL (линия синхронизации) можно подключить несколько ведомых устройств. Часто ведущим устройством является контроллер Ардуино, а ведомыми устройствами: часы реального времени или LCD Display.
Как подключить LCD 1602 I2C к Arduino
Жидкокристаллический дисплей 1602 с I2C модулем подключается к плате Ардуино всего 4 проводами — 2 провода данных и 2 провода питания. Подключение QAPASS 1602a к Arduino проводится стандартно для шины I2C: вывод SDA подключается к порту A4, вывод SCL – к порту A5. Питание LCD дисплея осуществляется от порта +5V. Смотрите подробнее схему подключения жк монитора 1602 на фото ниже.
После подключения LCD монитора к Ардуино через I2C вам потребуется установить библиотеку LiquidCrystal_I2C.h для работы с LCD дисплеем по интерфейсу I2C и библиотека Wire.h (имеется в стандартной программе Arduino IDE). Скачать рабочую библиотеку LiquidCrystal_I2C.h для LCD 1602 с модулем I2C можно на странице Библиотеки для Ардуино на нашем сайте по прямой ссылке с Google Drive.
Скетч для жк дисплея QAPASS 1602 I2C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <Wire.h> // библиотека для управления устройствами по I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея void setup() { LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print("I LOVE"); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print("ARDUINO"); // печатаем сообщение на второй строке } void loop() { LCD.noDisplay(); // выключаем и включаем надпись на дисплее delay(1000); LCD.display(); delay(1000); } |
Пояснения к коду:
- перед выводом информации на дисплей, необходимо задать положение курсора командой
setCursor(0,1)
, где 0 — номер символа в строке, 1 — номер строки; - в отличии от
clear()
— командаnoDisplay()
не удаляет надпись, а отключает ее вывод на дисплее и ее можно снова показать.
Подключение двух дисплеев по I2C
По умолчанию у всех дисплеев 1602 с модулем I2C адрес — «0x27», но можно изменить адрес текстового экрана и узнать его через сканер iic шины. Таким образом, если у вас есть необходимость подключить к одному микроконтроллеру несколько дисплеев 1602, то следует изменить адреса устройств, что бы не было совпадений. Давайте рассмотрим, каким образом изменить IIC адрес жидкокристаллического дисплея.
Если перевернуть дисплей и посмотреть на IIC модуль (смотри фото выше), то там можно заметить контакты, обозначенные, как «A0», «A1» и «A2». Если по умолчанию LCD имеет адрес «0x27» на шине IIC, то замкнув перемычку «A0», адрес дисплея сменится на «0x26». Таким образом, к одной шине можно подключить несколько дисплеев, не забыв указать их адреса в скетче — смотри следующий пример кода.
Скетч. Подключение нескольких LCD 1602 к шине i2c
Перед загрузкой следующего скетча, сначала соберите схему с двумя дисплеями и просканируйте шину IIC. Это необходимо сделать, чтобы убедится в том, что плата Arduino «видит» оба устройства на шине. А также перепроверить правильность адресов. После этого можно загружать следующий код, который позволит управлять сразу двумя дисплеями с модулями IIC от одного микроконтроллера Arduino Uno.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <Wire.h> // библиотека для шины I2C #include <LiquidCrystal_I2C.h> // библиотека для 16x2 I2C LiquidCrystal_I2C LCD1(0x27, 16, 2); // присваиваем имя первому дисплею LiquidCrystal_I2C LCD2(0x26, 16, 2); // присваиваем имя второму дисплею void setup() { LCD1.init(); // инициализация первого дисплея LCD2.init(); // инициализация второго дисплея LCD1.backlight(); // включение подсветки LCD2.backlight(); // включение подсветки } void loop() { // прокручиваем надпись на первом дисплее LCD1.setCursor(1, 0); LCD1.print("I LOVE ARDUINO"); LCD1.scrollDisplayLeft(); // прокручиваем надпись на втором дисплее LCD2.setCursor(1, 0); LCD2.print("HELLO WORLD"); LCD2.scrollDisplayRight(); delay(300); } |
Пояснения к коду:
- в программе у каждого дисплея имя должно быть уникальным.
Библиотека LiquidCrystal_I2C.h для LCD дисплея
В следующем примере разберем сразу несколько возможностей, которая дает библиотека LiquidCrystal_I2C Arduino (на самом деле мы взяли команды из стандартной библиотеки). Продемонстрируем вывод мигающего курсора, как убрать надпись с экрана на некоторое время без удаления и, как управлять подсветкой дисплея из кода программы. Для этого загрузите в Ардуино следующий код программы.
Скетч. Описание библиотеки LiquidCrystal_I2C.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <Wire.h> // библиотека для управления устройствами по I2C #include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 16x2 LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея void setup() { LCD.init(); // инициализация LCD дисплея LCD.backlight(); // включение подсветки дисплея LCD.blink(); // включение мигающего курсора delay(2000); LCD.noBlink(); LCD.setCursor(1, 0); // ставим курсор на 1 символ первой строки LCD.print("I LOVE"); // печатаем сообщение на первой строке LCD.setCursor(8, 1); // ставим курсор на 1 символ второй строки LCD.print("ARDUINO"); // печатаем сообщение на второй строке delay(2000); LCD.cursor(); // включение текущей позиции курсора delay(2000); LCD.noCursor(); } void loop() { LCD.noBacklight(); // выключаем и включаем подсветку экрана delay(1000); LCD.backlight(); delay(1000); } |
Пояснения к коду:
- библиотека
LiquidCrystal_I2C.h
содержит встроенные команды для управления LCD дисплея по шине I²C и позволяет значительно упростить скетч. - читайте также про возможность авто прокрутки строки на дисплее Ардуино.
Заключение: Используя программы Ардуино для lcd 1602a из этой записи и схему подключения lcd 1602 к Ардуино по i2c вы сможете применять данный дисплей в проектах Ардуино с LCD и в различных примерах. Если у вас остались вопросы по использованию монитора 1602 i2c Arduino — оставляйте их в комментариях на этой странице. Возможно, то что вы ищете уже решено и есть в ответах.
проекты ардуино со схемами и скетчами
подключение lcd 1602 к ардуино
еще я сделал парочку троечку часов на лампах ИН14 ИН-16 ИН-1 . Проект на ИН1 есть на других страницах, arduino nano 74hc595 К155ИД1. Там использован вч транс – двухобмоточный дроссель с управлением на MC34063 с транзистором КП813, источник выдает 200 вольт от 12 и ток до 150 ма. И это на катушечке от блока питания компьютера, на желтом кольце всего 3 ,5 см размером.
https://vk.com/@retromodding-miniaturnye-chasy-na-lampah-in-16-i-akkumulyatornym-pitaniem
только прошивка без программы, есть датчик освещения .
вот еще (все на основе Ардуино или esp32 – программы есть)
https://github.com/santosha2003/Nixie-Clock-Thermometer-Hygrometer-Arduino-Shield
https://github.com/santosha2003/cloxie_nixie_clock
https://github.com/santosha2003/Nixie-Shield-for-Arduino