7-сегментный индикатор

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

#1by Дим » 7 Jun 2019, 0:02

Решил сделать из синих светодиодов 7-сегментный индикатор. Для этого в этой теме буду оставлять всевозможные материалы, которые мне пригодятся в дальнейшем.

Принципиальная схема.png
Принципиальная схема
Принципиальная схема.png (5.49 KiB) Viewed 97 times


На каждом светодиоде должен быть свой резистор 220om. Общий катод соединен с GND, аноды у всех отдельные.

Общий катод соединен с GND, аноды у всех отдельные.png
Общий катод соединен с GND, аноды у всех отдельные
Общий катод соединен с GND, аноды у всех отдельные.png (4.82 KiB) Viewed 97 times


на макетной плате.png
на макетной плате
на макетной плате.png (33.69 KiB) Viewed 97 times


С помощью millis получаем число секунд, прошедших с запуска скетча, но выводим только последнюю цифру из прошедших секунд.

Code: Select all

// список выводов Arduino для подключения к разрядам a-g
// семисегментного индикатора
int pins[7]={2,3,4,5,6,7,8};
// значения для вывода цифр 0-9
byte numbers[10] = { B11111100B01100000B11011010B11110010B01100110,
B10110110B10111110B11100000B11111110B11100110};
// переменная для хранения значения текущей цифры
int number=0;
void setup()
{
// Сконфигурировать контакты как выходы
for(int i=0;i<7;i++)
pinMode(pins[i],OUTPUT);
}
void loop()
{
showNumber(number);
delay(1000);
number=(number+1)%10;
}
// функция вывода цифры на семисегментный индикатор
void showNumber(int num)
{
for(
int i=0;i<7;i++)
{
if(
bitRead(numbers[num],7-i)==HIGH// зажечь сегмент
digitalWrite(pins[i],HIGH);
else 
// потушить сегмент
digitalWrite(pins[i],LOW);
}
i love you mxIni Mysql

! ! !


Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

#2by Дим » 7 Jun 2019, 18:28

Полярность светодиода, как определить плюс и минус

Ну вот почти и готово - светодиоды моргают, но не возможно понять чего :grin: . Нужно теперь разместить их на плате как показано на первом рисунке.

phpBB [media]
i love you mxIni Mysql

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

#3by Дим » 7 Jun 2019, 22:04

7-сегментный индикатор.PNG
7-сегментный индикатор
7-сегментный индикатор.PNG (36.84 KiB) Viewed 78 times

7-сегментный индикатор на макетной плате.png
7-сегментный индикатор на макетной плате
7-сегментный индикатор на макетной плате.png (38.57 KiB) Viewed 78 times


Набросал схему на макетной плате, завтра прикуплю smd резисторов и буду ваять.
i love you mxIni Mysql

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

#4by Дим » 7 Jun 2019, 23:17

Вспомнил что у меня завалялась лента 100 штук SMD 5730 светодиодов 0.5W-150Ma. Заказал для них сотню SMD 0603 резисторов на 220om. Светить будут тускловато, но зато надолго хватит.  :hammer:

SMD 5730.png
SMD 5730
SMD 5730.png (115.72 KiB) Viewed 76 times
i love you mxIni Mysql

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

7-сегментный индикатор своими руками

#5by Дим » 8 Jun 2019, 23:01

Все спаяно, но теперь не подходят скетчи что были опубликованы ранее. Теперь буду переделывать под свой "дисплей".
Дело было в наборе байт для вывода символов. Для меня схема подключения будет следующая.

Принципиальная схема.png
схема подключения
Принципиальная схема.png (47.45 KiB) Viewed 59 times
7-сегментный индикатор.PNG
7-сегментный индикатор
7-сегментный индикатор.PNG (37.7 KiB) Viewed 58 times


Code: Select all

0b1111111

Первые два символа 0b дают понять, что речь идёт о двоичном счёте. Все нули означают, что все светодиоды будут включены.
Какая цифра за какой символ отвечает, разделены запятой

Code: Select all

0b q, f, a, b, d, c, e

Чтобы написать цифру 1 нужно зажечь b и c. Код будет таким:

Code: Select all

0b0001010

С этим скетчем горят все светодиоды.

Code: Select all

#define FIRST_SEGMENT_PIN   2
#define SEGMENT_COUNT       8


byte number0 = 0b1111111;//горят все светодиоды


void setup() {
  for (int i = 0; i < SEGMENT_COUNT; ++i)
    pinMode(+ FIRST_SEGMENT_PIN, OUTPUT);
}

void loop() {
  int mask = number0;
  // для каждого из 7 сегментов индикатора определяем:
  // должен ли он быть включён. 
  // Для этого считываем бит, соответствующий текущему
  // сегменту «i». Истина — он установлен (1), ложь — нет (0)
  for (int i = 0; i < SEGMENT_COUNT; ++i) {
    boolean enableSegment = bitRead(mask, i);
    // включаем/выключаем сегмент на основе полученного значения
    digitalWrite(+ FIRST_SEGMENT_PIN, enableSegment);
  }

Теперь напишу коды для всех цифр

Code: Select all

0b0111111, //0
0b0001010, //1
0b1011101, //2
0b1011110, //3
0b1101010, //4
0b1110110, //5
0b1110111, //6
0b0011010, //7
0b1111111, //8
0b1111110, //9          

С этим скетчем будет идти бесконечный счёт от 0 до 9.

Code: Select all

#define FIRST_SEGMENT_PIN   2
#define SEGMENT_COUNT       8

// Всего цифр 10, поэтому в массиве 10 чисел.
byte numberSegments[10] = {
0b0111111, //0
0b0001010, //1
0b1011101, //2
0b1011110, //3
0b1101010, //4
0b1110110, //5
0b1110111, //6
0b0011010, //7
0b1111111, //8
0b1111110, //9
};
 
void setup
()
{
  for (int i = 0; i < SEGMENT_COUNT; ++i)
    pinMode(+ FIRST_SEGMENT_PIN, OUTPUT);
}
 
void loop
()
{
  // определяем число, которое следует отобразить.
  //  Пусть им будет номер текущей секунды, зацикленный на десятке
  int number = (millis() / 1000) % 10;
  // получаем код из массива, в котором содержится полученная цифра
  int mask = numberSegments[number];
  // для каждого из 7 сегментов индикатора
  for (int i = 0; i < SEGMENT_COUNT; ++i) {
    // определяем: должен ли он быть включён.
    boolean enableSegment = bitRead(mask, i);
    // включаем/выключаем сегмент на основе полученного значения
    digitalWrite(+ FIRST_SEGMENT_PIN, enableSegment);
  }


phpBB [media]

_http://developer.alexanderklimov.ru/arduino/7segment_display.php
i love you mxIni Mysql

Дим M
Topic author, Администратор
Администратор
Avatar
Дим M
Topic author, Администратор
Администратор
Reputation: 74
Posts: 1197
Joined: 5 Apr 2013
With us: 6 years 2 months

#6by Дим » 9 Jun 2019, 20:21

Еще видео и картинки поделки :grin:
phpBB [media]


Для сегментов использовал плоские светодиоды, вырванные из старого двух кассетного магнитофона.
Spoiler
Семисегментный индикатор своими руками.JPG
Семисегментный индикатор своими руками
Так как загубил две штуки smd резисторов, а в магазин больше идти не хотелось, то впаял один плёночный.
Spoiler
Семисегментный индикатор своими руками 2.JPG
Семисегментный индикатор своими руками
i love you mxIni Mysql


Return to “Прочая электроника”

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest