IMG1846A.jpg

Компоненты:

  • два сдвиговых регистра 74L595 (у меня были только в DIP), 
  • 4-х разрядный динамический индикатор типа KEM-5641-BSR (Общий Анод)
  • ключевые транзисторы BC8578 (smd, SOT-32), 
  • резисторы 100 Ом (smd 1206), 1к (smd 0805).

Напряжение питания и уровни единице от 3.3 В до 5 В. Правда при питании схемы от 3.3, цифры немного тусклые (как на фотке выше, где я подал питание от Vcc на Launchpad-е) Схема:

dynled.jpg

Принцип работы разобран и расписан на многих сайтах, нo я все же скажу про назначение транзисторных ключей. При активации одного сегмента, через него должен протекать ток около 25 мА (что бы он нормально светился). 

Допустим что мы не используем ключи, и нога 15 нижнего сдвигового регистра (далее СГ) подключена просто к ноге 6 индикатора. При активации Сегмента А первого знакоместа, ток в 25 мА будет вытекать из 15-ой ножки нижнего СГ и втекать в 15ую ножку верхнего. Если одновременно активировать сегменты А и В, то ток в 50 мА будет вытекать из 15 ножки нижнего, а в 15ую и 1ую ножку верхнего втекать ток по 25 мА, не сложно посчитать что при активации всех 8и сегментов первого знакоместа ток вытекающий из  15ой ножки нижнего СГ должен быть 25 мА * 8 = 200 мА, а сдвиговый регистр такого тока не выдаст (по даташиту максимум 35 мА). Ну а если поставить транзисторы то ток этот будет вытекать уже не из ноги регистра а а из VCC, а из ноги будет вытекать мизерный ток базы. По хорошему транзисторы не помешает поставить на все восем разрядов верхнего СГ, ну и ещё кстати в схему очень легко можно добавит ещё один четырёх-разрядный индикатор.

Вышла вот такая платка:

IMG1698A.jpg

Вот так это всё выглядит после запайки:

IMG1707A.jpg

Ну и вид сверху ( Из этого вида контакты на разъеме в такой последовательности GND, LATCH,  CLOCK, DATA, VCC):

IMG1706A.jpg

Подключать можно к всяким разным отладочнып платам с помощью такого шлейфа:

IMG1714A.jpg

Для работы написал библиотечку, dyn_7seg.c и  dyn_7seg.h. Библиотек для MSP430, для переноса на другоую платформу нужно только подругому выводить на IO пины, и перенастроить таймер в соответствии с вашей архитектурой.

Для того что бы работать с библиотекой нужно, её инициализировать вызвав в начале меина функцию init_dyn_7seg(); Затем можно выводить на семисегментны индикатор функцией :

void out_7seg(uint16_t value, int8_t point_pos, uint8_t system_base);

Первый параметр значение, второй пизиция, где вывести точку (-1 если ни где), третий - основание системы счисления, например для десятичной системы 10. 

Схемы, даташиты, библиотека на С и пример для ланчпада: тут