Комментарии 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 или более- то уже нарисовать такую красивую карту, как в рассмотренном случае- нельзя, нужно рисовать или в трех измерениях, или раскидывать как-то, и метод становится сложно применим.
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 подключено, через инверторы, три вентиля, на выходах которых сигналы, естественно, повторяются.
3 пункт неплохо бы дополнить словами 176ид2 и CD4511
Можно еще плисину взять, или диодный сделать
Кто-нибудь может ответить, почему нет ни одного дешифратора/драйвера, который бы отображал шестнадцатеричные цифры после 9? Все популярные микрухи просто гасят все разряды индикатора, даже в этой статье инорируют оставшиеся 6 комбинаций. Что мешало сделать их отображение, даже если использоваться будет редко? Печально брать ПЛИС или МК для такого элементарного действия.
DM9368 была для этого, еще что-то менее известное попадалось.
Для не больших индикаторов использовал 74HC595 управление кучей индикаторов через SPI.
Потому что нет общепринятого способа отображения этих символов.
Как минимум, у нас был 490ИП2 — индикатор со встроенным дешифратором.
Как минимум, у нас был 490ИП2 — индикатор со встроенным дешифратором.
Нередко проще MAX7219 ставить. Если свыше четырех разрядов, то точно проще.
Иногда динамическая индикация не вариант, например, когда рядом радиотракт.
На экране любого смартфона индикация динамическая, и радиотракт рядом.
Вы вообще о чем? Какая связь между 800Гц MAX7219 и радиотрактом?
Или Вы индикаторы со светодиодными лампами попутали, где амплитуда напряжения на порядок больше, а ток больше в разы? Но даже здесь проблема сильно преувеличена. По крайней мере никакого влияния светодиодого освещения на качество WiFi или мобильной связи я никогда не замечал.
Вы вообще о чем? Какая связь между 800Гц MAX7219 и радиотрактом?
Или Вы индикаторы со светодиодными лампами попутали, где амплитуда напряжения на порядок больше, а ток больше в разы? Но даже здесь проблема сильно преувеличена. По крайней мере никакого влияния светодиодого освещения на качество WiFi или мобильной связи я никогда не замечал.
Способ 4. Поставить К176ИД2 / К155ПП5.
Вероятно, в их справочных листках и схема будет пооптимальнее.
А способ 2 правильнее колхозить на мосфетах, типа bs170, 2n7002.
Вероятно, в их справочных листках и схема будет пооптимальнее.
А способ 2 правильнее колхозить на мосфетах, типа bs170, 2n7002.
На практике можно взять MAX7219/MAX7221 и подключить по SPI (3 провода, MISO не нужен).
Бонусом будет возможность их каскадирования, экономия места на плате и софтовая+аппаратная регулировка яркости из коробки.
Бонусом будет возможность их каскадирования, экономия места на плате и софтовая+аппаратная регулировка яркости из коробки.
Это в теории можно. А на практике — фиг их достанешь. У нас, например в наличии ни в одном магазине нет. Только под заказ. И цена что-то вроде 700-1200р. Тогда как BCD и сдвиговых регистров — полно по 5-6р за штуку.
А нет, вру MAX7219 по 280 в DIP, MAX7221 по 390.
А нет, вру MAX7219 по 280 в DIP, MAX7221 по 390.
На алиэкспрессе покупаются без проблем хоть в DIP корпусе, хоть в SOP
На алиэкспрессе за такие деньги можно их десяток заказать с бесплатной доставкой. И еще останется. Только что посмотрел. Партия из пяти штук MAX7219 с бесплатной доставкой от 110 рублей за SOP и от 134 рублей за DIP. Получается от 11 до 14 рублей за штуку.
Данная схема полностью рабочая, но в ней много повторяющихся элементов, и она будет занимать слишком много места, даже если делать отдельную интегральную схему. Поэтому ее стоит доработать.
Оптимизировать вам помогут карты Карно.
а что там сравнивать? быстродействие? энергопотребление? занимаемую площадь на плате?
это просто хард-решение, которое позволяет вместо 8ми ног контроллера забрать под управлением сегментом только 4 ноги. Лет дцать назад, когда логическая часть собиралась из рассыпухи вручную- это было актуально. Сейчас на каждую такую задачу есть специализированная микросхема и с практической точки зрения такая реализация только ухудшает конечное изделие- вместо разводки десятка дорожек под запайку одной микрухи с 14ю ногами нужно разводить сотню дорожек под запайку трех десятков вентилей с пересечениями, что вдесятеро удорожает производство. Но знать и уметь- полезно, ибо гимнастика для мозгов, как жим лежа для грудака- в жизни нафиг не надо, но сайдэффекты- приятные.
это просто хард-решение, которое позволяет вместо 8ми ног контроллера забрать под управлением сегментом только 4 ноги. Лет дцать назад, когда логическая часть собиралась из рассыпухи вручную- это было актуально. Сейчас на каждую такую задачу есть специализированная микросхема и с практической точки зрения такая реализация только ухудшает конечное изделие- вместо разводки десятка дорожек под запайку одной микрухи с 14ю ногами нужно разводить сотню дорожек под запайку трех десятков вентилей с пересечениями, что вдесятеро удорожает производство. Но знать и уметь- полезно, ибо гимнастика для мозгов, как жим лежа для грудака- в жизни нафиг не надо, но сайдэффекты- приятные.
Статьи разряда "как сортировать пузырьком, используя индусский код", только для схемотехников. И чему они должны научить?
Ни разу не видел схемы с одним резистором «от пина 3, 8 к GND». А вот схем с восьмью резисторами видел великое множество. Автор точно «в теме»?
У тебя есть схема: источник питания -> резистор -> светодиод -> обратно в источник питания. То если ты поменяешь резистор и светодиод местами, что-то изменится? -Нет. Поэтому не вижу смысла подключать «миллионами» резисторов это все.
А я наоборот, чаще встречал схемы с одним резистором, чем с восемью. Выглядит это отвратно, конечно.
Ну зачем так сложно? Проще использовать однократно программируемые ПЗУ типа К155РЕ3 в качестве дешифратора на все случаи жизни для 7-сегментных индикаторов (http://nauchebe.net/2010/05/deshifratory-na-mikrosxemax-k155rez/). Вывести на индикатор можно все, что хочешь, в том числе и символы от A до F для 16-ричного исчисления.
А смысл городить такой огород?
Не проще ли воспользоваться TM1637, и небольшим кодом?
Причем, будет достаточно всего двух проводов (синхро и даты)
Не проще ли воспользоваться TM1637, и небольшим кодом?
Причем, будет достаточно всего двух проводов (синхро и даты)
А я б заколхозил сдвиговый регистр. На один сегмент — один регистр.
Из плюсов: во первых можно выводить любой возможный символ, а не ограничеваться цифрами, во вторых для управления любым количеством семисегментных индикаторов (восьми, если считать ещё и точку) достаточно трёх ног микроконтроллера.
Из плюсов: во первых можно выводить любой возможный символ, а не ограничеваться цифрами, во вторых для управления любым количеством семисегментных индикаторов (восьми, если считать ещё и точку) достаточно трёх ног микроконтроллера.
Еще больше (moar) декодеров семисегментных индикаторов на Хабре!
habr.com/ru/post/453544
habr.com/ru/post/548288
habr.com/ru/post/535936
habr.com/ru/post/453544
habr.com/ru/post/548288
habr.com/ru/post/535936
Я смог сделать за 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)))
};
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Декодер для 7-сегментного индикатора