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

Тема в разделе "Arduino & Shields", создана пользователем Arsenii, 16 сен 2012.

  1. Arsenii

    Arsenii Нуб

    Помогите, не могу разобраться как работать с индикатором и Arduino. У меня BS-A814RD. Зажигать сегменты получается но только путем подключения напрямую с +5В и земле. А как работать с индикатором и Arduino? не понимаю
     
  2. Rx

    Rx Нерд

    Здесь есть некоторая информация по подключению. Правда, 7-и сегментных индикаторов, которую, возможно, вы уже читали.
     
  3. Arsenii

    Arsenii Нуб

    В этой статье все просто там общий катод, а мне достался индикатор с общим анодом :(
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    В этом случае вы просто не сможете использовать предложенный в статье драйвер. Подключить к Arduino таки можно:

    На анод подайте 5V Arduino. Катоды, через резисторы на ~200 Ом соединяйте с управляющими цифровыми пинами. Если хотите поджечь сегмент, настройте соответствующий пин как OUTPUT LOW. Если погасить — OUTPUT HIGH.
     
    Arsenii нравится это.
  5. Arsenii

    Arsenii Нуб

    Ваш способ работает. А могу ли я управлять индикатором, через 3 пина если буду использовать сдвиговый регистр но который расширяет входы, а не выходы?
     
  6. Unixon

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

    Нет, это не будет работать. Вы можете воспользоваться драйвером для индикаторов с общим катодом, но на каждый выход нужно поставить либо инвертор с открытым коллектором, либо какой-нибудь маломощный полевой транзистор.

    Впрочем, можете воспользоваться и сдвиговым регистром с параллельным выходом, но тогда кодирование сегментов будет на совести МК и вашей программы.
     
  7. thesatellite

    thesatellite Нерд

    Значится имеется 8 сегментный индикатор и потенциометр. Может кто в курсе как схему по принципу изменения сопротивления такую чтобы когда крутишь ручку, загорались цифры от 0 до 9? Ну или на герконах. Правда не так, на схеме с герконами, а что бы по краям резисторов + и - а на герконы A0
     

    Вложения:

  8. Unixon

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

    Резисторы нужно на каждый сегмент ставить, а не один резистор на общий анод/катод.
     
    REm нравится это.
  9. thesatellite

    thesatellite Нерд

    Это я в курсе. Мне не это интересно. Там верхний контакт где герконы подходят на разрыв (прилагаю новое приложение). Смысл я описал что я хочу. Что при определенном условии (сопротивлении цепи на A0) загораются определенный сегменты (1.2.3.4.5.6.7.8.9.0) как то так.
     

    Вложения:

    • IMAG0182.jpg
      IMAG0182.jpg
      Размер файла:
      484,7 КБ
      Просмотров:
      2.409
  10. mcureenab

    mcureenab Гуру

    Герконы по одному срабатывают?

    Код (C++):
    int u = analogRead(A0);
    if(u < 100){
    // do 1
    } else if(u < 200) {
    // do 2
    } else if(u < 300)
    т .д.
    else {
    // do N
    };
    Пороги 100 , 200, 300 сами подберете исходя их характеристик цепи.
    Порог должен находится строго на середине между u от геркона i и u от геркона i + 1.
     
    Последнее редактирование: 15 фев 2017
  11. thesatellite

    thesatellite Нерд

    Спасибо огромное, сейчас попробую
     
  12. thesatellite

    thesatellite Нерд

    Типа такого?
     

    Вложения:

  13. mcureenab

    mcureenab Гуру

    Да.
    И видимо когда-то надо отключать диоды.
    У меня закрался в код ошибочный then, у вас if( перед int u...

    После if() аккуратнее с фигурным скобками. Одину операцию в скобки можно не брать. Но по холоду количество операций может увеличиться. А про скобки легко забыть.
     
  14. thesatellite

    thesatellite Нерд

    Все загораются и всё, тупо горят. Всё равно спасибо. Надо учиться, учиться и учиться миру логики)
     
  15. mcureenab

    mcureenab Гуру

    Так они у вас нигде не выключаются. Может быть надо гасить остальные, когда новый включился?
     
  16. mcureenab

    mcureenab Гуру

    Ешё. По схеме, когда все герконы разомкнуты вход A0 висит в воздухе и ловит помехи. Его надо притянуть резистором к 0 или Vcc.

    [​IMG]
     
  17. thesatellite

    thesatellite Нерд

    Доперло бро.
    void setup() {
    pinMode(A0, INPUT);
    pinMode(6, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(12, OUTPUT);
    }
    void loop()
    {
    if(analogRead(A0) <= 100)
    {
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    }
    else
    {
    digitalWrite(6, LOW);
    digitalWrite(7, LOW);
    }
    }

    Как теперь это в команде switch прописать, что бы не громоздить.
     
  18. thesatellite

    thesatellite Нерд

    Нет, я лоханулся))) Надо теперь как то сделать от и до
     
  19. mcureenab

    mcureenab Гуру


    switch только на равенство работает.
    Можно пороги загнать в массив. в цикле искать нужный порог, а затем делать switch по индексу порога.
    Для больших массивов есть функции быстрого поиска. Но тут маленький массив.
     
  20. thesatellite

    thesatellite Нерд

    Понятно. Можно в принципе на ровные числа, замерить сопротивление резистора и путем подбора построить там 101, 201, там 305 и тп... Так можно в принципе. А вот если как то функцией map реализовать? реально?