74HC595 для 328/168 через его SPI

Пользовательские блоки для подключения различных микросхем в Ардуино, таких как АЦП, ЦАП, расширители входов-выходов и прочие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
lfgjikjjyj
Лейтенант
Сообщения: 379
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 94 раза

74HC595 для 328/168 через его SPI

Сообщение lfgjikjjyj »

для версии 7,5,2

2026-07-30_115437.png


74HC595_-_PRO_(SPI)_(Code_-_Professional).ubi

-- можно задать количество каскадов 1-5
-- выбрать частоту тактирования 125кгц-8мгц
-- выбрать режим синхронизации
-- порядок передачи битов
-- способ завершения передачи
-- условие отправки данных
-- обозначить пин 10
-- любой пин защёлки
-- защита от колизий записи
-- количество ошибок колизий

Режим синхронизации
меняет полярность пин 11 и 13
2026-07-30_112431.png
2026-07-30_112553.png

Порядок передачи битов — какой бит байта передаётся первым: старший (MSB) или младший (LSB).
При MSB first разряд N байта управляет выходом QN (прямое соответствие, интуитивно понятно).
При LSB first соответствие становится зеркальным.
Для 74HC595 рекомендуется MSB first.
Разные микросхемы и протоколы ожидают разный порядок.
Если порядок не совпадёт с тем, что ждёт устройство, данные будут поняты задом наперёд — устройство получит совсем другое число.

Способ завершения передачи — метод контроля окончания передачи байта.
Программный опрос флага SPIF обеспечивает минимальную задержку защёлки.
Аппаратное прерывание по вектору SPI_STC_vect освобождает процессор для других задач между передачами, но добавляет задержку входа в обработчик, но заметно подымает скорость loop, особенно при большом числе каскадов и непрерывной отправке.

Обозначить пин 10 — фиксированный выход высокого уровня, если пин в коде не используется.
Без изменения конфигурации не использовать как вход.
Предотвращает самопроизвольный переход SPI-модуля в ведомый режим.
Если пин SS сконфигурирован как вход и на нём появляется низкий уровень, бит MSTR сбрасывается, и SPI перестаёт работать как мастер.
Фиксация SS как выхода высокого уровня исключает этот сбой.

Защита от коллизий записи — включение программного контроля — обнаруживает ситуацию, когда регистр данных был перезаписан до завершения текущей передачи, и предотвращает защёлкивание повреждённых данных. При коллизии записи передаваемый байт теряется. Защита выполняет повторную передачу вместо фиксации ошибочного состояния на выходах.

Количество ошибок колизий - максимальное количество повторных попыток отправки данных при обнаружении коллизии записи ограничивает число повторов, чтобы избежать бесконечного цикла при неустранимой ошибке.


ТЕСТИРОВАНИЕ
на голых блоках с добавлением конвертера битов в байт
частота 4мгц пришлось подстроиться под штатник версия 7,5,2
4 каскада пришлось подстроится под ecoins версия 9,7,1
у каждой строчки своя градация цвета для быстрого сравнения результатов

2026-07-30_105741.png

Как и ожидалось, SPI-прерывания делают разгрузку кода.

Изменений данных на входе не было, потому скорость показывает просто устаканившийся луп, так как больше ничего не происходит там.

Штатник быстрее при большем количестве каскадов, вероятно, потому что у него уже сформированы входы напрямую, а нам приходится формировать байт сначала перед входом. Зато, если на вход сразу подавать готовые значения байтов, то будет быстрее чем у штатника допустим массив байтов готовый.
Добавлять генераторы для имитации постоянно изменяющегося варианта входа не стал: уже будут «салатные» результаты, и millis залезет, и прочее, а так — чистые блоки.

Вот так формировать байт на вход если нужны конкретные болеан сигналы.
2026-07-30_115236.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

Вернуться в «Микросхемы расширений»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей