74HC595 для 328/168 через его SPI
Добавлено: 30 июл 2026, 07:51
для версии 7,5,2
-- можно задать количество каскадов 1-5
-- выбрать частоту тактирования 125кгц-8мгц
-- выбрать режим синхронизации
-- порядок передачи битов
-- способ завершения передачи
-- условие отправки данных
-- обозначить пин 10
-- любой пин защёлки
-- защита от колизий записи
-- количество ошибок колизий
Режим синхронизации
меняет полярность пин 11 и 13
Порядок передачи битов — какой бит байта передаётся первым: старший (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
у каждой строчки своя градация цвета для быстрого сравнения результатов
Как и ожидалось, SPI-прерывания делают разгрузку кода.
Изменений данных на входе не было, потому скорость показывает просто устаканившийся луп, так как больше ничего не происходит там.
Штатник быстрее при большем количестве каскадов, вероятно, потому что у него уже сформированы входы напрямую, а нам приходится формировать байт сначала перед входом. Зато, если на вход сразу подавать готовые значения байтов, то будет быстрее чем у штатника допустим массив байтов готовый.
Добавлять генераторы для имитации постоянно изменяющегося варианта входа не стал: уже будут «салатные» результаты, и millis залезет, и прочее, а так — чистые блоки.
Вот так формировать байт на вход если нужны конкретные болеан сигналы.
-- можно задать количество каскадов 1-5
-- выбрать частоту тактирования 125кгц-8мгц
-- выбрать режим синхронизации
-- порядок передачи битов
-- способ завершения передачи
-- условие отправки данных
-- обозначить пин 10
-- любой пин защёлки
-- защита от колизий записи
-- количество ошибок колизий
Режим синхронизации
меняет полярность пин 11 и 13
Порядок передачи битов — какой бит байта передаётся первым: старший (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
у каждой строчки своя градация цвета для быстрого сравнения результатов
Как и ожидалось, SPI-прерывания делают разгрузку кода.
Изменений данных на входе не было, потому скорость показывает просто устаканившийся луп, так как больше ничего не происходит там.
Штатник быстрее при большем количестве каскадов, вероятно, потому что у него уже сформированы входы напрямую, а нам приходится формировать байт сначала перед входом. Зато, если на вход сразу подавать готовые значения байтов, то будет быстрее чем у штатника допустим массив байтов готовый.
Добавлять генераторы для имитации постоянно изменяющегося варианта входа не стал: уже будут «салатные» результаты, и millis залезет, и прочее, а так — чистые блоки.
Вот так формировать байт на вход если нужны конкретные болеан сигналы.