Технический форум

Технический форум (http://www.tehnari.ru/)
-   Микропроцессоры (http://www.tehnari.ru/f115/)
-   -   Arduino Uno и семисегментный индикатор с общим анодом (http://www.tehnari.ru/f115/t104457/)

yozhyk 27.09.2015 12:39

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

Знаю о выводах GND, но мне нужно или подавать землю, или убирать его для отображения различных цифр, а здесь земля постоянная.

grelly 27.09.2015 13:12

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

yozhyk 27.09.2015 15:42

Цитата:

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

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

grelly 27.09.2015 17:09

Вложений: 1
Цитата:

Сообщение от yozhyk (Сообщение 1163942)
Если бы нашел, и не спрашивал бы.

плохо искал.
Вложение 241847
Цитата:

Сообщение от yozhyk (Сообщение 1163942)
Не получается подать на цифровые потенциал земли

так это программно, а не схемотехнически делается! курить азы по AVR срочно! на EasyElectronics например, там есть курс по AVR. код на ассемблере, правда, но там есть разделы о том что такое порты ввода-вывода и зачем они нужны.

Висмут 24.01.2016 05:58

Сам столкнулся с такой проблемой, думал сначала использовать транзисторы как ключи и ими включать светодиоды в семисегментнике, искал на просторах интернета решение сией проблемы, толком ничего и не нашел, варианты были через сдвиговый регистр, таким сам не располагаю пока, все решилось куда проще.
Вот программа секундомера для С.И. с общим КАТОДОМ (-)

#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);
}
}

Efraim 26.04.2016 13:11

могу ли сюда писать? :cebur:

BrooSTR 22.02.2019 08:39

С.И. с общим анодом (ELD-436GWB\S411) + arduino uno.
 
Вложений: 3
Здравствуйте! Попался под руки семисегментный индикатор(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:

Вложение 434091

Вложение 434092

Вложение 434093

BrooSTR 22.02.2019 08:46

Datasheet ELD-436GWB\S411
 
Вложений: 1
Есть, кстати, даташит на этот С.И.

Вложение 434094


Часовой пояс GMT +4, время: 22:11.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.