| Ваш IP: 3.236.132.132 | Online(35) - гости: 25, боты: 10 | Загрузка сервера: 0.5 ::::::::::::

Четырехразрядный семисегментный индикатор (Arduino)

Четырехразрядные семисегментные индикаторы рассчитаны на работу динамическом режиме (динамическая индикация), в этих индикаторах все одноименные сегменты во всех разрядах замкнуты между собой. Как правило у таких индикаторов 12 выводов: 4 вывода разрядов и 8 выводов для сегментов и запятых. Существуют две разновидности индикаторов: с общим анодом и с общим катодом.

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

Рассмотрим применение таких индикаторов совместно с платформой Arduino. Микроконтроллер должен обеспечивать непрерывную работу динамической индикации, для этого необходимо чтобы работа индикатора была синхронизирована таймером. В этом режиме на работу индикатора не будет влиять основной цикл программы.

Ниже показана схема подключения индикатора с общим катодом к плате Arduino Nano (Uno).

byte i,mass[4],pd;
int data;
 
void setup(){
  DDRD = 0B11111111; // весь порт D как OUTPUT | D0...D7
  DDRB = 0B00001111; // PB0...PB3 как OUTPUT | D8...D11
  cli(); // запретить прерывания
  /// TIMER2
  TCCR2A = 0;TCCR2B = 0; // сбросить регистры в ноль
  OCR2A = 20; // регистр сравнения
  TCCR2B |= (1 << CS22)|(1 << CS20)|(1 << WGM22);// предделитель на 1024,включить CTC режим > сброс таймера по совпадению
  TIMSK2 |= (1 << OCIE2A); // включить прерывание по совпадению таймера 
  sei(); // разрешить прерывания
}
 
void loop(){ 
  data++;
  delay(100);
  }
 
void seg(){
 ////// функция сегментов
  switch(mass[i]){ // ABCDEFGP             
    case 0: PORTD = 0b11111100|pd;break; // 0      AAAAA
    case 1: PORTD = 0b01100000|pd;break; // 1     F     B
    case 2: PORTD = 0b11011010|pd;break; // 2     F     B
    case 3: PORTD = 0b11110010|pd;break; // 3      GGGGG
    case 4: PORTD = 0b01100110|pd;break; // 4     E     C
    case 5: PORTD = 0b10110110|pd;break; // 5     E     C
    case 6: PORTD = 0b10111110|pd;break; // 6      DDDDD
    case 7: PORTD = 0b11100000|pd;break; // 7
    case 8: PORTD = 0b11111110|pd;break; // 8
    case 9: PORTD = 0b11110110|pd;break; // 9  
}}
 
void  cif(){ ///// функция разрядов
 //// int data преобразуем в массив mass[]
 mass[0]=data/1000;
 mass[1]=data/100%10;
 mass[2]=data/10%10;
 mass[3]=data%10;
 
  switch(i){ // pd - запятая 
  case 3: mass[0];PORTB = 0x01;pd=0;seg();break;
  case 2: mass[1];PORTB = 0x02;pd=0;seg();break;
  case 1: mass[2];PORTB = 0x04;pd=1;seg();break;
  case 0: mass[3];PORTB = 0x08;pd=0;seg();break;
  }i++;if(i>3){i=0;}}
 
  ISR(TIMER2_COMPA_vect){cif();} /// функция прерывания

В цикле loop() необходимо передать число int переменой data, для отображения числа на индикаторе.

Положение или наличие запятой определяется переменной pd:

  case 3: mass[0];PORTB = 0x01;pd=0;seg();break;
  case 2: mass[1];PORTB = 0x02;pd=0;seg();break;
  case 1: mass[2];PORTB = 0x04;pd=1;seg();break;// запятая в третьем разряде
  case 0: mass[3];PORTB = 0x08;pd=0;seg();break;

Этот скетч подходит для любого четырехразрядного семисегментного индикатора с общим катодом.

