Динамический ввод и вывод на 74HC595

Сей опус я решил посвятить динамическому вводу/выводу, но не программной его составляющей, здесь этого навалом, а железу. Скучных примеров исходников выкладывать не буду. Так вот, собственно, не нарадуюсь на элементарный и всем известный регистр 74HC595. Уже давно в моих конструкциях – он единственный из присутствующей логики, помимо самого контроллера. Вдохновившись некоторыми постами типа 3D Globe V2.0, и вспомнив, что у меня завалялись светодиодные матрицы 5х7 и решил из них сделать некое табло или часы какие-нить (ну не вставляют меня уже обычные 7-ми сегментники, прошлый век! :) ). Подумал, как же связать обработку вывода и микроконтроллер, используя минимум портов? Ответ нашел – использовать линейку из 595-ых, всего 3 управляющих провода +2 питание, итого 5! Вся прелесть в том, что у регистра есть фиксация параллельного вывода, а значит не нужно печалиться о строгом времени вывода и прочих дрожаний и смазываний изображения! Получилось вот что:



Кстати, на прыгающие шарики меня вдохновил Oss :)

Что касается вывода – все просто и понятно, но мне нужно было посадить еще 10 кнопок и, естественно, на минимум портов. Использовать аноды индикации не покатит, это уже не укладывается в 3 провода к блоку индикации. А все технические приёмы, описанные на этом сайте, какие-то уж чересчур мудрёные и неудобоваримые (использовать К155ИР13 это, простите, какой-то муветон), легче уж и вправду использовать еще один контроллер. Но мы не ищем лёгких путей! На выручку опять пришел 595! И опять 3 порта! Но на эти 3 порта можно посадить хоть 1000 кнопок! Тока наращивай регистры!

Суть в том, что пока не прошел положительный перепад на PCL(12) регистра, данные на нем будут отображаться, в независимости от того что творится на выводах SI(14) и SCL(11), а значит, что порты, управляющие этими выводами можно перевести на ввод и считывать с них состояние кнопок! Главное, перед считыванием, быстро подготовить нужную группу этик кнопок. А чтобы выходные данные регистра не мешали его программированию их нужно перевести в Z-состояние. А управлять Z-состоянием можно тем же выводом PCL, ведь он не нужен пока мы работаем с последовательным вводом данных.
Если в последовательности действий, то так:
1) Подаем низкий уровень на PCL/Z (Выводы регистра переходят в Z)
2) Переводим SI и SCL на вывод, и передаем выборку группы (лог. ноль на нужную группу)
3) Переводим SI и SCL на ввод.
4) Поднимаем PCL/Z.
5) Считываем данные с SI и SCL
6) Повторяем цикл…
Небольшое замечание – из-за того что при переводе на ввод произойдет переход с 0 на 1 (подтягивающий резистор) вывода SCL, использовать Q0 регистра нельзя, потому как произойдет сдвиг и Q0 загрузится неопределенным значением от SI (как показал опыт – всегда по разному.) Но это касается только первого регистра, в следующей секции регистров его смело можно использовать.
Вобщем, посадить на эти 3 порта можно целую клавиатуру :)
  • +8
  • 07 апреля 2011, 23:49
  • CyberCat

Комментарии (69)

RSS свернуть / развернуть
Да, 595-е это вещь! Копеечная цена + голова, и такие ништяки выходят!
Опрос кнопок порадовал. Примем на заметку.
0
Опрос кнопок — извращение какое-то. нарастить то можно, но юзабилити вызывает сомнения. и диодов много :)
0
Ну дык это же на любителя, некоторые вон 155ИР13 используют, по мну так вот это самое извращение и есть:) А при тактовой частоте 16 Мгц пробежать десяток регистров — плёвое дело.
0
Я думаю, у него есть аналог в 74-й серии. Ну и многоногий монстр все же удобнее, чем туча диодов.
Но в целом интересно.
0
Я покопался в сети, не нашел аналогов, есть еще 74HC594, у которого вместо перехода в Z состояние еще один сброс, тем самым 2 отдельных сброса последовательной секции регистров и параллельной.
А что касается диодов — так у меня в конструкции их нет :) Это я тут для порядка нарисовал их. Пяткой на кнопки нажимать я не собираюсь, а пальцы у меня достаточно прямые чтобы нажать ровно одну кнопку.
0
Плохая это идея, делать без защиты от дурака. Однажды даже сам конструктор может случайно нажать самую неудачную пару кнопок в самый неудачный момент :)
0
74HC165. Регистр в другую сторону. Защелкивает состояние выводов, после чего сдвигом загоняем данные в контроллер. 8 разрядов на корпус. Обвязка — резисторы подтяжки.
А по предложенному варианту ввода — автор изящно извернулся, но косить газоны кофемолкой можно, но не надо. 595я — для вывода.
0
Терпеть не могу резисторы-подтяжки, особенно когда их много ) Да не было у меня 165-го под рукой. А тут 14 кнопок на корпус вышло )
0
Я же и говорю — изящно! А в чем проблема с резисторами? SMD хоть в три ряда ставь, да и дешевле они, чем диоды.
0
Так диоды-то в разрыв идут, а к резюкам еще +V подводить надо )
0
резисторы дешевле.
0
У вас барыги значит деталями торгуют)))
У нас 1N4148 50 коп стоит, резисторы 1206 тоже 50 коп, 0805 — 40 коп. Разницы никакой!
0
У всех барыги торгуют :)
когда резюки нужны на подтяжку, то они порядка 10к и нужно их очень много, и тогда они берутся оптом с инетмагаза по 20коп.
0
есть резисторные спорки, у которых один вывод сразу объединен.
чипрезюки можно под микрухой впаять, и ни каких пересечений и проблем с подводом питания.
резюки можно рядом (под) с кнопкой впаять и линии +/- идут параллельно.
В разрыв воткнуть порой сложнее, ибо места больше попросит, а подтяжку можно в любом месте воткнуть.
Предложенный способ больше подходит к «Надо, а нормальных средств нет и магаз далеко».
Много кнопок говоритье надо? а скомбинировать рег вывода (или счетчик) и рег ввода на 64 кнопки (80) кнопок и 4 проводка управления? Не, я понимаю — глопость сморозил, конечно 3 проводка круче, а 4 отстой.
0
Лень :)
0
А не подумал использовать MBI5026 или SCT2026?.. Это тот-же 595 только на 16 выходов и с токовыми драйверами до 60мА, то есть одна заменяет 595 и все выходные резисторы… Да и работает лучше, и яркость стабильная-и на входах триггеры шмидта помехоустойчивости добавляют если чипов много и линия длиная…
0
MBI5026 Интересный вариант, SOP24 корпус только крупноват… Но 60мА — 90мА и не слишком завышенная цена, хорошо подойдёт для больших матриц светодиодов.
Мощность 595 мне уже как-то не хватало…
0
Ток не от 60 а от 0… резистором выставляется единый для всех выходов-очень удобно…
Я например использую их для коммутации реле без всяких ключей на выходах…
0
Это было 3 года назад. О таких зверях еще не знал, да и достать было проблематично.
0
Опрос кнопок — извращение какое-то. нарастить то можно, но юзабилити вызывает сомнения. и диодов много :)
Да, еще. диоды нужны на каждой кнопке, иначе будут ловится ложные срабатывания. так при нажатии кнодок Q1.SI и Q4.SI Q4.SCL при низком уровне на Q1 мы читаем что нажаты кнопки Q1.SI и Q1.SCL. Ну и просто при нажатии SI и SCL кномок одного вывода Q будет замыкание выводов SI и SCL даже в Z состоянии.
0
P.S.: cat добавьте перед схемой, а то смотрится ужасно на главной странице :)
0
Диоды нужны, никто не спорит…
0
крутая штука получилась
однозначно + )))))))
0
  • avatar
  • oss
  • 08 апреля 2011, 00:23
