Підключення семисегментного індикатора (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); }
Результат:
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание |
---|---|---|---|---|
Плата Arduino |
Arduino Uno
|
1 | ||
Сдвиговый регистр |
CD74HC595
|
1 | ||
Резистор | 100-300 Ом | 8 | ||
Семисегментный индикатор | 1 |
Прикрепленные файлы:
- SevSeg1_SPI.ino (1 Кб)