Мне понадобилась такая связка для управления ДПФ, которые я взял от одного трансивера и пытаюсь интегрировать в другой. В исходном трансивере фильтры коммутировались с помощью 74HC595D, которая в свою очередь получает управляющие сигналы от LPT-порта.
А в данный момент я хочу приспособить эти фильтры к трансиверу где управление реализовано через выходы ПЛИС, а затем по задумке автора эти сигналы идут в PIC и далее через ключи должны коммутировать фильтра.
Поэтому я решил вместо PIC взять STM и она уже будет выступать адаптером сигналов между ПЛИС и 74HC595D.
До этого момента я не проектировал ничего с использованием 595й, в готовые проекты просто запаивал не задумываясь и всё это прекрасно работало, я понимал, что данная микросхема выступает расширителем GPIO в любом МК. Но как именно это работает, я не задумывался. А тут на руках оказал плата с ДПФ, очень качественными и как раз таки они переключаются через данный сдвиговый регистр.
Общие принципы работы 74HC595D
Данный сдвиговый регистр принимает входные данные в последовательном виде, используя при этом всего три вывода, а выдает — в параллельном на восьми выводах.
Это позволяет, управлять например 8 светодиодами или реле используя три вывода микроконтроллера.
Также можно несколько регистров 74HC595 подключать последовательно, что позволит увеличить количество выводов до 16, 24, 32 или больше выводов, используя также всего 3 выход МК.
Таким образом подавая на входы SH_CP, ST_CP, DS определённые биты, мы можем включать один\несколько или все Q-выводы микросхемы 74HC595D.
После того как я разобрался с этими принципами работы сдвигового регистра, я решил написать простенькую программу под STM32F103, чтобы попробовать на практике как это работает. Сдвигового регистра под рукой не было, а из платы выпаивать не хотелось. Решил посмотреть есть ли он и stm в симуляторе Proteus. Оказалось, что есть.
Быстренько накидал схему
И взялся за написание программки под STM. В CubeMX сконфигурировал выводы МК, выставил режимы и добавил FreeRTOS. Проект сгенерировал под Keil и сделал всего один таск, который с задержкой сдвигает бит у значения, которое, затем подаётся 74HC595D.
И всё это не заработало в симуляции, хотя на dev-плате заработало. Предположил, что проблема может быть в использовании RTOS, тяжеловато это для симуляции. Убрал из проекта RTOS и всё заработало в симуляции.
Коротенькое видео этой лабораторной работы
Datasheet 74HC595D