1. У нас есть сдвиговый регистр 74HC595N. Этот регистр зациклен сам на себя, то есть по сигналу тактового генератора гоняет по кругу некий 8-битный набор. 2. В качестве тактового генератора используется генератор прямоугольных импульсов на базе 555 таймера.
Теоретически битовый набор в регистре может быть любым. Но хотелось бы чтобы при подаче питания значение в регистре инициализировалось одинокой единицей. То есть чтобы "по умолчанию" после включения питания регистр сразу начинал гонять по кругу одинокую единицу.
Как проще всего сделать такую инициализацию для 74HC595N?
Проще всего взять МК и выкинуть регистр, будут схема проще и на одной детале. А то бы все уже сделали такую штуковину чтоб 1307 заставить секундным генератором вроде ИЕ5 и ставили бы в часики на рассыпуху. Но чтото пока никто не смог, и все собирают на МК.
Деталюшек надо не меньше чем логики в самом 595. Подтянуть входы к нулю что уже не правильно. И сделать логику установки единицы с последующей записью и рабочим режимом, и логику отвязки что регистр продолжить работать как обычный, отключающий первый костыль до отключения питания
595й для таких целей не подходит. Для предварительной инициализации произвольным кодом нужен комбинированный регистр с возможностью параллельной записи данных. что-то похожее на К176ИР6 (IW4034B http://tec.org.ru/_bd/35/3572_IW4034Be.pdf ). Но там на "рассыпухе" придется потрудиться с автоматом управления (или МК ставить).
некогда делал автмат светоэфектоф на 74хх175 куча редимоф была
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Но хотелось бы чтобы при подаче питания значение в регистре инициализировалось одинокой единицей. То есть чтобы "по умолчанию" после включения питания регистр сразу начинал гонять по кругу одинокую единицу.
Как проще всего сделать такую инициализацию для 74HC595N?
Недостаток этой ПРОСТЕЙШЕЙ схемы - необходимость подбора параметров цепочки R4 C2 в зависимости от частоты, вырабатываемой 555 таймером- если длительность "установочного импульса" будет малой- то ничего не побежит, а, если большой- то побежит две звёздочки, или три звёздочки.. Лучше всего, конечно, пять звёздочек.... Спойлер
Недостаток этой ПРОСТЕЙШЕЙ схемы - необходимость подбора параметров цепочки R4 C2 в зависимости от частоты, вырабатываемой 555 таймером- если длительность "установочного импульса" будет малой- то ничего не побежит, а, если большой- то побежит две звёздочки, или три звёздочки.. Лучше всего, конечно, пять звёздочек....
Я соорудил нечто более навороченное с теми же недостатками
Для начала я собрал комбинацию из двух резисторов, двух конденсаторов и диода для генерации аналогового V-образного сигнала, который проваливается ниже 1/3 Vcc, как показано здесь.
Эта аналоговая "галочка" идет на входы двух 555, сконфигурированных в одновибраторы: короткий импульс и длинный импульс. Выход первого одновибратора (короткий) через инвертер подается на вход SRCLR регистра - это начальная очистка регистра после включения питания.
Второй одновибратор (длинный) генерирует более длительный импульс, который подается на вход данных SER регистра. Этот импульс должен призван "накрыть" ровно один положительный фронт тактового генератора (после отработки очистки) - это будет наша единственная входящая единица.
После подбора номиналов получаем
- Аналоговый V-образный сигнал - Выход 555, обеспечивающего SRCLR (до инвертера) - Выход 555, обеспечивающего единицу на SER - Выход 555, генерирующего тактовые импульсы для регистра
Как видите, малиновый SER импульс накрывает только один фронт синих тактовых импульсов после отработки голубого SRCLR импульса. Хотя надо сделать малиновый покороче, ибо может накрыть и два.
Все это, конечно, громоздко и шатко-валко. И не работает, пока конденсаторы не разрядятся после отключения питания. Но тем не менее...
Работает отлично! С тем только незначительным замечанием, что каждый цикл "по 8" она пропускает один такт: проводит его в полностью выключенном состоянии. То есть если частота тактового генератора равна 72Гц, то каждый диод будет мерцать с частотой 8 Гц, а не 9 Гц.
Однако если на D завести данные как с инвертера, так и с RQ7 через диоды (добавив на D pull-down резистор), то эффект пропущенного такта исчезнет.
Последний раз редактировалось KorbenDallas Пт фев 12, 2021 23:31:24, всего редактировалось 3 раз(а).
Странно. Z состояние должно получаться только при подаче 1 на вх. ОЕ. ????
А при чем здесь Z состояние?
Ваша схема изначально не использует выход переноса RQ7. Вместо этого она ждет, пока все выходы погаснут, и в ответ снова генерирует единицу на входе D. Именно это и требует один такт "темноты" на всех входах в конце каждого "пробега". То есть, образно выражаясь, ваша схема не гоняет одну и ту же единицу по кругу, а прогоняет единицу через все разряды, а затем "рожает" совершенно новую единицу на входе D с другой стороны
Если же аккуратно зациклить RQ7 на D, то тогда единицу ваш инвертер будет генерировать только один раз: на этапе инициализации. А далее уже она сама будет вечно бегать по кругу, без этапа "темноты".
Сколько диода Вы соединили к выходами 7 или 8? Логика такая - если на каком-то выходе (Q0-Q6) есть 1 то на входе D присуствует 0 Если на все с Q0 до Q6 есть 0 то на входе Д - 1. Mы выход Q7 не обхватываем цепью ОС
Сколько диода Вы соединили к выходами 7 или 8? Логика такая - если на каком-то выходе (Q0-Q6) есть 1 то на входе D присуствует 0 Если на все с Q0 до Q6 есть 0 то на входе Д - 1. Mы выход Q7 не обхватываем цепью ОС
А, вот оно что! Этот момент я не разглядел в вашей схеме. Да, конечно, если Q7 исключить из ОС, то фактически мы получим "генератор переноса на один такт раньше". Тогда действительно "темный" такт пропадет.
Я, видимо, неправильно выразился терминологически. Под "полностью выключенным состоянием" я имел в виду состояние Q0=Q1=...=Q7=0, то есть логические нули на всех Q-выходах, а не состояние hi-Z на всех выходах.
Конечно, состояние hi-Z можно получить только единицей на OE, но я вел речь не об этом.
У 595 нет вывода обнуления содержимого (ни для накопительной части ни для сдвигового регистра). Там единственно возможное решение Z-состояние до первой загрузки последовательного регистра и последующей перезаписи содержимого в параллельный. А это уже на простой логике делать сложно - надо дать серию тактовых импульсов при 0 на входе, затем один для перезаписи содержимого. Это уже счетчики, дешифраторы, схемы совпадения, дополнительная шина начального сброса при подаче питания. Вобщем - сделать можно... особо в учебных целях хорошая практика. Однако городушка минимум в десяток корпусов будет.
Всем прекрасна реализация diplodok, но.. Но вот захотелось мне теперь, чтобы выходные импульсы на восьми выходах в совокупности не сливались в "сплошной забор", а оставляли относительно небольшие промежутки между "штакетинами". Надеюсь, понятно, что я имею в виду. То есть после исчезновения логической 1 на выходе Q0 логическая 1 на выходе Q1 должна появляться не сразу, а по прошествии какого-то короткого времени. То есть, скажем, 90% времени на одном из выходов присутствует логическая 1, а 10% времени все выходы равны 0.
Тут заманчиво было бы использовать вход OE, от того же тактового генератора, который движет наш регистр. Сделать коэффициент заполнения на тактовом генераторе 90%, получить с инвертера коэффициент заполнения 10% и пустить этот сигнал на OE. Но в реализации diplodok такой номер не пройдет по очевидным причинам: как только все выходы падают в 0, срабатывает диодный "детектор нулей" и запускает на вход регистра очередную единицу. А это нас совершенно не устраивает...
Очевидное альтернативное решение: реализовать все в самый последний момент перед выходом, то есть пропустить все выходы через ANDы или NANDы, которые будут глушить все выходы по сигналу с того же тактового генератора. Но для этого понадобятся 8 дополнительных логических вентилей и разводка для них. Громоздко...
Более остроумный вариант: посылаем единицу на OE и одновременно подавляем единицу с диодного детектора нулей... Понадобится один дополнительный вентиль... Надо попробовать. Тут, наверное, запросто можно влететь в проблемы с таймингом. Нет, не пойдет. Оно ведь будет давить и ту единицу, которая нам нужна... Ужос.
Добавлено after 2 hours 10 minutes 26 seconds: Лобовой вариант с восемью дополнительными вентилями AND на выходе дает желаемый результат
Тут заманчиво было бы использовать вход OE, ..... . Но в реализации diplodok такой номер не пройдет по очевидным причинам: как только все выходы падают в 0, срабатывает диодный "детектор нулей" и запускает на вход регистра очередную единицу. А это нас совершенно не устраивает...
Состояние на вход D регистра важно только в момент положителного фронта на вход CK - такт сдвиг. регистра. Таким образом если после фронта пустим на вход ОЕ короткий импульс то выходы "уйдут" в Z.
Добавлено C2, R3. U2c, U2d - они формируют короткая 1 на вход ОЕ.
Опасность в тем, что выходы переключаются в Z состояния. Отсюда следует - последующие каскады должны оберегать себе от неподключенных входов. В идеале - каждый выход (Q0-Q6) должен быть притянуть к земле сопр. 10-100К
PS: Можно отказаться от U2c, U2d. На вход ОЕ есть инвертор.
Состояние на вход D регистра важно только в момент положителного фронта на вход CK - такт сдвиг. регистра. Таким образом если после фронта пустим на вход ОЕ короткий импульс то выходы "уйдут" в Z.
Так а что в этой схеме обеспечивает то, чтобы импульс на OE пришел после фронта? Откуда возьмется "после"? Задержка инвертерами?
И если импульс на OE действительно придет после фронта, то где гарантия, что состояние Z не "разрубит" уже присутствующую единицу на одном из выходов на манер: 1zzz1111111?
Как работает схема: 1. при включение C1R2 обнуляют регистр - на вход D появляется 1 - с условием - читай ниже
2. Tакт (восходящий фронт) "принимает" инфо с входа D и сдвигает содер. вправо 3. На вход ОЕ появляется короткая 1. Выход в Z. 4. заканчиваем такт (падающий фронт) - перебрасываем инфо с сдвигового регистра в выходного регистра. 5. Формируется сигнал для входа D 6.повторяем с пункта 2
Видим, что нигде нет колизий
Таким образом мое выражение "после фронта" не имеет смысла - извини.
Но (усмотрел другое): После пункта 1 на выходе мы может получить что угодно (0 или 1). Мы обнуляем только сдвиг. регистра, но не и вых регистра. Таким образом состояние 10000000 можно не получится после первого такта. Макс время установки (в 10000000) будет 2 такта.
PS: Желателно чтобы тактовый начинался с падающий (отриц) фронт - переброска с сдвиг рег в вых. рег. Тогда все будет как надо.
Сейчас этот форум просматривают: Popesych и гости: 18
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения