74HC595 для 8266 через его SPI

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

74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

На версии 9.7.1

ограничения сайта не дают заливать больше 10 файлов остальные блоки будут ниже
два направления:
--- через байтовое управление
--- через байтовый массив управление

2026-08-07_093815.png

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


Продолжим тематику изучения «мусорных»* контроллеров на примере 8266 с расширителем портов 595.
* — по мнению разработчиков FLProg

Не требует тормозной библиотеки.
Из интересного, пожалуй, есть тут в аппаратном SPI буфер данных, а именно 16 слов по 32 бита = 64 байта.
И, как вы уже все поняли, это значит, что можно, заполнив этот буфер, отправить одной транзакцией данные сразу на все 64 каскада, исключая лишние операции процессора.
Доступ через регистры.
Нечто подобное я делал на 328-й через USART, но там был двойной байтовый буфер, что мало, но и его хватило значительно, чтобы превзойти аппаратный SPI свой.


Можно задать:
— любую частоту тактирования (округлится до ближайшей);
— каскадов 1–64;
— пин защёлки на выбор;
— смену направления битов;
— непрерывную отправку в каждом цикле.

64 каскада — это не предел, а выбрал, чтобы заполнить весь буфер.

Сравнивать будем с блоком-кандидатом на типичные 100500 контроллеров.
Как показала практика, если сделать блок, заточенный под конкретный МК, то тот же 328-й может быть в более чем 5 раз быстрее, чем блок кандидатов.
Здесь результаты поскромнее, и, более того, их занижает ещё библиотека FLProg от чистового варианта.

Тестирование:
Возьмём частоту 4 МГц, 1 каскад, диспетчер отключен.

2026-08-07_094635.png
2026-08-07_094725.png

декодер видит 5 которую отправили
2026-08-07_095317.png
а тут декодер невидит потомучто защёлка у них через единицу движется
но там тоже 5 по моси
2026-08-07_095415.png

возьмём 4 каскада
2026-08-07_094619.png
2026-08-07_095722.png
тут уже через буфер видим одну транзакцию
декодер показывает правильную рашифровку и движения байтов
2026-08-07_095825.png
тут типичная древняя SPI по байтовая отправка
с кучей трат на время между ними
2026-08-07_095911.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось lfgjikjjyj 07 авг 2026, 12:06, всего редактировалось 4 раза.
lfgjikjjyj
Лейтенант
Сообщения: 391
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 106 раз

Re: 74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

возьмём 64 каскада
скорость лупа 7000 в сек получится
2026-08-07_100251.png
2026-08-07_100401.png

Если поставить тактирование 16 МГц, то скорость лупа — 22 150 в сек, длина лупа — 45 мкс.
Если поставить 20 МГц, то скорость лупа — 25 900 в сек, длина лупа — 38,5 мкс.


Результаты замеров:

2026-08-07_093016.png

Пока кандидат работает с одним каскадом, то профильный блок успевает пообщаться примерно с 6 каскадамю.
Или пока кандидат отправляет на 4 каскада, то профильный блок успевает поработать с примерно 14 каскадами...

Ну и если увеличивать частоту, то и транзакция проходит быстрее. Если на 64 каскада она занимает от лупа на 4 МГц 128 мкс, то на 8 МГц — 64 мкс, а на 16 МГц — 32 мкс.


Как пользоваться и настроить блок:
Выбираем общее количество каскадов.
В каждом блоке по 4 каскада, сумма которых должна равняться общему, а также выставляем идентификатор блока от 0 до 15.

К примеру, нужно нам 3 каскада: берём один блок, ставим общее 3 каскада и ниже 3 каскада от экземпляра, идентификатор 0.

Если надо 15 каскадов:
берём 4 блока, выбираем общее каскадов 15, и в одном блоке ставим 4 каскада, идентификатор 0;
второй блок — 4 каскада, идентификатор 1;
третий блок — 4 каскада, идентификатор 2;
четвёртый блок — 3 каскада, идентификатор 3.

Идентификатор нам нужен, чтобы данные блока ложились в одну ячейку памяти, а их, как вы помните, у нас 16 слов по 32 бита, то есть 16 ячеек по 4 байта, ну или 4 микросхемы в данном случае.
Ну и мне было лень делать в одном блоке 64 входа, 64 условий и т. д.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Лейтенант
Сообщения: 391
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 106 раз

Re: 74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

в общем сайт запрещает грузить больше 10 файлов
так что продолжим тут

74HC595_PRO_(SPI)_8266_mas_(Code_-_Professional).ubi
-- работа через массив


Оказалось намного удобнее, да и луп стал чуть побыстрее.

2026-08-07_145851.png

Удалились идентификаторы и дополнительные 4 байта для каскадов.
В итоге теперь один блок, и требуется 3 действия: нужно нажать «массив» и ввести имя и количество каскадов (они же индексы для массива теперь) либо выбрать, если в проекте уже настроен массив.
Также, если его нет и вы создали его прямо в блоке, он всё равно появится во всём проекте через штатный блок массива, а там через индексы и дата вносятся изменения.

2026-08-07_152738.png

Единственное, что напрягает, — это почему-то Сергей отказался добавлять в массив импорт Excel, хотя чтобы заполнить несколько сотен данных массива в Excel — это пару секунд надо, а вот в программе — мат будет стоять полчаса.
В остальном массив просто порадовал.

Как создавать байтовый кадр действий, я уже рассказывал.

2026-08-03_145133.png

Берёте битовую шкалу (она же соответствует ножкам расширителя), выбираете, где будет 1, где 0, и суммируете (то есть, к примеру, гидроузел: составляем кадр «наполнить бочку» — выбираем, где какие клапана, мотор включить, это байт «наполнить»; далее «перемес»: составляем новый кадр «перемес» — так же на каких портах что открыть, суммируем биты, это байт «перемеса»; или «полив» — те же действия... У меня 16 комбинаций набралось байтовых на два регистра).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Лейтенант
Сообщения: 391
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 106 раз

Re: 74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

байтовый блок как в первом сообщении только с мелкими правка
-- чуть быстрее стал функционал тот же

74HC595_PRO_(SPI)_8266_byte_v1.0_(Code_-_Professional).ubi
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Лейтенант
Сообщения: 391
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 106 раз

Re: 74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

================================================================
Обновлённые :

74HC595_PRO_(SPI)_8266_mas_cs_v1.0_(Code_-_Professional).ubi

— любую частоту тактирования (округлится до ближайшей);
— каскадов 1–64;
— смену направления битов;

+ Режим Статический массив непрерывно
+ Режим Обновление данных непрерывно
+ Режим Обновление данных по изменению (приоритет 595)
+ пин защёлки фиксированый апаратный Д8

================================================================

Статический массив непрерывно:
Создаётся в блоке либо указывается внешний массив, и он будет вращаться постоянно. Это самый быстрый режим.

Обновление данных непрерывно:
Шлёт массив непрерывно, можно менять значения в нём (как вариант — борьба с мусором на 595 от статики, шумов, наводок и прочего: если с десяток данных придёт «багованных» на выходах у 595, то при транзакции пакета, к примеру, в 4 мкс, клапана и моторы их даже не заметят — они тут же затрутся новыми значениями).

Обновление данных по изменению:
Если на входе поменялись данные, то они отправятся один раз.

Применён аппаратный пин для защёлки, но он всего один; у него остальные два почему-то висят на другом канале, и связи с ними нету.
За щет апаратности сам пин вообще не участвует в лупе.

================================================================

Результаты замеров:
У кандидата взял режим (в каждом цикле), ибо статики у него нет, но принцип тот же.
А также этот же режим использовал к своему: обновление данных непрерывно.
Так как данные не менялись, то и получается, что оба режима выполняли один функционал. Третьим вариантом выбрал у него изменение входов, аналогичное моему: имитация изменения — это генератор на 100 мс период через массив данных.

2026-08-08_172109.png
2026-08-08_172501.png

Режим у кандидата в начале был грустный, а вот другой — прям бодричком.
Но я сделал третий режим приоритет на 595 на случай длинного лупа, чтобы он мог в каждом лупе отправлять, так что тут такое двоякое впечатление.

Но будем надеяться, что они починят кандидата на 100500 контроллеров и он начнёт давать нормальные результаты либо начнут использовать возможности каждого МК.

А так смотреть: пока он отправляет 1 каскад, а профильник уже обновил дважды 64 каскада — ну, это такое...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
lfgjikjjyj
Лейтенант
Сообщения: 391
Зарегистрирован: 27 мар 2025, 12:13
Имя: Коля
Поблагодарили: 106 раз

Re: 74HC595 для 8266 через его SPI

Сообщение lfgjikjjyj »

================================================================
Обновлённые :

74HC595_PRO_(SPI)_8266_mas_cs_v1.2_(Code_-_Professional).ubi
Показать
— любую частоту тактирования (округлится до ближайшей);
— каскадов 1–64;
— смену направления битов;
— Режим Статический массив непрерывно
— Режим Обновление данных непрерывно
— Режим Обновление данных по изменению (приоритет 595)
— пин защёлки фиксированый апаратный Д8

+ Режим Обновление данных по изменению (приоритет луп)
+ местами перешол на 32бит вычисление взамен байтового
*******************************************************************************************
74HC595_PRO_(SPI)_8266_mas_cs_v2.0_(Code_-_Professional).ubi
Показать
+ любую частоту тактирования (округлится до ближайшей);
+ каскадов 1–64;
+ смену направления битов;
+ Режим Статический массив непрерывно
+ Режим Обновление данных непрерывно
+ Режим Обновление данных по изменению (приоритет 595)
+ пин защёлки фиксированый апаратный Д8
+ Режим Обновление данных по изменению (приоритет луп)
+ Указатель количества каскадов
+ местами более перешол на 32бит вычисление взамен байтового

! массив фиксированый на 64 байта - в начале выставляете под нужное количество каскадов а остальное оставляете нулями
================================================================

На 1,2 скорость упала от 1,0 на мелких каскадах, но значительно поднялась на больших.
На 2,0 — это больше переход по части на 32-битное общение от байтового, но и тут двоякое впечатление, но большие каскады приподнялись.

2,0 — это про большие каскады.
1,2 — это уже скорее компромисс малых и больших.
Показать
Статический массив непрерывно:
Создаётся в блоке либо указывается внешний массив, и он будет вращаться постоянно.
Это самый быстрый режим.

Обновление данных непрерывно:
Шлёт массив непрерывно, можно менять значения в нём (как вариант — борьба с мусором на 595 от статики, шумов, наводок и прочего.
Если с десяток данных придёт «багованных» на выходах у 595, то при транзакции пакета, к примеру, в 4 мкс,
клапана и моторы их даже не заметят — они тут же затрутся новыми значениями).

Обновление данных по изменению (приоритет 595):
Если на входе поменялись данные, то они отправятся один раз.

Обновление данных по изменению (приоритет луп):
Если на входе поменялись данные, то они отправятся один раз.

Применён аппаратный пин для защёлки, но он всего один; у него остальные два почему-то висят на другом канале, и связи с ними нету.
За щет апаратности сам пин вообще не участвует в лупе.
================================================================

Результаты замеров:
Показать
У кандидата взял режим (в каждом цикле), ибо статики у него нет, но принцип тот же.
А также этот же режим использовал к своему: обновление данных непрерывно.
Так как данные не менялись, то и получается, что оба режима выполняли один функционал. Третьим вариантом выбрал у него изменение входов, аналогичное моему: имитация изменения — это генератор на 100 мс период через массив данных.
2026-08-08_215515.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

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

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

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