для версии 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 залезет, и прочее, а так — чистые блоки.
Вот так формировать байт на вход если нужны конкретные болеан сигналы.
74HC595 для 328/168 через его SPI
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
-
lfgjikjjyj
- Лейтенант
- Сообщения: 382
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 98 раз
74HC595 для 328/168 через его SPI
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
lfgjikjjyj
- Лейтенант
- Сообщения: 382
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 98 раз
Re: 74HC595 для 328/168 через его SPI
пересобрал блок
74HC595_-_PRO_v1.0_(SPI)
Добавил псевдосамодиагностику, так как 595 не имеет обратной связи по выходам, но можно считать предыдущее состояние и среагировать.
Работает это так: к примеру, берём на вход два байта (один байт = 1, второй байт = 2).
Отключаем самодиагностику, режим по изменению — и видим типичную картину: передали пару байтов 2 и 1 (MISO тут ни при чём, просто измерение висит на входе пин 12).
Теперь включаем самодиагностику.
Теперь — так же отправка двух байтов: 2 и 1.
Но теперь видим чтение этих байтов на MISO: 2 и 1.
Для этого пришлось перезаписать регистры новыми данными, что были на входе, но так как данные не изменились, то защёлку мы не активируем, после чтения MISO — всё легко и просто.
Если бы MISO сказал, что данные другие, чем отправили, то, перезаписав, он дёрнет защёлку, тогда, когда данные будут нужные.
Есть нюанс: если первые данные неверные, естественно, они защёлкнулись, то перепроверка займёт (при 8 МГц) время, и следующие данные он выставит примерно через 5 мкс на чистовом коде — это то время, которое будет подано на нагрузку после расширителя.
Но лучше, чем ничего.
А в потоковом режиме эту опцию можно задействовать разве что на диагностику тракта передачи: длин проводов, высокой частоты, дребезга контактов, помех и прочего через выход ошибки MOSI.
Перетестировал блоки с отключенными поисками ошибок.
Где-то шустрее стало, но до потокового режима USART не дотягивает всё равно.
74HC595_-_PRO_v1.0_(SPI)
Добавил псевдосамодиагностику, так как 595 не имеет обратной связи по выходам, но можно считать предыдущее состояние и среагировать.
Работает это так: к примеру, берём на вход два байта (один байт = 1, второй байт = 2).
Отключаем самодиагностику, режим по изменению — и видим типичную картину: передали пару байтов 2 и 1 (MISO тут ни при чём, просто измерение висит на входе пин 12).
Теперь включаем самодиагностику.
Теперь — так же отправка двух байтов: 2 и 1.
Но теперь видим чтение этих байтов на MISO: 2 и 1.
Для этого пришлось перезаписать регистры новыми данными, что были на входе, но так как данные не изменились, то защёлку мы не активируем, после чтения MISO — всё легко и просто.
Если бы MISO сказал, что данные другие, чем отправили, то, перезаписав, он дёрнет защёлку, тогда, когда данные будут нужные.
Есть нюанс: если первые данные неверные, естественно, они защёлкнулись, то перепроверка займёт (при 8 МГц) время, и следующие данные он выставит примерно через 5 мкс на чистовом коде — это то время, которое будет подано на нагрузку после расширителя.
Но лучше, чем ничего.
А в потоковом режиме эту опцию можно задействовать разве что на диагностику тракта передачи: длин проводов, высокой частоты, дребезга контактов, помех и прочего через выход ошибки MOSI.
Перетестировал блоки с отключенными поисками ошибок.
Где-то шустрее стало, но до потокового режима USART не дотягивает всё равно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость