На версии 9.7.1
Продолжим тематику изучения «мусорных»* контроллеров на примере 8266 с расширителем портов 595.
* — по мнению разработчиков FLProg
Не требует тормозной библиотеки.
Из интересного, пожалуй, есть тут в аппаратном SPI буфер данных, а именно 16 слов по 32 бита = 64 байта.
И, как вы уже все поняли, это значит, что можно, заполнив этот буфер, отправить одной транзакцией данные сразу на все 64 каскада, исключая лишние операции процессора.
Доступ через регистры.
Нечто подобное я делал на 328-й через USART, но там был двойной байтовый буфер, что мало, но и его хватило значительно, чтобы превзойти аппаратный SPI свой.
Можно задать:
— любую частоту тактирования (округлится до ближайшей);
— каскадов 1–64;
— пин защёлки на выбор;
— смену направления битов;
— непрерывную отправку в каждом цикле.
64 каскада — это не предел, а выбрал, чтобы заполнить весь буфер.
Сравнивать будем с блоком-кандидатом на типичные 100500 контроллеров.
Как показала практика, если сделать блок, заточенный под конкретный МК, то тот же 328-й может быть в более чем 5 раз быстрее, чем блок кандидатов.
Здесь результаты поскромнее, и, более того, их занижает ещё библиотека FLProg от чистового варианта.
Тестирование:
Возьмём частоту 4 МГц, 1 каскад, диспетчер отключен.
И это нечистовая скорость лупа, а вместе с измерительным пином, который забирает примерно 7 мкс от общего замера.
декодер видит 5 которую отправили
а тут декодер невидит потомучто защёлка у них через единицу движется
но там тоже 5 по моси
возьмём 4 каскада
тут уже через буфер видим одну транзакцию
декодер показывает правильную рашифровку и движения байтов
тут типичная древняя SPI по байтовая отправка
с кучей трат на время между ними
74HC595 для 8266 через его SPI
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
-
lfgjikjjyj
- Лейтенант
- Сообщения: 384
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 101 раз
74HC595 для 8266 через его SPI
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось lfgjikjjyj 07 авг 2026, 06:29, всего редактировалось 1 раз.
-
lfgjikjjyj
- Лейтенант
- Сообщения: 384
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 101 раз
Re: 74HC595 для 8266 через его SPI
возьмём 64 каскада
скорость лупа 7000 в сек получится
Если поставить тактирование 16 МГц, то скорость лупа — 22 150 в сек, длина лупа — 45 мкс.
Если поставить 20 МГц, то скорость лупа — 25 900 в сек, длина лупа — 38,5 мкс.
Результаты замеров:
Пока кандидат работает с одним каскадом, то профильный блок успевает пообщаться примерно с 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 условий и т. д.
скорость лупа 7000 в сек получится
Если поставить тактирование 16 МГц, то скорость лупа — 22 150 в сек, длина лупа — 45 мкс.
Если поставить 20 МГц, то скорость лупа — 25 900 в сек, длина лупа — 38,5 мкс.
Результаты замеров:
Пока кандидат работает с одним каскадом, то профильный блок успевает пообщаться примерно с 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 условий и т. д.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Кто сейчас на конференции
Сейчас этот форум просматривают: Murtaza и 2 гостя