Светодиодный, 3-х разрядный, 7-ми сегментный, 12-ти пиновый источник головной боли

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем dnk, 27 апр 2015.

  1. dnk

    dnk Нерд

    Всем привет. Где-то с полгода назад купил ардуинку, до этого опыта с микроконтроллерами, да и с электроникой вообще, не было. По мере изучения туториалов для ардуино возникла необходимость восполнить пробелы в электронике и я приобрел себе набор "Электроника для начинающих". С этого момента у меня начались проблемы со свободным временем, конкретно залип на создании схем, с использованием таймеров и логических микросхем. В целях самообразования и создания себе лишних трудностей решил замучать светодиодный индикатор 3x7 с 12-ю ногами. И похоже не прогадал, с трудностями полный порядок.

    Теперь собственно описание проблемы.
    Имеется 1 светодиодный индикатор (3x7, общий катод), 3 десятичных счетчика CD4029BE, по одному на каждый сегмент, объединенные в каскад (т.е. все вместе считают от 0 до 999). В качестве декодера счетчиков -- одна CD4543B. Хочется красиво отображать циферки на индикаторе.
    Теоретически вроде все просто, нужно последовательно значение каждого счетчика отображать в соответствующем ему разряде индикатора с частотой более 50 Гц. Для этих целей из трех 555-х таймеров был сооружен генератор импульсов на 150 Гц (коэффициент заполнения около 85%). У генератора есть три выхода, которые поочередно выдают высокий уровень напряжения. Генератор параллельно решает две задачи: переключение разрядов и переключение счетчиков.

    Задача №1, переключение разрядов индикатора.
    Тут вроде все просто, напряжение с трех выводов генератора подается на соответствующие три транзистора BC549C, у которых коллектор подключен к катоду нужного разряда, а эмиттер уходит в землю. Соответственно в каждый тик генератора может работать только один разряд индикатора.

    Задача №2, переключение счетчиков.
    Здесь все сложнее, т.к. выключать или останавливать счетчики нельзя. Здесь я решил использовать 3 микросхемы ЛОГ.И 4x2, она же 74HC08. Идея в том, что каждый выход генератора подключен к своей микросхеме ЛОГ.И, следующим образом: сигнал с генератора идет на все входы A, а выходы счетчика на входы B. В результате, что-то отличное от лог. 0 на выходых мы можем иметь только тогда, когда у нас высокий уровень, поступающий с генератора. Т.е. в каждый тик генератора только одна микросхема ЛОГ.И может иметь на своих выводах что-то отличное от 0000.
    Далее через выпрямительные(!) диоды соответствующие выходы микросхем ЛОГ.И сливаются в 4 линии, поступающие прямиком на декодер CD4543B.

    Такая схема оказалась вполне себе работоспособна, но только на низких частотах генератора (< 5Гц). При повышении частоты в разрядах появляются "хвосты" от соседних счетчиков, а при расчетной частоте индикатор превращается в мерцающее пятно, на фоне которого бегут цифры.

    Насколько я понимаю происходящее, проблема в том, что включение разряда индикатора через транзистор происходит гораздо быстрее, чем обновляется информация в декодере индикатора. В результате я вижу остатки цифр от предыдущего счетчика. Если это так, то как я могу синхронизировать открытие транзисторов с обновлением значения счетчика в декодере? Или хотя бы приблизить их по времени.

    Есть следующие идеи:
    1) купить импульсные диоды (1N4148), сейчас стоят обычные 1N4007, в надежде ускорить прохождение сигнала до декодера;
    2) организовать задержку открытия транзисторов, либо через RC-цепочку, либо опять-таки через таймер, а может даже через логическую мс, лишь бы притормозило;
    3) поставить три декодера, по одному на разряд, дело в том, что у декодеров есть вход BLANKING и, подавая на него высокий уровень, можно выключить индикацию; При этом, становятся не нужны ЛОГ.И элементы, и диоды от счетчиков, счетчики смотрят напрямую в декодеры. Но похоже требуется один элемент ЛОГ.ИЛИ, чтобы по положительному сигналу с генератора отключать положительным сигналом два декодера. Ну и "диодный мостик" из 21-го диода (по 7 штук от каждого декодера) как-то напрягает.

    Извиняюсь за сумбур, первый раз на такую тему пишу. Хочется как-то мысли свои проверить, а то уже неделю ковыряюсь, кончаются макетки и перемычки с проводами, а индикатор все еще не работает как надо.
     
    Последнее редактирование: 27 апр 2015
  2. ANV

    ANV Гуру

    Можете схему нарисовать как сейчас все сделано?
     
  3. dnk

    dnk Нерд

    Если я попробую сегодня вечером изобразить это во Fritzing, сгодится? Опыт в рисовании схем пока близок к нулевому, поэтому решил для начала выразить все словами.
     
  4. ANV

    ANV Гуру

    Можно так, очевидные вещи типа питания и всяких enable рисовать не стал

    [​IMG]

    Если разрядов очень много, то можно мультиплексировать половинками HC244
     
    dnk нравится это.
  5. dnk

    dnk Нерд

    Мда, это тот случай, когда имеющихся знаний не хватает для того, чтобы оценить ответ. До мультиплексоров я еще не добрался. Пока завис над тем как они работают. Как я понял, смысл данной схемы в том, что за счет мультиплексоров убираются 74HC08 и диоды и декодер обновляется быстрее? А почему на мультиплексоры идут три бита, а не четыре? Ведь для числа 9 нужно 4 (1001).
     
  6. ANV

    ANV Гуру

    Конкретно этот мультиплексор подает на выход 1Y один из четырех входов 1С0-1С3. Какой подавать на выход определяется входами A и B. Он сдвоенный, т.е. еще есть выход 2Y на который подается один из 2C0-2C3

    Вашу схему я не видел, поэтому не буду утверждать что там выкидывается :)

    На мультиплексоры идут три бита потому что три разряда у индикатора. Т.е. в обозначении одна цифра с BCD счетчика - это DIG0_0, DIG0_1, DIG0_2 и DIG0_3
     
    dnk нравится это.
  7. dnk

    dnk Нерд

    Ага, понял, спасибо. Но схемку я все же попробую изобразить, жалко ее выбрасывать, так и не поняв, что с ней не так.
     
  8. ANV

    ANV Гуру

    Если будете рисовать, то только не монтажную схему, звините, но в ней я разбираться не буду :)
    Т.е. надо в таком виде как у меня, а не в виде макетки и кучи дип-корпусов с проводами. Я распиновку всей 74й серии не помню :)
     
  9. ANV

    ANV Гуру

    Кстати на половинках HC244 получается еще красивее. Счетчик "бегущая единица" и прямо с него на транзисторы и Enable у HC244
     
  10. dnk

    dnk Нерд

    Я вчера попытался нарисовать цепочку из 3-х 555-х таймеров и то ли у меня лыжи не едут, то ли Fritzing не особо годится для компактных проектов, как у Платта. Скачал KiCad, вроде не сложный инструмент оказался. В результате получилась такая схема, для упрощения не рисовал генератор импульсов и ограничился только двумя разрядами индикатора. Я надеюсь это не очень принципиально. Вместо генератора у меня две линии, CLK1 и CLK2, для простоты можно считать, что это два инвертированных по отношению друг к другу сигнала одинаковой частоты. 3x17x12-CC.png
     
  11. ANV

    ANV Гуру

    1. Уверены что clk1/2/3 не перекрываются по времени друг с другом?
    2. У декодера U5 на ноги 2, 3, 4 и 5 поставьте резисторы на землю, номинал "с потолка" где-то 1 кОм. Без них диоды "накачивают" вход высоким уровнем, а когда подается ноль, то кто их вниз тянуть будет? Вот и надо "помочь" вниз утянуть.
     
    dnk нравится это.
  12. dnk

    dnk Нерд

    1. У меня в качестве генератора три 555-х таймера в моностабильном режиме, они друг друга по очереди через конденсатор запускают. По идее не должны перекрываться.
    2. Спасибо, сегодня обязательно попробую. Что-то схема в монстра какого-то превращается :), еще неделю назад наивно предполагал, что 12-пиновый индикатор будет иметь меньше обвязки, чем 28-пиновый.
     
  13. ANV

    ANV Гуру

    Может Вы в душе ПЛИСовод, а не программист? :)
     
  14. dnk

    dnk Нерд

    Да я пока не определился. Но программирование микросхемами доставляет гораздо больше удовольствия, нежели в Arduino IDE. Сидишь тихонько перетыкаешь их в макетке, да все новые и новые перемычки нарезаешь. Есть что-то в этом медитативное. :D
     
  15. ANV

    ANV Гуру

    Я про другое. Что такое ПЛИС Вы знаете?
    Это такая магия, когда в одной микросхеме есть несоединенные между собой триггеры и логические функции. Вы схему описываете словами и получается файл с прошивкой в которой указано как их надо между собой соединить. После прошивки в одной микросхеме умещается мешок 74HC микросхем и километр монтажного провода.
     
  16. dnk

    dnk Нерд

    Нет, с ПЛИСами еще не сталкивался. Ради интереса глянул даташит на MAX7128. Я наверное не ПЛИСовод, ну пока еще. Мне как раз нравится то, что я могу что-то делать, просто имея горсть микросхем, рассыпухи и нескольких батареек. И никаких компьютеров.
     
  17. dnk

    dnk Нерд

    Поставил стягивающие резисторы и все заработало.
    IMG_20150429_022954_290.jpg
    Большущее спасибо. :)
     
  18. dnk

    dnk Нерд

    Снова прошу помощи. Потихоньку допиливаю схему, сейчас добрался до элементарной вещи -- организация сброса счетчиков во время подачи питания. Делаю вот так:

    4029-reset.png

    Номиналы резистора и кондесатора выбирал исходя из даташита, там минимальная ширина имулься PE должна быть 130 наносекунд при питании 5V. Решил взять с запасом, 220 наносекунд должно хватить. Начал с третьего счетчика (сотни). И наблюдаю такое поведение: сначала отображается 0, а в момент старта 1-го счетчика почему перекидывается в 1. То же самое происходит и со вторым (десятки). С первым проверять не стал. Ради интереса подключил все три счетчика по этой схеме, просто объединив входы PE в точке между резистором и конденсатором. И внезапно все стало работать как и полагается. Вернул все обратно на сброс только третьего счетчика -- опять прыжок с 0 до 1. Существует ли какое-нибудь объяснение этому поведению? Почему когда они втроем сбрасываются, то не прыгают? Висящих входов у счетчиков нет, все неиспользуемые заведены на землю. Сглаживающий конденсатор в контуре имеется, 100 мкФ.