Подключение семисегментного индикатора (1 разряд) к Arduino по SPI

Наверняка у многих валяется вот такая светодиодная панелька:

Правильное название: семисегментный индикатор

Он получил такое названия благодаря тому, что в его корпусе находится 7 сегментов — светодиодов (часто добавляют ещё 8-й — точку).

Сейчас они не актуальны. Проще LCD экран подключить, он меньше выводов занимает, да и работать с ним проще. Но иногда такие индикаторы могут быть полезен. К примеру, когда нужно отобразить лишь какую-либо цифру и ничего более. Плюс, они дешевле экранчиков.

Работать с семисегментом надо как со сборкой светодиодов (с общим катодом или анодом). Распиновку можно узнать, прозванивая ножки мультиметром. У меня получилось так: ( общий катод)

Каждый сегмент — это отдельный светодиод (красный или зелёный). Если подключаем к источнику 5V, то последовательно с каждым из них нужно подключить по резистору (150-300 ом) — чтобы не перегорели.

А соединять с Arduino я предлагаю через сдвиговый регистр 74HC595N (интерфейс SPI)

схема на BreadBoard:

Принципиальную схему не смог нарисовать в sPlan (нет 28-пиновой Atmega), так-что сделал в Fritzing:

Описание схемы:

— ноги 15,1,2,3,4.5,6,7 — это выходы регистра. Их подключаем к соответствующим ногам индикатора (A к Q0, B к Q1, C к Q3, ну и т. д.. Главное, чтобы было по порядку — тогда часть программирования будет проще)
— ноги 8 и 16 — это питание микросхемы (подключаем к GND и +5V Arduino)
— 10 ногу к +5V
— 13 ногу к GND
— Ноги 14, 12, 11 — управляющие пины шины SPI.
11 (SH_CP) — тактовая шина (clock) к 13 контакту Arduino (не принципиально)
12 (ST_CP) — защёлка (latch) к 12 контакту Arduino (не принципиально)
14 (DS) — данные (data) к 8 контакту Arduino (не принципиально)

Прошивка

Код очень простой. Мы даже не будем использовать библиотеку SPI. Посылать данные будем функцией shiftOut()

Она будет отправлять регистру 1 байт (8 бит). Каждый сегмент — это 1 бит. ( Если отправить вот такой байт: 0b10000000, то получим такую вот картину: (зажжётся первый сегмент — А)

Суть: Зажигая определённую комбинацию сегментов, мы получаем на экране цифру. Так, например, если зажечь сегменты B и С то загорится единичка. A, B, C — семёрка, и т. д..

Сам код: SevSeg1_SPI.ino

#define CLOCK 13 //SH_CP
#define DATA 12 //DS
#define LATCH 8 //ST_CP

void setup() {

//настраиваем контакты на выход
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);

//отключаем LATCH (чтобы регистр не ждал данных)
digitalWrite(LATCH, HIGH);
}

void loop() {
//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, LOW);

//посылаем данные функцией shiftOut ( http://arduino.ru/Reference/ShiftOut )
/*
Цифра | байт
0 | 0b00000000
1 | 0b01100000
2 | 0b11011010
3 | 0b11110010
4 | 0b01100110
5 | 0b10110110
6 | 0b10111110
7 | 0b11100000
8 | 0b11111110
9 | 0b11110110
*/
shiftOut(DATA, CLOCK, LSBFIRST, 0b10110110);

//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, HIGH);
}

Результат:

Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

Плата ArduinoArduino Uno1

Сдвиговый регистрCD74HC5951

Резистор100-300 Ом8

Семисегментный индикатор1
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.