Инициализировать регистр 74HC595N

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3980880#p3980880"]Видим, что нигде нет колизий[/uquote]

Нет, не видим. Такие "пошаговые" описания бессмысленны, если из них не видно точных временнЫх соотношений между шагами.

А именно: в деталях, как соотносятся во времени шаги 2 и 3?

Если шаг 3 начинается "с запозданием" (то есть тогда, когда шаг 2 уже успешно отработал), то есть риск увидеть на каком-нибудь выходе 1zzz111111. Такой вариант - не устраивает.

Если же шаг 3 начинается одновременно с шагом 2, то на входе D всегда будет 1. Такой вариант - тоже не устраивает.

Именно об этом и идет речь в моем предыдущем сообщении.
Реклама
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

KorbenDallas писал(а): как соотносятся во времени шаги 2 и 3?
Шаг 2 - принимаем инфо с входа D сдвигаем вправо

Шаг 3 - разрешение выхода

Во времени они не пересекаются. Мы всегда можем запретит/разрешить выход всегда - невзирая на шаг 2

KorbenDallas писал(а):Если же шаг 3 начинается одновременно с шагом 2, то на входе D всегда будет 1
Каким образом?
KorbenDallas писал(а):Если шаг 3 начинается "с запозданием" (то есть тогда, когда шаг 2 уже успешно закончился), то есть риск увидеть на каком-нибудь выходе 1zzz111111.
???????
Прочитайте доку на 74HC595
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3980908#p3980908"]Шаг 2 - принимаем инфо с входа D сдвигаем вправо

Шаг 3 - разрешение выхода

Во времени они не пересекаются. Мы всегда можем запретит/разрешить выход всегда - невзирая на шаг 2[/uquote]

Ага. Теперь я понимаю ваш замысел. То есть короткий импульс на OE должен прийти одновременно с передним фронтом импульса "вывода данных наружу", а не одновременно с передним фронтом чтения данных c D во внутренний регистр. Эти события сдвинуты относительно друг друга на половину тактового периода (если коэффициент заполнения тактового сигнала = 50%)

Прекрасная идея.

[uquote="diplodok",url="/forum/viewtopic.php?p=3980908#p3980908"]Прочитайте доку на 74HC595[/uquote]

Читаем доку:

Данные читаются со входа SER [14] (у вас - D) во внутренний регистр сдвига. Данные читаются и сдвигаются по положительному фронту на SRCLK [11] (у вас >CK). Данные копируются из регистра сдвига в регистр хранения (который мы видим снаружи через Q0-Q7) по положительному фронту на RCLK [12] (у вас RCK).

(Далее я использую ваши обозначения выводов)

Тогда, если я правильно понял/описал ваш замысел выше, нам нужно прислать короткий положительный импульс на OE [13] одновременно с приходом положительного фронта на RCK [12]. А у вас на схеме совсем не так. У вас короткий положительный импульс на OE [13] приходит одновременно с положительным фронтом на >СK [11]. Это же совсем не то!

Если проигнорировать паразитные задержки, то у вас единица на OE [13] переведет все выводы в состояние Z. Это, благодаря pull-down резистору R1 и инвертеру UDa приведет к единице на входе D [14], которая и прочитается положительным фронтом на >СK. То есть ваша схема постоянно кормит сдвиговый регистр единицами.

Я бы предположил, что вы перепутали то ли уровни, то ли входы. Я бы предположил, что сигнал для пары C2-R3 следует брать именно с выхода U2b.

Изображение

Вполне может быть, что это я перепутал фазы, уровни или входы, но все пока выглядит так...
Вложения
2fu0114g22.png
(16.74 КБ) 670 скачиваний
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

KorbenDallas писал(а):Если проигнорировать паразитные задержки, то у вас единица на OE [13] переведет все выводы в состояние Z. Это, благодаря pull-down резистору R1 и инвертеру UDa приведет к единице на входе D [14], которая и прочитается положительным фронтом на >СK. То есть ваша схема постоянно кормит сдвиговый регистр единицами.
Состояние входа D важно ТОЛьКО ВО ВРЕМЯ НАРАСТАЮЩЕГО , ПОЛОЖИТЕЛНОГО ФРОНТА НА ВХОД СК

и т.д. и т.п.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3981080#p3981080"]Состояние входа D важно ТОЛьКО ВО ВРЕМЯ НАРАСТАЮЩЕГО , ПОЛОЖИТЕЛНОГО ФРОНТА НА ВХОД СК[/uquote]

Так об этом и речь!

Поэтому и возникает вопрос: почему вы одновременно с "НАРАСТАЮЩИМ , ПОЛОЖИТЕЛНЫМ ФРОНТОМ НА ВХОД СК" еще и посылаете "нарастающий положительный фронт" на вход OE? И тем самым "душите" значение на входе D.

И не ясно, почему вы продолжаете утверждать, что эти события якобы разнесены во времени, когда по вашей схеме сразу очевидно, что они происходят одновременно? (Особенно если, как вы сами сказали, устранить ненужные инвертеры U2c и U2d)
Реклама
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

Может поможет
Изображение

А лучше возмите лист бумаги, лучше в клетке
Нарисуйте тактового сигнала, начните с высокого уровня. На фронтах нарисуйте стрелки вверх и вниз
В левой части R, D, Сдвиг рег, ОЕ, вых рег

И начинаем рисовать
- по сигналу R - обнуляется сдвиг рег, вых рег в сост. ???????

- по падающем фр. перенос сдв-> вых, формируем D=1 => на вых 00000000, в сдвиг 00000000
- по нараст. принимаем D=1 + сдвиг вправо, устанавливаем Z, убираем Z,формируем D=0 => на вых 00000000, в сдвиг 10000000 - ОЕ работает для пред. сост.
- по падающем фр. перенос сдв-> вых, формируем D=0 => на вых 10000000, в сдвиг 10000000
и т.д.

CK и ОЕ появляются одновременно но работают на состояия разнесенных во времени на один такт. По СК принимаем D/сдвиг, а OE работает на пред состояние - на сост. вых регистра.

Рисуйте диаграмму работы - должно прояснится
Реклама
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

KorbenDallas, ТМ2 И ТМ7 РАЗНЫЕ ПО СТУКТУРЕ ЦИПКИ ХОТЯ ОБЕ И СЧИТАЮТСЯ D-TRIGER
ПО СУТИ ОНИ СИЛНО РАЗНЫЕ 1 СИНХРОНАЯ 2 нэт
У СИНХРОНИКОФ ЗАПИСЬ ПО ФРОНТУ аУ 2 ПО 1 НА C!!!
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Друг Кота
Аватара пользователя
Сообщения: 3782
Зарегистрирован: Чт янв 26, 2012 14:44:34

Сообщение El-Eng »

KorbenDallas писал(а):... заманчиво было бы использовать вход OE, от того же тактового генератора, который движет наш регистр.
Вот как-то так. Резисторы между выходами и землей не нарисованы. Начальный сброс лучше делать супервизором и желательно, чтобы сброс снимался позже появления тактовых импульсов. В принципе, можно обойтись без первого D-триггера, но могут быть состязания, приводящие к записи не одной, а двух единиц. На типы микросхем не надо обращать внимания, я взял первые попавшиеся УГО.

Изображение
Circuit.png
(6.28 КБ) 623 скачивания
Like the eyes of a cat in the black and blue...
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

diplodok писал(а):возмите лист бумаги
Примерно так.
Изображение

Синий цвет Z состояние выхода и (как следствие) неопределенное состояние входа D. Но неопределенное состояние входа D ВСЕГДА после положителного фронта такта.

Синий цвет с знаком Х - неопределенное состояние после включение.
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3981478#p3981478"]Примерно так.[/uquote]


Ну так вот же вы же сами же наглядно и проиллюстрировали проблему, о которой я дылдоню уже с десяток сообщений!

Смотрите на свой "Out reg". У вас период Z-состояния попадает куда-то в середину каждого единичного (и нулевого) импульса на выходах регистра.

Это неприемлемо. Как я ясно объяснил раньше, я хочу (образно выражаясь), чтобы в исходном глухом заборе появились небольшие щели между штакетинами. Вы же вместо того, чтобы сделать щели между штакетинами, взяли и пропилили щели в каждой штакетине посередине.

У вас на "Out reg" ясно нарисовано (если дискретизовать картинку): 1111z111 0000z000 1111z111 0000z000 ....

Меня не устраивает вот это 1111z111. Разрешается только либо z1111111, либо 1111111z. То есть "срезать" разрешается либо левый, либо правый край выходного пульса.

Добавлено after 6 minutes 42 seconds:
[uquote="diplodok",url="/forum/viewtopic.php?p=3981478#p3981478"]Синий цвет Z состояние выхода и (как следствие) неопределенное состояние входа D. Но неопределенное состояние входа D ВСЕГДА после положителного фронта такта.[/uquote]

А это откуда следует? Что дает нам эту гарантию "после"?

У вас же на картинке ясно видно, что Z-состояние начинается одновременно с восходящим фронтом CLK, то есть с моментом чтения D. Откуда следует, что на D будет корректное значение в этом время (спрашиваю я уже в десятый раз)? Вы уже несколько раз ранее повторили, что эти события "разнесены в времени". А сейчас вы сами же нарисовали картинку, где ясно видно, что они НЕ разнесены во времени, как я и утверждал все это время.

Я в недоумении.

---

P.S. Непонятно кстати, что вы вообще пытались нарисовать. Если у вас только одна линия обратной связи с нулевого разряда (как в схеме из предыдущего вашего сообщения), тогда мы на выходах получим бегущие чередующиеся нули и единицы. Именно их вы и нарисовали в "shift reg" и "Out reg". Но почему тогда на D не вас нет чередующихся нулей и единиц? И почему цифрами написаны регистры с единственной единицей в них? Что это за каша?
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

KorbenDallas писал(а):куда-то в середину каждого единичного
Для это Вы сами дали решение - берем сигнал для ОЕ после инвертора на СК. С 12 ножки 595.
KorbenDallas писал(а):Z-состояние начинается одновременно
Из доку
Изображение
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3981750#p3981750"]
KorbenDallas писал(а):куда-то в середину каждого единичного
Для это Вы сами дали решение - берем сигнал для ОЕ после инвертора на СК. С 12 ножки 595.[/uquote]

Мне удалось реализовать этот подход. Однако я столкнулся с такой проблемой: если комбинация C2-R3 берет сигнал напрямую с входа In (то есть фактически с ножки >CK, как нарисовано в вашем исходном варианте), или с выхода инвертера U2b (то есть фактически с ножки RCK, как нарисовано в моем исправленном варианте), то 74HC595 начинает необъяснимо глючить. Почему-то срывается тайминг. В частности, согласно осциллографу, передача данных из сдвигового регистра в регистр хранения, как будто начинает происходить по нисходящему фронту на RCK (!). На самом деле там, наверное, лезут какие-то помехи, которые я не смог разглядеть.

В конечном итоге я сдался, и наглухо "изолировал" пару C2-R3 от окружающего мира с обеих сторон инвертерами. То есть получилось в итоге так

Изображение

Что, конечно, громоздко. Хотя как вы сами сказали, инвертеры, U2с и U2d, возможно, не нужны, но мне хотелось посмотреть на полностью сформованный прямоугольный импульс на OE.

В таком виде все работает как надо.

В конечном итоге я, наверное, все таки остановлюсь на своем более раннем чисто цифровом решении решении с AND-вентилями на выходах. Разве что заменю индивидуальные вентили на единый восьмерной buffer с единым enable-входом. 74HC541, например.
Вложения
2fu0114g22.png
(17.38 КБ) 530 скачиваний
Мудрый кот
Сообщения: 1882
Зарегистрирован: Чт авг 10, 2017 20:57:51

Сообщение diplodok »

KorbenDallas писал(а):В таком виде все работает как надо.
Поздравляю!

Если есть в наличий 74НС4078 можно диоды убрать и заменить на 4078

Удачи Вам.
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="diplodok",url="/forum/viewtopic.php?p=3981843#p3981843"]
KorbenDallas писал(а):В таком виде все работает как надо.
Если есть в наличий 74НС4078 можно диоды убрать и заменить на 4078[/uquote]

По вашему совету раздобыл и применил 4078.

1. Реализация на основе 595 и 4078. В этой реализации все таки остается один инвертер. Ставить целый корпус ради одного инвертера не хотелось, поэтому я реализовал инвертер транзистором. Кнопка слева подключает дополнительный конденсатор слева внизу - "замедлитель тактовой частоты".

Изображение

555 включен по простой "классической" схеме, т.е. генерирует импульсы с заполнением более 50%. Но выходной буфер 540 имеет инверсный вход OE, т.е. мне для обеспечения требуемых промежутков между выходными импульсами нужен тактовый сигнал с низким заполнением. Его я, к счастью, могу просто взять с инвертера.

2. Реализация на основе 164 и 4078. Здесь инвертеров не нужно вообще. "Замедлитель тактовой частоты" - конденсатор слева внизу, подключен без кнопки.

Изображение

Так как мне по прежнему нужны узкие положительные импульсы для выходного буфера 540, а инвертеров в схеме нет, пришлось включить 555 по схеме с парой дополнительных диодов, чтобы получить "узкие" тактовые импульсы. Тактовый сигнал в этом варианте идет прямо на вход OE выходного буфера 540.

---

И просто на отвлеченную, но сильно родственную тему.

3. Реализация мультиплексора для дисплея из шести 7-мисегментных индикаторов на основе все той же зацикленной единицы. В верхнем левом углу сидит 6-разрядный "гонятель единицы по кругу" на основе 555+164+4078, построенный по принципу, предложенному diplodok. Шесть 595ых ниже используются в качестве "видеопамяти".

Изображение

В нижней трети сидит микроконтроллер, читающий время с датчика GPS и загоняющий его в "видеопамять".

Задним умом прихожу к выводу, что можно было сэкономить детали, если бы мультиплексор гонял по кругу не единицу, а ноль.
Вложения
DSC_0020_800.jpg
(189.85 КБ) 467 скачиваний
DSC_0019_800.jpg
(227.63 КБ) 471 скачивание
DSC_0018_800.jpg
(248.35 КБ) 465 скачиваний
Последний раз редактировалось KorbenDallas Пт мар 05, 2021 02:19:06, всего редактировалось 3 раза.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Сообщение ddr4 »

а 74HC595N выводит данные из регистра за один такт?
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="ddr4",url="/forum/viewtopic.php?p=3991750#p3991750"]а 74HC595N выводит данные из регистра за один такт?[/uquote]

595 перебрасывает данные из регистра сдвига в регистр хранения (т.е. фактически на выход) по переднему фронту на соотв. входе (RCLK). Когда подадите фронт на RCLK - тогда и перебросит.

Если наивно попытаться получить результат сразу и замкнуть накоротко сдвиговый тактовый вход SRCLK (ака >CK) и перебрасывающий тактовый вход RCLK, то эффект получится обратным: на выход данные будут попадать с запозданием на 1 такт. То есть RCLK обрабатывается раньше SRCLK. Поэтому для того, чтобы сдвинуть в регистр данные и как можно быстрее увидеть их на выходе, следует сделать передний фронт RCLK "немного позже" фронта SRCLK. Тогда данные попадут на выход в пределах одного такта.

В вышеприведенных схемах "как можно быстрее" не нужно, а нужно чтобы новые данные попали на выход в пределах одного такта, то есть нужно, чтобы вывод произошел еще до того, как начнется следующий сдвиг. Это критично для работы схемы. Для этого в схеме с 595 и наличествует инвертер. Тактовый сигнал идет на сдвиговый тактовый вход SRCLK, а инвертированный тактовый сигнал идет на перебрасывающий тактовый вход RCLK. В результате и сдвиг, и переброска на вывод происходят в переделах одного такта.

Разумеется, такого эффекта можно достичь и без инвертера, а каким-нибудь иным методом получения "чуть задержанного" фронта.

---

Если же заменить 595 на 164, который одноуровнев и сразу все "показывает" на выходах, то необходимость в этой возне с двумя фронтами отпадает.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Сообщение ddr4 »

глянул в документацию, действительно два регистра, в одном сохраняем и выводим для чтения МК, а в сдвиговый продолжаем писать. Хотя в случае каких-то проблем с задержками, можно поочерёдно писать в одну из таких микросхем, и сигналить медленному МК из которой считать, но если переброс из сдвига в хранение происходит быстро, за один так, то можно так не делать. С этим вроде понятно.

А единицы в сдвиг передаются разделённые нулём(низким уровнем)? Какая-то временная диаграмма там запутанная. STCP – вход «защёлкивающий» данные, у них зачем-то постоянные импульсы на защёлкивании, нужно вроде один раз защёлкнуть после заполнении 8 регистров.
Встал на лапы
Аватара пользователя
Сообщения: 93
Зарегистрирован: Пн окт 31, 2016 06:23:19

Сообщение KorbenDallas »

[uquote="ddr4",url="/forum/viewtopic.php?p=3991925#p3991925"]А единицы в сдвиг передаются разделённые нулём(низким уровнем)?[/uquote]

Не совсем понимаю вопроса. Речь идет о входе данных SER сдвигового регистра? Нет, на этом входе ничего "разделять" не нужно. Чтение входа, как я уже сказал выше, происходит по переднему фронту на тактовом входе сдвига SRCLK (я использую обозначения входов из datasheet Texas Instruments)

Так что на входе SER вы можете держать что угодно и как угодно. Разделять ничего не нужно. Но каждый раз, когда на SRCLK приходит передний фронт, 595 будет читать значение с входа SER и вдвигать его в регистр.

[uquote="ddr4",url="/forum/viewtopic.php?p=3991925#p3991925"]и выводим для чтения МК ... и сигналить медленному МК из которой считать[/uquote]

Зависит от задачи. У меня в вышеприведенных часах наоборот, МК пишет данные в регистры 595, а не читает их оттуда.

[uquote="ddr4",url="/forum/viewtopic.php?p=3991925#p3991925"]у них зачем-то постоянные импульсы на защёлкивании, нужно вроде один раз защёлкнуть после заполнении 8 регистров.[/uquote]

"Защелкиванием" (latch) обычно называют вход RCLK, то есть вход, перебрасывающий данные из регистра сдвига в регистр хранения. А дальше - опять же, зависит от задачи. Хотите видеть снаружи результат каждого битового сдвига - придется слать импульсы на RCLK постоянно. Хотите видеть снаружи только финальный результат - достаточно послать один RCLK в конце.

В моей задаче выше в регистре, который гоняет единицу по кругу, нужно видеть результат каждого битового сдвига, поэтому в варианте с 595 слать RCLK нужно постоянно.

А вот в часах, где шесть 595 используются в качестве "видеопамяти" для индикатора - там наоборот: сначала вдвигаем все 48 битов данных, а только потом один раз делаем RCLK.
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 352
Зарегистрирован: Ср дек 30, 2020 23:05:29

Сообщение ddr4 »

[uquote="KorbenDallas",url="/forum/viewtopic.php?p=3991984#p3991984"]Так что на входе SER вы можете держать что угодно и как угодно. Разделять ничего не нужно. Но каждый раз, когда на SRCLK приходит передний фронт, 595 будет читать значение с входа SER и вдвигать его в регистр.[/uquote]понял, т.е. если на вход DS(SER) подам постоянную 1-цу на время 8 тактов, а на SHCP(SRCLK) подам сигнал тактового генератора, то получу 8 регистров заполненных 1-цей. После восходящим сигналом на STCP(RCLK) перебрасываю данные в регистр хранения, получая данные доступные для чтения на портах Q0-Q7 (74HC595).
Почему-то у SN74HC595 этих портов 9 штук, 8+1 = (QA-QH) и QH', назначение которого не понятно.
Друг Кота
Аватара пользователя
Сообщения: 6643
Зарегистрирован: Чт авг 09, 2012 01:09:39
Откуда: Ливны

Сообщение korob »

ddr4 писал(а):QH', назначение которого не понятно.
Выход переноса для следующего регистра при каскадировании/увеличении разрядности (по сути последовательный выход).
Большой опыт, порой, не даёт находить/видеть нам простые и очевидные решения. :(
Всегда с уважением, Александр.
Ответить

Вернуться в «Теория»