Для упрощения скетча я написал небольшую библиотеку LED_4x7.zip, добавлена регулировка яркости индикатора и возможность выводить различные символы.

Тестовый скетч

#include <LED4x7.h>

void setup(){
 led_timer();
}
 
void loop(){ 
  led_setInt(256,3,1,  27,-1,-1,-1); 
  // int 0...9999, положение запятой 0...3, яркость 0...10
  /* последние 4 цифры: 
  -1 не выводить
  10 пусто
  11 A
  12 b
  13 C
  14 c
  15 d
  16 E
  17 F
  18 P
  19 u
  20 U
  21 -
  22 нижнее = 
  23 верхнее = 
  24 r
  25 нижнее o
  26 верхнее o
  27 t
  */
  delay(1000);
  }

В скетче используются всего две функции, первая функция led_timer() расположена в функции setup(), а вторая led_setInt(256,3,1, 27,-1,-1,-1) расположена в цикле loop().

Пример использования функции led_setInt():

led_setInt(256,3,1, 27,-1,-1,-1) 

  • 256 — число выводимое на индикатор
  • 3 — положение запятой (0 — нет запятой)
  • 1 — яркость индикатора от 0 до 10
  • 27 — выводит знак t в старшем разряде
  • -1 — не выводить знаки

#include <LED4x7.h>
 
void setup(){
 led_timer();
}
 
void loop(){ 
  led_setInt(2400,0,3,  -1,-1,26,13); 
  delay(5000);
  }

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

Войти с помощью: 

Случайные статьи

  • Удвоитель напряжения на микросхеме NE555

    Описание. Схема простейшего удвоителя напряжения использованием микросхемы NE555 показана на рисунке. Здесь IC NE555 подключен в схеме как нестабильный мультивибратор с частотой генерации около 9KHz. Базы двух транзисторов (Q1 и Q2) подключены напрямую к выходу мультивибратора (контакт 3). При выходе сигнала из мультивибратора в первый момент Q1 будет OFF и …Подробнее...
  • Преобразователь =12В\ 220В

    Преобразователь =12В\ 220В

    Схема преобразователя состоит из 3-х узлов: задающего мультивибратора, двухтактного транзисторного ключевого усилителя и повышающего трансформатора. Мультивибратор выполнен на микросхеме D1(D1.1  D1.2). Его частота зависит от R1 C1. На выходе мультивибратора включен инвертор на D1.4 который создает противофазные сигналы поступающие на базы VT1 VT2. Затем следует двухтактный усилитель на VT3 VT4 …Подробнее...
  • Термопары

    Термопары

    Термопара (термоэлектрический преобразователь) — устройство, применяемое для измерения температуры в промышленности, научных исследованиях, медицине, в системах автоматики. Принцип действия основан на эффекте Зеебека или, иначе, термоэлектрическом эффекте. Между соединёнными проводниками имеется контактная разность потенциалов; если стыки связанных в кольцо проводников находятся при одинаковой температуре, сумма таких разностей потенциалов равна нулю. …Подробнее...
  • TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — УМЗЧ 2х6 Вт

    TDA7499 — усилитель мощности звуковой частоты (класс АВ), с выходной мощность 6 Вт на канал (стерео). Усилитель относиться к классу Hi-Fi аппаратуры. В усилителе имеются функции STANDBY и MUTE, беззвучное включение и выключение (отсутствие щелчков), защита выхода от КЗ на землю, тепловая защита и защита от перегрузки. ИМС TDA7499 может …Подробнее...
  • Логический пробник для ТТЛ и ТТЛШ

    Схема отличается высокой точностью и возможностью контроля логических уровней «1» и «0», К3 и «Не определено». При неподключенном входе пробника светится светодиод «Не определено». Резисторы R1.R4 желательно применить с допуском 1%. ОУ любые, со своими частотными коррекциями, важно только, чтобы выходной ток был не менее 15 мА и Rвх не …Подробнее...