Как стать автором
Обновить

Комментарии 48

В этом деле не всё так просто, потому что при смене цифр на параллельной шине будут возникать промежуточные состояния и, как следствие, могут мигать лишние сегменты (например, при переходе от 1 к 2 будет некрасиво выглядеть мигание сегмента f, если второй разряд будет не поспевать за первым и на шине будет кратковременно образовываться 0). Также и длина пути до разных сегментов разная, что не очень хорошо. Как упражнение в минимизации булевых функций описанное нормально, но в реальной жизни желательно всё-таки стробирование данных.

Как по мне — для начинающих как раз хорошо показана суть. А остальное — это уже для второго урока :)

В статье описана попытка минимизации булевых функций, и ни слова не сказано о нормальных формах, СДНФ, СКНФ и картах Карно. Куда после это статьи читать начинающему? Какая суть показана?

В тегах стоит схемотехника. Оптимизация булевых функций в ней проработана- до 5ти термов оптимизируются на картах Карно вручную матаматически строго. Где это все?

Для сегмента «а» таблица для карт Карно имеет вид
x1=0 x1=1 x1=1 x1=0
x0=0 x0=0 x0=1 x0=1
x3=0 x2=0| 1 1 1 0
x3=1 x2=0| 1 x x 1
x3=1 x2=1| x x x x
x3=0 x2=1| 0 1 1 1
где x- факультативные значения (не заданы в целевой функции, и могут быть выбраны нами по произволу)
давайте возьмем их такими:
x1=0| x1=1 x1=1 x1=0
x0=0| x0=0 x0=1 x0=1
x3=0 x2=0| 1 1 1 0
x3=1 x2=0| 1 1 1 1
x3=1 x2=1| 1 1 1 1
x3=0 x2=1| 0 1 1 1
тогда видим, что в центре у нас большой крестик, образованный пересчением столбца с X1=1 и строки с Х3=1, в котором все значения целевой функции равны 1. то есть, наша итоговая функция имеет вид X1 or X3 or Something. оставшиеся вне крестика две единички тоже можно объединить с соседними
x1=0 x1=1 x1=1 x1=0
x0=0 x0=0 x0=1 x0=1
x3=0 x2=0| 1 1 1 0
x3=1 x2=0| 1 1 1 1
x3=1 x2=1| 1 1 1 1
x3=0 x2=1| 0 1 1 1
и тогда для нашего Something получается выражение
(!x2 and !x0) or (x2 and x0)
в итоге для нашего сегмента получаем вот такую логическую функцию:
a = X1 or X3 or (!x2 and !x0) or (x2 and x0).

Вся фишка карт Карно в том, что любые две соседние ячейки отличаются только в одном терме (бите), и если в двух соседних ячейках находится одинаковое значение- то от соответствующего переменного бита ничего не зависит и он для данных значений может быть исключен. А если есть две соседних пары таких парных ячеек- то исключается еще один бит, и так далее. И для совсем одаренных можно составить трафаретики из картона, которые можно просто накладывать на таблицу истинности логической функции, и если в трафаретике видны только единички (или только нули)- то сразу видно, во что сворачивается покрытая трафаретом область. но если термов 5 или более- то уже нарисовать такую красивую карту, как в рассмотренном случае- нельзя, нужно рисовать или в трех измерениях, или раскидывать как-то, и метод становится сложно применим.
спасибо конечно, в том, что дали удостоверится в моих расщетах. Я хотел рассказать как я делал декодер, но в статью решил не включать карты Карно, решив, что стоит продолжить в следуйщей статье.

В последней схеме есть ещё место для оптимизаций. Осталось много дублированных вентилей, подключенных к одним и тем же входным линиям. Например, к линиям 0 и 1 подключено, через инверторы, три вентиля, на выходах которых сигналы, естественно, повторяются.

Не менее 11 вентилей лишние, если я правильно ошибаюсь.

3 пункт неплохо бы дополнить словами 176ид2 и CD4511

Можно еще плисину взять, или диодный сделать
Вот!
Диоды — сила.
Кто-нибудь может ответить, почему нет ни одного дешифратора/драйвера, который бы отображал шестнадцатеричные цифры после 9? Все популярные микрухи просто гасят все разряды индикатора, даже в этой статье инорируют оставшиеся 6 комбинаций. Что мешало сделать их отображение, даже если использоваться будет редко? Печально брать ПЛИС или МК для такого элементарного действия.
DM9368 была для этого, еще что-то менее известное попадалось.
Спасибо, я про такую не знал. Даже на али есть, отлично!
Для не больших индикаторов использовал 74HC595 управление кучей индикаторов через SPI.
Как вариант да, но это всегда плюсом МК идёт.
Потому что нет общепринятого способа отображения этих символов.
Как минимум, у нас был 490ИП2 — индикатор со встроенным дешифратором.


Какие ещё могут быть варианты?
С — нижними сегментами.
g как отраженная от вертикали девятка, h- тут очевидно.
НЛО прилетело и опубликовало эту надпись здесь
490ИП2 — у неё вроде вместо шестнадцатеричных символов свои особенные?
Нередко проще MAX7219 ставить. Если свыше четырех разрядов, то точно проще.
Иногда динамическая индикация не вариант, например, когда рядом радиотракт.
На экране любого смартфона индикация динамическая, и радиотракт рядом.
Вы вообще о чем? Какая связь между 800Гц MAX7219 и радиотрактом?
Или Вы индикаторы со светодиодными лампами попутали, где амплитуда напряжения на порядок больше, а ток больше в разы? Но даже здесь проблема сильно преувеличена. По крайней мере никакого влияния светодиодого освещения на качество WiFi или мобильной связи я никогда не замечал.
Способ 4. Поставить К176ИД2 / К155ПП5.
Вероятно, в их справочных листках и схема будет пооптимальнее.