анимация смены цифр шикарная, понравилось :)
0
А по току хватает? Кристалл 74595 же не более 70мА тянет в целом и не более 25мА на ногу исходя из ДШ. Тут получается, что строки коммутируются транзистором, а столбы уже лишь ногой 595-ого. И через нее может течь ток пяти светиков, а это уже больше чем может вся микросхема в целом. Или я че то не догоняю? К тому же яркость в строке будет обратно пропорциональна числу зажженных светиков.
0
Абсолютно прав. Я поделил на секции по 6 матриц на транзистор, так нормально. А так лучше через буферные элементы, иначе будет варьироваться яркость в зависимости от числа заженных элементов. Схему я запостил с чисто ознакомительной целью. Я вообще из тех, кто сначала сляпает, а потом уж схемы рисует… Все из головы беру, даже когда печатную плату рисую )))
0
Анимацию сам напрограммировал или взял где то?
Нас чем писал программу?
0
  • avatar
  • gadz
  • 20 октября 2011, 21:16
почему примеры программ не приводите? Для начинающих как я.
0
  • avatar
  • gadz
  • 20 октября 2011, 21:17
Не привожу пример программ потому что писал на ассемблере под STM8. Если кому интересно, то могу выложить.
0
Ассемблер под STM8 интересен сам по себе, глянуть как оно (ядро STM8 т.е.) работает :)
0
А еще можно вместо регистра с тразисторами поставить TPIC6A595. и все в одном флаконе
0
  • avatar
  • kos
  • 11 января 2012, 15:50
Штука хорошая, но цена. Дешевле пары Дарлингтона купить и обыкновенные 595 сдвиговые регистры.
0
Да в этом есть правда… Но если хочется зажечь слона :-) То самое то!
0
Ну только если очень маленького :)
0
Как идея — вместо первого регистра поставить TPIC6A595
0
  • avatar
  • kos
  • 11 января 2012, 15:59
На самом деле, как я писал выше, у меня нет никаких буферных элементов, просто разделено на 3 группы по 6 анодов на транзистор, т.е. несколько каскадом транзисторов используются. И ничего, уже почти год непрерывной работы, не греется, не сгорает и т.д.))) Да, в темноте заметны перепады яркости, но это уж все зависит от степени педантизма, кому-то важно, кому-то пофиг :)
0
Я вот тут тоже решил сделать часы, хочу задействовать элементы из набора семлов от NXP с I2C. Там часы-календарь есть. Такой вопрос, как вы выводили в сдвиговые регистры информацию с одной ноги, какой алгоритм?
0
Не совсем понял вопрос, но если про 595ые регистры — то 3 ноги используется, данные, строб и защелка. Подготавливается бит данных, выводится, делается перепад на стробе, затем все повторяется пока не заполнится вся секция, после чего делается перепад на защелке и информация появляется на выводах регистров.
0
Это то понятно, какие действия в контроллере производились? Извлекается байт, потом маскируется потом вдвигаться или как?
0
Так тут вариантов куча. Я читал байт из так называемой «видеопамяти», сдвигал побитово чтобы получить значение каждого бита во флаг переноса и затем исходя из его состояния выводил 0 или 1 в порт данных.
0
А можно как нибудь подробней все это описать?
0
Могу исходник дать, только попозже.
0
Было бы неплохо.
0
Можно же аппаратным SPI воспользоваться, если есть.
0
Можно, но мне так легче было…
0
У схемоты яркость будет никакая, тем более при динамической индикации, можно впихивать большие токи, тогда нужны в столбцы нпн транзисторы или н-канальные мосфеты. Если грузить биты (байты) в столбцы то дутый цикл будет 1/кол-во строк, если грузить биты (байт) в строки то цикл будет 1/кол-во столбцов. Про токи, чтобы долбило в глаза надо следующее. Допустим имеем 10 матриц 8*8, в одном случае при цикле 1/8, надо вкачать в строки 20мА*8=160мА (в другом 1/80, 20мА*80=1600мА). У каждого способа, есть свои плюсы и минусы.
0
В моем случае вполне хватает, пришлось даже ночной режим делать, с пониженной яркостью.
0
А что за матрицы используются?
0
Кингбрайтовские TC12-11GWA
0
А что за транзисторы используются на анодаз матриц?
0
У меня КТ361 :) А так, в принципе, подойдут любые PNP.
0
Думаю, тут удобнее всего применить специально приспособленные для этого «цифровые» транзисторы, у которых нужные резисторы есть уже прямо в пузе. Их до хрена всяких разных, в своих конструкциях я использую PADT114 с разными буквенными индексами (смотря какой корпус нужен — SOT-23 или SOT-323).
0
У вас там 13 индикаторов по 5 светодиодов в столбце по 20мА потребления каждый. Получается 13*5*20 = 1300мА должен пропустить транзистор через себя. Вот смотрю я в табличку www.5v.ru/ds/trnz/kt361.htm и не понимаю, как же так! Прояснить можете?
0
Вопрос повторяется, в комментах уже обсуждалось:
Я поделил на секции по 6 матриц на транзистор, так нормально.… Схему я запостил с чисто ознакомительной целью.
Проблем не наблюдается. А вообще, выбор транзисторов сейчас велик, поэтому можнго подобрать не только по параметрам, а по размеру, цвету и т.д. :)
0
Всё равно не получается. Матриц 13, ровно на 6 это число не делится.
Даже шесть матриц по 5 светодиодов — это 30 * 20мА = 600мА, получается на порядок больше, чем может пропустить транзистор.
0
Эта схема дана как пример, чтобы было понятно о чем речь.
На данный момент у меня 4 каскада — 3 по 6 матриц + 1 по 7. Ни одного транзистора не пострадало :) И вообще, у совковых транзисторов предельные эксплуатационные данные гораздо выше номинальных.
0
Кроме того, ток через транзисторы идет со скважностью 7, так что средний ток менее 100мА.
0
Получается, обычным биполярником можно обойтись, к примеру MMBT2222 спокойно держит 600мА. Неплохо.
0
Пиковый при этом всё равно безопасным не становится.
0
Вот про безопасность пикового как раз ничего сказать нельзя, так как справочник не приводит предельно допустимый импульсный ток.
Средний — примерно в два раза превышает допустимый, это да.
0
Этот регистр на работе мы использовали в паре с tpic595 для управления светодиодной матрицей. Экспериментально установили, что 74hc целую строку засвечивать не мог без сильной просадки напражения, а tpic мог. Для него в даташите есть пиковые импульсные значения, можно прикинуть:

Pulsed source-to-drain diode anode current (see Note 3) — 1 A

NOTES: 3. Pulse duration ≤ 100 µs and duty cycle ≤ 2%.
0
А в помощь 74hc595 есть такая прекрасная вещь как ULN2803A
0
Для матрицы с длинными строками лучше направление развёртки поменять, чем такое городить.
0
Разговор шел о транзисторе.
0
А, уже вижу, что не в тему влез.
0
Могу сказать только про КТ361 — 3 года непрерывной работы, без проблем.
0
Интересно, автор сам проверял свою схему опроса кнопок?

А чтобы выходные данные регистра не мешали его программированию их нужно перевести в Z-состояние. А управлять Z-состоянием можно тем же выводом PCL, ведь он не нужен пока мы работаем с последовательным вводом данных.


Ок, но автор не учёл один нюанс. Чтобы перевести выходы в Z-состояние на OE нужно подать инвертированный сигнал PCL, поскольку у входа OE активный уровень LOW. А это в свою очередь потребует добавить в схему инвертор.

Если в последовательности действий, то так:
1) Подаем низкий уровень на PCL/Z (Выводы регистра переходят в Z)


Вот тут все будет совсем наоборот. Низкий уровень на PCL/OE согласно приведённой схеме, подключит выходы storage-регистра к выводам Q0..Q7, и затем, в зависимости от состояний кнопок, в shift-регистр попадет рандомный мусор.
0
Это было так давно… но точно помню, что все работало, ибо я больше практик, чем теоретик и не имею привычки выкладывать теоретические изыскания.
0
Очень странно, что это работало. На практике я ту схему тоже проверил, правда в протеусе… И, как ожидалось, она не работает. А с инвертором PCL на OE — работает.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.