Драйвер 7-сегментного индикатора работает только от ардуины.

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Sarin, 7 фев 2013.

  1. Sarin

    Sarin Нуб

    Здравствуйте!

    Примерно месяц назад стал счастливым обладателем матрёшки-Y. собрал индикатор с двумя разрядами как описано в вики. однако не удалось соединить драйверы через mod 10. драйвер которому на вход подан данный выход всегда отображает ноль. пришлось использовать два цифровых выхода с ардуины. резет у драйверов, конечно, общий. но необходимость подключать каждый драйвер отдельно меня бы почти не печалила, если бы не куда более серьёзная проблема.

    драйвер не реагирует на сигнал от выходного регистра!

    я использую 74HC595. сейчас к нему подключён один RGB-диод и ещё два простых. все работают как надо! RGB-диод умеет даже показывать разные цвета (жёлтый, голубой) используя самописную функцию имплементирующую PWM через shiftOut :)

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

    что примечательно: если к тому же диоду подвести выход с ардуины который предназначен для дравера и с которым драйвер прекрасно работает то диод вспыхивать не будет!

    подскажите, если кто знает или может хотя бы предположить: почему драйверы ведут себя так?
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    А ресет у драйвера Вы не забыли дернуть перед выдачей импульсов?
    Без сдвигового регистра пробовали подключать? Этот пример пробовали?
    Выложите схему и код.
     
  3. Sarin

    Sarin Нуб

    Собственно по этому примеру изначально всё и собрал. данный пример как раз без сдвигового регистра.
    резет дёрнуть вроде не забыл, но если что-то в чём-то понимаю, то даже если бы забыл, то поведение индикатора отличалось бы от просто отображения цифры 0.

    код и схему пока выложить не могу, так как код нужно сначала привести к такому состоянию чтобы там была только работа с индикатором, а схемы не знаю где нарисовать можно =)
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    Есть программка Fritzing; можно на бумажке от руки и сфотать)
    Можно просто сфотать макетку Вашу, но только чтобы все хорошо было видно - что с чем соединяется...
     
  5. Sarin

    Sarin Нуб

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

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

    Megakoteyka Оракул Модератор

    А в коде затыка быть не может? Попробуйте прогнать версию кода, где есть только работа с индикаторами и больше ничего - мало ли что...
     
  7. Sarin

    Sarin Нуб

    может и в коде. подготовлю программу где есть только работа с индикаторами и покажу здесь.
     
  8. Sarin

    Sarin Нуб

    вот этот кусочек кода управляет драйверами если они подключены к ардуино напрямую
    как видите используются 2 пина: для десятков и единиц.
    код работает. на индикаторе корректно отображаются числа от 0 (как 00) до 99.

    Код (Text):
    void resetNumber()
    {
        digitalWrite(RESET_PIN, HIGH);
        digitalWrite(RESET_PIN, LOW);
    }
     
    void showNumber(int n) {
      resetNumber();
      showNumber(n / 10, 6);
      showNumber(n % 10, CLOCK_PIN);
     
    }
     
    void showNumber(int n, int pin)
    {
       
        while (n--) {
            digitalWrite(pin, HIGH);
            digitalWrite(pin, LOW);
        }
    }
    вот этот код, теоретически, должен щелкать одним из индикаторов. другой индикатор и резет по-прежнему управляются напрямую с ардуины:

    Код (Text):
    int val = 0;
     
    //...
     
    void showNumber(int n, int pin)
    {
        while (n--) {
          if (pin == CLOCK_PIN) {
            digitalWrite(pin, HIGH);
            digitalWrite(pin, LOW);
          } else {
            vBit(5, true);
            vBit(5, false);
          }
        }
    }
     
    //...
     
    void vBit(byte i, boolean bitVal) {
      if (bitVal) {
        val = val | (1 << i);
      } else {
        val = val & ( 0xFFFFFF ^ (1 << i) );
      }
      digitalWrite(LATCH_PIN, LOW);
      shiftOut(DATA_PIN, CLOCK_R_PIN, MSBFIRST, val);
      digitalWrite(LATCH_PIN, HIGH);
    }
    если вместо драйвера подключить диод, то мозно наблюдать его мерцание. хорошо заметно на удачно смазанной фотке.

    но я пока не понял как ее сюда прикрепить ))
     
  9. Megakoteyka

    Megakoteyka Оракул Модератор

    А зачем отдельно пины для десятков и единиц?
    У драйвера есть нога, которая дрыгается каждый десяток импульсов, ее нужно подключить ко входу второго драйвера, а ресеты объединить, тогда при выдаче 10 типульсов на первом индикаторе получим 0, а на втором 1 и т.д.

    Насчет сдвигового постараюсь завтра отписать, мозг уже не хочет думать...
     
  10. Sarin

    Sarin Нуб