А способ 2 правильнее колхозить на мосфетах, типа bs170, 2n7002.
В третьем пункте у автора указано: «стоит отметить, что уже давно выпускаются подобные микросхемы, и это будет не слишком целесообразно.»
На практике можно взять MAX7219/MAX7221 и подключить по SPI (3 провода, MISO не нужен).
Бонусом будет возможность их каскадирования, экономия места на плате и софтовая+аппаратная регулировка яркости из коробки.
Это в теории можно. А на практике — фиг их достанешь. У нас, например в наличии ни в одном магазине нет. Только под заказ. И цена что-то вроде 700-1200р. Тогда как BCD и сдвиговых регистров — полно по 5-6р за штуку.

А нет, вру MAX7219 по 280 в DIP, MAX7221 по 390.
На алиэкспрессе покупаются без проблем хоть в DIP корпусе, хоть в SOP
На алиэкспрессе за такие деньги можно их десяток заказать с бесплатной доставкой. И еще останется. Только что посмотрел. Партия из пяти штук MAX7219 с бесплатной доставкой от 110 рублей за SOP и от 134 рублей за DIP. Получается от 11 до 14 рублей за штуку.
Данная схема полностью рабочая, но в ней много повторяющихся элементов, и она будет занимать слишком много места, даже если делать отдельную интегральную схему. Поэтому ее стоит доработать.


Оптимизировать вам помогут карты Карно.
НЛО прилетело и опубликовало эту надпись здесь
а что там сравнивать? быстродействие? энергопотребление? занимаемую площадь на плате?
это просто хард-решение, которое позволяет вместо 8ми ног контроллера забрать под управлением сегментом только 4 ноги. Лет дцать назад, когда логическая часть собиралась из рассыпухи вручную- это было актуально. Сейчас на каждую такую задачу есть специализированная микросхема и с практической точки зрения такая реализация только ухудшает конечное изделие- вместо разводки десятка дорожек под запайку одной микрухи с 14ю ногами нужно разводить сотню дорожек под запайку трех десятков вентилей с пересечениями, что вдесятеро удорожает производство. Но знать и уметь- полезно, ибо гимнастика для мозгов, как жим лежа для грудака- в жизни нафиг не надо, но сайдэффекты- приятные.
НЛО прилетело и опубликовало эту надпись здесь
ну, у Вас же не было задачи минимизировать число ног, занятых светодиодами- вот Вы и обошлись без микрухи и разводки. И индикатор Ваш потреблял по 50мА на вход, а не по 300, и питание индикатора от 5В, а не от 24В. под каждую задачу- свое решение.

Статьи разряда "как сортировать пузырьком, используя индусский код", только для схемотехников. И чему они должны научить?

Ни разу не видел схемы с одним резистором «от пина 3, 8 к GND». А вот схем с восьмью резисторами видел великое множество. Автор точно «в теме»?
У тебя есть схема: источник питания -> резистор -> светодиод -> обратно в источник питания. То если ты поменяешь резистор и светодиод местами, что-то изменится? -Нет. Поэтому не вижу смысла подключать «миллионами» резисторов это все.
Оно то так, но только до тех пор пока 1 светодиод. А тут их 7. И резисторов тоже нужно 7. Иначе яркость единицы будет в 4 раза больше яркости восьмёрки.
А я наоборот, чаще встречал схемы с одним резистором, чем с восемью. Выглядит это отвратно, конечно.
Ну зачем так сложно? Проще использовать однократно программируемые ПЗУ типа К155РЕ3 в качестве дешифратора на все случаи жизни для 7-сегментных индикаторов (http://nauchebe.net/2010/05/deshifratory-na-mikrosxemax-k155rez/). Вывести на индикатор можно все, что хочешь, в том числе и символы от A до F для 16-ричного исчисления.
Есть же специализированные микросхемы давно
Тот же MAX7219 про который выше писали или TM1637/38.
Ну на крайний случай, сдвиговые регистры 495
Зачем это хардкор на россыпухе? Чтобы деменция не развивалась?
Видимо в качестве головоломки
А смысл городить такой огород?
Не проще ли воспользоваться TM1637, и небольшим кодом?
Причем, будет достаточно всего двух проводов (синхро и даты)
А я б заколхозил сдвиговый регистр. На один сегмент — один регистр.
Из плюсов: во первых можно выводить любой возможный символ, а не ограничеваться цифрами, во вторых для управления любым количеством семисегментных индикаторов (восьми, если считать ещё и точку) достаточно трёх ног микроконтроллера.

Я смог сделать за 31 NAND гейт, кто меньше?


vi segment(int x, int y, int z, int w) {
    auto G = [] (int lhs, int rhs) {
        return 1 ^ (lhs & rhs);
    };

    int xn = G(x, 1);
    int yn = G(y, 1);
    int zn = G(z, 1);
    int xz_and_n = G(x, z);
    int xy_and_n = G(x, y);
    int xn_y_or = G(yn, x);
    int xy_or = G(yn, xn);
    int xz_or = G(zn, xn);
    int zw_or = G(G(w, 1), zn);
    int yn_x_and_z_or = G(zn, xn_y_or);

    return vi{
            (G(G(xy_or, zw_or), yn_x_and_z_or)),
            (G(xy_and_n, G(G(y, z), xz_and_n))),
            (G(G(xz_or, 1), y)),
            (G(G(G(G(xz_and_n, y), xn_y_or), zw_or), yn_x_and_z_or)),
            (G(G(xn, y), xz_or)),
            (G(G(xy_and_n, G(zn, G(x, w))), xy_or)),
            (G(G(xy_and_n, zw_or), G(zn, y)))
    };
}
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории