| Ваш IP: 3.230.1.126 | Online(13) - гости: 9, боты: 4 | Загрузка сервера: 1.47 ::::::::::::

Четырехразрядный семисегментный индикатор (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);
  }

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

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

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

  • Радиомикрофон

    Схема радиомикрофона показана на рисунке. Радиомикрофон работает на частоте 87,9 МГц и представляет собой автогенератор с емкостной обратной связью и дополнительной емкостью С4 в индуктивной ветви (схема Клаппа). Дополнительная емкость необходима, во-первых, для развязки по постоянному току цепей питания и смещения. Во2вторых, она обеспечивает дополнительную степень свободы для получения оптимального …Подробнее...
  • HEF4051B — увеличение количества аналоговых входов Arduino

    HEF4051B — увеличение количества аналоговых входов Arduino

    ИМС HEF4051B (4051) представляет собой 8 канальный аналоговый CMOS мультиплексор/демультиплексор. HEF4051B можно применить для увеличения числа аналоговых входов Arduino, для этого будет задействован одни аналоговый вход и три цифровых входа Arduino. #include <HEF4051.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=748&download=1 HEF4051 hef(A0,2,3,4);// analog_input A0, D2,D3,D4 void setup() {  Serial.begin(9600); } void loop() {  for(byte i=0;i<8;i++){ …Подробнее...
  • Два простых УМЗЧ

    Два простых УМЗЧ

    Характеристики Номинальная чувствительность 0,35В Номинальная выходная мощность при нагрузке 4 Ом — 10Вт Диапазон воспроизводимых частот от 40 до 20000 Гц Скорость нарастания выходного напряжения 25В\мкс Коэф. нелинейных искажений по всем диапазоне 0,35% Напряжение питания 11…16В Первый каскад на VT1 работает в усилителе напряжения, а остальные VT2-VT5 образуют эмиттерный повторитель …Подробнее...
  • Однофазная мостовая схема выпрямления

    Однофазная мостовая схема выпрямления

    Схема мостового выпрямителя показана на рисунке а), которая состоит из двухобмоточного трансформатора, четырех диодов включенных по схеме моста и нагрузки выпрямителей Rн. К одной диагонали моста подключена вторичная обмотка трансформатора, к другой нагрузка. В схеме четыре диода соединены так, что напряжение вторичной обмотки трансформатора подается на нагрузку в течении одного …Подробнее...
  • Регулятор температуры воды

    Регулятор предназначен для регулировки температуры воды в аквариуме или в другой емкости в диапазоне 10-40°С. В основе уст-ва интегральный компаратор напряжения К553СА3. Эта микросхема имеет мощный выход, достаточный для подключения реле. Принцип действия схемы: На прямом входе (вывод3) компаратора создается образцовое напряжение при помощи делителя R1\R2. Это напряжение можно менять …Подробнее...