● Проект 8: Микросхема сдвигового регистра 74НС595. Управляем матрицей из 4 разрядов, экономим выходы Arduino

Опубликовано: 23.04.2018
В этом эксперименте мы рассмотрим работу Arduino с микросхемой 74HC595 – расширителем выходов, позволяющей уменьшить количество выводов Arduino для управления 4-разрядной семисегментной матрицей.

Необходимые компоненты:

контроллер Arduino UNO R3;
плата для прототипирования;
4-разрядная семисегментная матрица;
• микросхема 74HC595;
резистор 510 Ом – 7 штук;
провода папа-папа.

Цифровых выводов Arduino Nano и UNO, а иногда даже и Arduino Mega может не хватить, если требуется управлять большим количеством выводов. В этом случае можно использовать микросхему 74HC595. Микросхема 74HC595 – восьмиразрядный сдвиговый регистр с последовательным вводом, последовательным или параллельным выводом информации, с триггером-защелкой и тремя состояниями на выходе. Назначение контактов микросхемы 74HC595 показано на рис. 8.1.
Для управления нам вполне достаточно всего лишь трех выводов: SH_CP, ST_CP и DS. Когда на тактовом входе SH_CP появляется логическая единица, регистр считывает бит со входа данных DS и записывает его в самый младший разряд. При поступлении на тактовый вход следующего импульса все повторяется, только бит, записанный ранее, сдвигается на один разряд, а его место занимает вновь пришедший бит. Когда все восемь битов заполнились, и приходит девятый тактовый импульс, регистр снова начинает заполняться с младшего разряда, и все повторяется вновь.
Чтобы данные появились на выходах Q0…Q7, нужно их ≪защелкнуть≫. Для этого необходимо подать логическую единицу на вход ST_CP. Чтобы мы ни делали с регистром, данные на выходах не изменятся, пока мы вновь не ≪защелкнем≫ их.
Вывод Q7" предназначен для последовательного (каскадного) соединения сдвиговых регистров. При таком подключении биты из первого регистра будут проталкиваться в следующий в каскаде регистр, из него – в следующий и т. д. Таким образом, каскад из двух 8-битных регистров будет работать как один 16-битный. Можно соединить сколько угодно микросхем.
В следующем эксперименте со светодиодной матрицей мы рассмотрим каскадное подключение микросхем 74HC595, в данном эксперименте мы используем только одну микросхему – восемь выводов микросхемы 74HC595 подключены к восьми сегментам матрицы, четыре вывода матрицы для выбора разряда подключены к четырем выводам платы Arduino. Схема подключения представлена на рис. 8.2.
 
Arduino проект www.arduino-kit.ru
Рис. 8.2. Схема подключения 4-разрядного семисегментного индикатора с использованием сдвиговых регистров 74HC595

Приступаем к написанию скетча запуска и останова секундомера 0–999 сек с точностью 0.1 сек. Используем библиотеку Arduino SPI. Поскольку при использовании библиотеки SPI применяются Arduino выводы 11 и 13, для выбора регистров матрицы используем выводы Arduino 4, 5, 6, 7. Содержимое скетча показано в листинге 8.1.
 
// Подключение библиотеки SPI
#include <SPI.h>
// пин SS
int pin_spi_ss=8;
// значения для вывода цифр 0-9
byte numbers[10] = { B11111100, B01100000, B11011010,
B11110010, B01100110, B10110110,B10111110, B11100000, B11111110,B11110110};
// переменная для хранения значения текущей цифры
int number=0;
int number1=0;
int number2=0;
// семисегментного индикатора
int pindigits[4]={4,5,6,7};
// переменная для хранения текущего разряда
int digit=0;
//
unsigned long millis1=0;
void setup()
{
SPI.begin();
// Сконфигурировать контакты как выходы
pinMode(pin_spi_ss,OUTPUT);
for(int i=0;i<4;i++)
{pinMode(pindigits[i],OUTPUT);
digitalWrite(pindigits[i],HIGH);
}
}
void loop()
{
if(millis()-millis1>=100)
{millis1=millis1+100;
number=number+1;
if(number==10000)
number=0;
}
number1=number;
for(int i=0;i<4;i++)
{
  number2=number1%10;
number1=number1/10;
showNumber(number2,i);
for(int j=0;j<4;j++)
digitalWrite(pindigits[j],HIGH);
digitalWrite(pindigits[i],LOW);
delay(1);
}
}
// функция вывода цифры на семисегментный индикатор
void showNumber(int num,int dig)
{
byte maska;
digitalWrite(pin_spi_ss,LOW);
if(dig==1) maska=1;
else maska=0;
SPI.transfer(numbers[num]+maska);
digitalWrite(pin_spi_ss,HIGH);
}
}

Порядок подключения:
 
1. Подключаем семисегментный индикатор по схеме на рис. 8.2.
2. Загружаем в плату Arduino скетч из листинга 8.1.
3. Нажатием кнопки запускаем или останавливаем секундомер.

Листинги программ скачать

Главное меню

Каталог

Полезные ссылки

Цена
от
до