Светодиоды: разница между общим анодом и общим катодом

В чем разница в использовании общего анода и общего катода 7-го сегмента при взаимодействии с Arduino? Как вы можете изменить код, если нам нужно добавить еще один 7-сегментный дисплей?

Как вы можете изменить код, чтобы иметь счетчик в обратном направлении (от 0 до 9)?

const int ANODE = 2;   

const int LED1 = 3;   
const int LED2 = 4;   // pin for led 2
const int LED3 = 5;   // pin for led 3
const int LED4 = 6;   // pin for led 4

// now bottom row

const int LED5 = 7;   
const int LED6 = 8;   
const int LED7 = 9;   
const int LED8 = 10;  

int DELAY = 0;        

void setup() {
  pinMode(ANODE, OUTPUT);  // common anode is obviously an output

  pinMode(LED1, OUTPUT);   // led are output for low will be on
  pinMode(LED2, OUTPUT);   // led 2 is output
  pinMode(LED3, OUTPUT);   // led 3 is output
  pinMode(LED4, OUTPUT);   // led 4 is output
  pinMode(LED5, OUTPUT);   // led 5 is output
  pinMode(LED6, OUTPUT);   // led 6 is output
  pinMode(LED7, OUTPUT);   // led 7 is output
  pinMode(LED8, OUTPUT);   // led 8 is output
}

void loop(){

  if (DELAY == 300){
    delay(100000);
  }



  digitalWrite(ANODE, HIGH); 

  digitalWrite(LED1, HIGH);   
  digitalWrite(LED2, HIGH);   
  digitalWrite(LED3, HIGH);   
  digitalWrite(LED4, HIGH); 
  digitalWrite(LED5, HIGH);   
  digitalWrite(LED6, HIGH);   
  digitalWrite(LED7, HIGH);   
  digitalWrite(LED8, HIGH);  

delay(1000);   

  digitalWrite(LED1, LOW);   
  delay(500);                
  digitalWrite(LED1, HIGH);  
  digitalWrite(LED2, LOW);   
  delay(500);                
  digitalWrite(LED2, HIGH);  
  digitalWrite(LED3, LOW);   
  delay(500);                
  digitalWrite(LED3, HIGH);  
  digitalWrite(LED4, LOW);   
  delay(500);                
  digitalWrite(LED4, HIGH);  
  digitalWrite(LED5, LOW);   
  delay(500);                
  digitalWrite(LED5, HIGH);  
  digitalWrite(LED6, LOW);   
  delay(500);                
  digitalWrite(LED6, HIGH);  
  digitalWrite(LED7, LOW);   
  delay(500);                
  digitalWrite(LED7, HIGH);  
  digitalWrite(LED8, LOW);   
  delay(500);                
  digitalWrite(LED8, HIGH);  

  delay(100);                

  DELAY = DELAY + 150;       
}

, 👍6


5 ответов


2

В принципе, вам просто нужно поменять МАКСИМУМ на МИНИМУМ, а МИНИМУМ на МАКСИМУМ.

,

-1

Вы можете легко проверить это в 123D схемах, проверьте это: https://123d.circuits.io/circuits/1019227-7-segment-circuit

Нажмите кнопку Запустить моделирование, а затем нажмите на кнопки, чтобы осветить соответствующий сегмент.

,

Я не уверен, что это вообще отвечает на вопрос., @CharlieHanson


7

7-сегмент представляет собой упакованный набор из 8 светодиодов (7 цифровых сегментов и 1 десятичная точка). Общий анод означает, что анодная (положительная) сторона всех светодиодов электрически соединена на одном выводе, и каждый катод светодиода имеет свой собственный вывод. Таким образом, включение любого конкретного сегмента будет включать в себя подачу тока от этого общего анодного (положительного) вывода к конкретному катодному (отрицательному) выводу для нужного сегмента.

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

Способ, которым вы погружаетесь на 7-сегмент, включает использование отдельного контакта для управления каждым сегментом, поэтому вы используете 8 контактов Arduino для управления дисплеем. У вас закончатся цифровые контакты, если вы попытаетесь добавить второй 7-сегмент. Есть несколько способов решить эту проблему. Один из них состоит в том, чтобы добавить драйвер из 7 сегментов, такой как CD4511. Это ограничивает вас возможностью отображения только цифровых цифр, но использует только 4 вывода Arduino на 7 сегментов.

Другой, более универсальный способ-это добавить чип последовательного ввода для параллельного вывода (например, 74HC595) для привода 7-сегментного. Для этого требуется всего два вывода от Arduino (данные и часы), и они могут быть соединены цепью, чтобы иметь несколько 7-сегментов, управляемых от тех же 2-х выводов.

,

Вот пример использования метода драйвера CD4511: https://123d.circuits.io/circuits/912097 Вот пример метода последовательного ввода-вывода (74HC595): https://123d.circuits.io/circuits/583641, @J. Brooks


2

Потратил час, пытаясь разобраться в этом, кажется, у меня есть обычные анодные светодиоды. Поэтому вам нужно подключить анод к 5 В (на arduino), затем напряжения меняются местами, поэтому используйте 255 В вместо v.

Я думаю, что общий катод будет легче понять и запрограммировать для него.

,

1

Чтобы добавить к существующим ответам:

Для arduino с [его] симметричной способностью к источнику и потоку точно такого же количества тока, то нет предпочтительного способа.

  • Grumpy_Mike на форумах Arudino

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

,