Подключение 7-сегментного индикатора

orig_chernik
Offline
Зарегистрирован: 31.01.2017

Arduino NANO ATmega-168

Использую 8 и 9 цифровые выводы для управления двумя 7-сегментными индикаторами (см. схему).

Противоположные выводы управляются сдвиговым регистром HC595N.

При тестировании выяснилось, что работает только один индикатор, причем корректно.

Если подавать землю на 8 и 9 контакты без Arduino, то горят оба.

Если подавать землю на выводы регистра с подключенным Arduino, то тоже горят оба.

Соответственно корректность схемы, работоспособность Arduino, транзисторов, индикаторов, регистра гарантируется.

Однако при полной сборке индикатор на 8 ножке горит, на 9 - не горит. Как это исправить?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

С какой частотой Вы их зажигаете? Скетч для динамической индикации сами писали? Давайте его сюда.

И схему сделайте пожалуйста покрыпнее и в нормальных цветах - ничерта не видно.

orig_chernik
Offline
Зарегистрирован: 31.01.2017
int Apin = 7;
int Dmain = 13;
int Dlz = 7;
int DR = 9;
int DL = 8;
int RCLK = 11;
int SRCLK = 10;
int SER = 12;

void setup() {
  pinMode(Dmain, OUTPUT);
  pinMode(Dlz, OUTPUT);
  pinMode(DR, OUTPUT);
  pinMode(DL, OUTPUT);
  pinMode(RCLK, OUTPUT);
  pinMode(SRCLK, OUTPUT);
  pinMode(SER, OUTPUT);

  digitalWrite(SRCLK, HIGH);
  digitalWrite(SER, HIGH);
  digitalWrite(RCLK, HIGH);

  digitalWrite(DR, LOW);
  digitalWrite(DL, LOW);

  Serial.begin(9600);
}

void outReg(int ss)
{
  int mas[8] = {0};
  int i = 0;
  int s = ss;
  while(s > 0)
  {
    mas[i] = s % 2;
    s /= 2;
    i++;
  }
  digitalWrite(RCLK, LOW);
  for(i=0;i<8;i++)
  {
    digitalWrite(SER, mas[i] ? LOW : HIGH);
    digitalWrite(SRCLK, LOW);
    delay(1);
    digitalWrite(SRCLK, HIGH);
  }
  digitalWrite(RCLK, HIGH);
  delay(1);
  Serial.println(ss);
}

void loop() {
  int i;
  for(i=0;i<256;i++)
  {
    outReg(i);
    delay(500);
  }
}

Пока еще нету динамической индикации, все примитивно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Как всё это питается? Нарисуйте полную схему.

Вы пытаетесь включить две цифры одновременно, Вы понимаете, что там будет довольно большой ток? Вам точно хватает тока? Кстати, Вы в курсе, что максимальныё ток на корпус 595 регистра - 70мА?

orig_chernik
Offline
Зарегистрирован: 31.01.2017

Максимальный ток не привышает 50мА - проверено еще до сборки.

Две цифры одновременно итак не горят, и это не подразумевается.

p. s. марки на схеме совпадают только для регистра

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

orig_chernik пишет:

Две цифры одновременно итак не горят, и это не подразумевается.

Как? В строках 23-24 Вы "зажигаете" обе цифры и потом их никогда не гасите.

orig_chernik пишет:

максимальный ток не привышает 50мА - проверено еще до сборки.

И как же Вы это проверяли?

Если смотреть на сегменты, то у Вас падение напряжения на светодиоде - 2В, напряжение - 5 В, значит на резисторе падает 3В. Резистор у Вас 50 Ом. 3В/50 Ом = аж целых 60мА на сегмент!!! Кстати, Вы в курсе, что у них ограничение - 20?

Но при этом в базе транзистора у Вас 10К. Напряжение на этом резисторе 5В-0,6В-2В - итого 2,4В. Т.е. ток базы 240 мкА. При коэффициенте усиления 160 имеем ток коллектора 38 мА

Вы это имели в виду, когда говорили, что не более 50мА?

И что, Вы думаете, что 38 мА хватит. чтобы питать две цифры?

 

orig_chernik
Offline
Зарегистрирован: 31.01.2017

ЕвгенийП пишет:

Как? В строках 23-24 Вы "зажигаете" обе цифры и потом их никогда не гасите.

По отдельности

  digitalWrite(DR, LOW);
  digitalWrite(DL, HIGH);

тоже не горит (я уже пытался).

ЕвгенийП пишет:

И как же Вы это проверяли?

Тестером.

ЕвгенийП пишет:

И что, Вы думаете, что 38 мА хватит. чтобы питать две цифры?

Разве это не на одну цифру?

Меня больше волнует, что при симметричной схеме разный результат.

Проверил напряжение коллектор-эмиттер на обоих транзисторах. Оно разное:

Q1 - 1.8В, Q2 - 1.8В (при HIGH на 8, LOW на 9)

Q2 - 0.7В, Q2 - 1.8В (при HIGH на 9, LOW на 8)

Подумал, что дело в посторонних токах. Соеденил эмиттер-база Q1 500Ом резистором.

Включил. Не работает. Выключил. Убрал резистор. Включил. Заработало.

Я не знаю, что это за магия, и боюсь, что это ненадолго. Этому есть объяснение?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

orig_chernik пишет:

Разве это не на одну цифру?

Да, на одну - виноват, но всё равно это очень мало.

Поставьте в базу 1К, а к сегментам 390 ом. Посмотрите. что получится.

У Вас ещё очень заумная функция вывода в регистр, но давайте Вы поставите нормальные резисторы и если не поможет, то там посмотрим.