• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Arduino Uno и семисегментный индикатор с общим анодом

  • Автор темы Автор темы yozhyk
  • Дата начала Дата начала

yozhyk

Ученик
Регистрация
27 Сен 2015
Сообщения
2
Реакции
0
Баллы
0
Arduino Uno и семисегментный индикатор с общим анодом

Помогите новичку. Есть Arduino Uno и семисегментный индикатор с общим анодом (то есть общий +, если ошибся с наименованием). На плате 6 аналоговых выводов, на которые могу подать потенциал земли чтобы светились светодиоды. А вот седьмой светодиод остается незадействованным. Можно ли подать потенциал земли на остальные выводы?

Знаю о выводах GND, но мне нужно или подавать землю, или убирать его для отображения различных цифр, а здесь земля постоянная.
 
это не совсем аналоговые выводы, это входы АЦП, подключайся на цифровые.
гугл в помощь: "arduino uno подключение семисегментного индикатора"
 
это не совсем аналоговые выводы, это входы АЦП, подключайся на цифровые.
гугл в помощь: "arduino uno подключение семисегментного индикатора"

Если бы нашел, и не спрашивал бы. Не получается подать на цифровые потенциал земли. В поиске только варианты подключения сегментного индикатора с общим катодом. Видел еще что-то с использованием драйверов, но такими не располагаю.
 
Если бы нашел, и не спрашивал бы.
плохо искал.
7_seg.webp
Не получается подать на цифровые потенциал земли
так это программно, а не схемотехнически делается! курить азы по AVR срочно! на EasyElectronics например, там есть курс по AVR. код на ассемблере, правда, но там есть разделы о том что такое порты ввода-вывода и зачем они нужны.
 
Сам столкнулся с такой проблемой, думал сначала использовать транзисторы как ключи и ими включать светодиоды в семисегментнике, искал на просторах интернета решение сией проблемы, толком ничего и не нашел, варианты были через сдвиговый регистр, таким сам не располагаю пока, все решилось куда проще.
Вот программа секундомера для С.И. с общим КАТОДОМ (-)

#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 7
byte numberSegments[10] = {
0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010,
0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110,
};
void setup()
{
for (int i = 0; i < SEGMENT_COUNT; ++i)
pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
}
void loop()
{
int number = (millis() / 1000) % 10;
int mask = numberSegments[number];
for (int i = 0; i < SEGMENT_COUNT; ++i) {
boolean enableSegment = bitRead(mask, i);
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}
в случае когда С.И. с общим анодом, все следует подключать аналогичным образом, но подсоединяем не к земле общий анод, а к 13му пину, к примеру, в программе прописываем #define LED_PIN 13 3й строчкой, в void setup () добавляем pinMode(LED_PIN, OUTPUT); и в void loop() digitalWrite(13, HIGH); и самое главное теперь, меняем цифры в комбинациях сегментов на противоположные значения, получилось так {
0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101,
0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001,}

в итоге программа выглядит так:

#define FIRST_SEGMENT_PIN 2
#define SEGMENT_COUNT 7
#define LED_PIN 13
byte numberSegments[10] = {
0b01000000, 0b01110101, 0b00100010, 0b00100001, 0b00010101,
0b00001001, 0b00001000, 0b01100101, 0b00000000, 0b00000001,
};

void setup()
{
for (int i = 0; i < SEGMENT_COUNT; ++i)
pinMode(i + FIRST_SEGMENT_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
int number = (millis() / 1000) % 10;
int mask = numberSegments[number];
for (int i = 0; i < SEGMENT_COUNT; ++i) {
boolean enableSegment = bitRead(mask, i);
digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment);
}
}
 
могу ли сюда писать? :cebur:
 
С.И. с общим анодом (ELD-436GWB\S411) + arduino uno.

Здравствуйте! Попался под руки семисегментный индикатор(ELD-436GWB\S411) от стиралки, с общим анодом. Подключил его одну секцию к портам arduino uno через резистор 330 Ом:
A-2; B-3; C-4; D-5; E-6; F-7; G-8; Общ.Анод-13.
И по совету Висмута написал код (перебирает числа)
Задержка delay задаёт интервал перебора.
Код громоздкий, но для понимания, думаю, самое то...
И ещё, в моём случае при такой конфигурации максимальный ток потребляет около 35 мА, что не совсем полезно ардуине, так что расчеты производите по своим данным.
Код:
#define Aa 2
#define Bb 3
#define Cc 4
#define Dd 5
#define Ee 6
#define Ff 7
#define Gg 8

int zn;
int i;
void setup() {
  for(i=0; i<8; i++) {
    pinMode(i+1, OUTPUT);
  }
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH);
  zn = -1;
}

void loop() {
  for(;;) {
    
  zn++;
  if(zn > 9) {
    zn = 0;
  }
  switch (zn) {
    case 0: 
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 0); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 1);
      break;
    case 1: 
//      Aa=1; Bb=0; Cc=0; Dd=1; Ee=1; Ff=1; Gg=1;
      digitalWrite(Aa, 1); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 1); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 1); 
      digitalWrite(Gg, 1);
      
      break;
    case 2: 
//      Aa=0; Bb=0; Cc=1; Dd=0; Ee=0; Ff=1; Gg=0;
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 1); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 0); 
      digitalWrite(Ff, 1); 
      digitalWrite(Gg, 0);
        
      break;
    case 3: 
//      Aa=0; Bb=0; Cc=0; Dd=0; Ee=1; Ff=1; Gg=0;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 1); 
      digitalWrite(Gg, 0);
        
      break;
    case 4: 
//      Aa=1; Bb=0; Cc=0; Dd=1; Ee=1; Ff=0; Gg=0;
      
      digitalWrite(Aa, 1); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 1); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 0);
        
      break;
    case 5: 
//      Aa=0; Bb=1; Cc=0; Dd=0; Ee=1; Ff=0; Gg=0;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 1); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 0);
        
      break;
    case 6: 
//      Aa=0; Bb=1; Cc=0; Dd=0; Ee=0; Ff=0; Gg=0;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 1); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 0); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 0);
        
      break;
    case 7: 
//      Aa=0; Bb=0; Cc=0; Dd=1; Ee=1; Ff=1; Gg=1;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 1); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 1); 
      digitalWrite(Gg, 1);
        
      break;
    case 8: 
//      Aa=0; Bb=0; Cc=0; Dd=0; Ee=0; Ff=0; Gg=0;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 0); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 0);

      break;
    case 9: 
//      Aa=0; Bb=0; Cc=0; Dd=0; Ee=1; Ff=0; Gg=0;
      
      digitalWrite(Aa, 0); 
      digitalWrite(Bb, 0); 
      digitalWrite(Cc, 0); 
      digitalWrite(Dd, 0); 
      digitalWrite(Ee, 1); 
      digitalWrite(Ff, 0); 
      digitalWrite(Gg, 0);

      break;

  }
delay(2000);
 }  
  
}

:rob::rob::rob:

IMG_20190222_084444.webp

IMG_20190222_084611.webp

IMG_20190222_085435.webp
 
Назад
Сверху