для версии 7,5,2
Мало кто знает, что в Ардуино стоит USART, а не UART, и UART тут — режим USART'а, но им мало кто пользуется.
Но на деле это весьма гибкая и полезная вещь.
Из неё можно сделать к примеру второй аппаратный SPI, только мастера, но при этом с кучей плюшек, чего нет даже у SPI.
К примеру:
-- потоковая передача (двойная буферизация);
-- отправка 9 бит;
-- три личных прерывания;
-- гибкий делитель частоты (но здесь я повторил набор от SPI);
-- приёмник тоже имеет свой буфер, но тут он не нужен.
Ну и прочее.
под выбор пойдёт как:
если нужно иметь 2 аппаратных SPI на Arduino,
если нужно иметь свободные пины 10, 11, 12, 13,
если нужна высокая скорость на несколько каскадов, но при этом без прерываний за счёт буферной отправки (значительно быстрее, чем SPI)
из минусов:
не активен вывод в уарт
заняты пины тх 4
Сам блок можно настроить:
— задать количество каскадов (1–5);
— выбрать частоту тактирования (125 кГц – 8 МГц);
— выбрать режим синхронизации;
— выбрать порядок передачи битов;
— выбрать способ завершения передачи;
— выбрать условие отправки данных;
— выбрать любой пин защёлки;
— настроить защиту от коллизий записи;
— указать количество ошибок коллизий.
Режим синхронизации
меняет полярность пин тх и 4
Порядок передачи битов — какой бит байта передаётся первым: старший (MSB) или младший (LSB).
При MSB first разряд N байта управляет выходом QN (прямое соответствие, интуитивно понятно).
При LSB first соответствие становится зеркальным.
Для 74HC595 рекомендуется MSB first.
Разные микросхемы и протоколы ожидают разный порядок.
Если порядок не совпадёт с тем, что ждёт устройство, данные будут поняты задом наперёд — устройство получит совсем другое число.
Способ завершения передачи — программный опрос. Это стандартная работа, как в SPI.
Потоковая передача: использует двойную буферизацию передатчика USART. Как только буфер освободился — сразу грузим следующий байт. Сдвиговый регистр ещё доотправляет предыдущий, но буфер уже готов к следующей отправки. Это позволяет заранее загрузить следующий байт, и передача идёт непрерывным потоком, без пауз между байтами.
Заметно, когда много каскадов и передача идёт непрерывно.
По прерыванию: процессор запускает передачу и не ждёт её завершения — он освобождается для других задач, а микроконтроллер сам вызывает обработчик прерывания, когда нужно отправить следующий байт и когда нужно защёлкнуть данные.
Заметно, когда много каскадов и передача идёт непрерывно.
Защита от коллизий записи — включение программного контроля — обнаруживает ситуацию, когда регистр данных был перезаписан до завершения текущей передачи, и предотвращает защёлкивание повреждённых данных. При коллизии записи передаваемый байт теряется. Защита выполняет повторную передачу вместо фиксации ошибочного состояния на выходах.
Количество ошибок колизий - максимальное количество повторных попыток отправки данных при обнаружении коллизии записи ограничивает число повторов, чтобы избежать бесконечного цикла при неустранимой ошибке.
ТЕСТИРОВАНИЕ
на голых блоках с добавлением конвертера битов в байт
частота 4мгц пришлось подстроиться под штатник версия 7,5,2
4 каскада пришлось подстроится под ecoins версия 9,7,1
у каждой строчки своя градация цвета для быстрого сравнения результатов
В заключении:
Одиночный режим можно не рассматривать: он специфичен для теста.
А вот непрерывный режим показывает, что в прямом опросе он немного проигрывает — код немного тяжелее.
Но стоит включить двойную буферизацию, как в несколько каскадов он обходит SPI почти вдвое (и если иметь сотню каскадов я бы категорически от SPI отказался в пользу USART с буферкой да даже будь там пару десятков их).
Если в коде прерывания не мешают, то тут SPI чутка быстрее, код там попроще.
Штатный блок тоже норм.
Экоинс-блок — ну тут был шокирован: не знаю, что они там оптимизировали, да так, что даже при желании так загнобить производительность надо постараться очень сильно.
Как подключать
Вот так формировать байт на вход если нужны конкретные болеан сигналы.
74HC595 для 328/168 через его USART
Пользовательские блоки для подключения различных микросхем в Ардуино, таких как АЦП, ЦАП, расширители входов-выходов и прочие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
-
lfgjikjjyj
- Лейтенант
- Сообщения: 380
- Зарегистрирован: 27 мар 2025, 12:13
- Имя: Коля
- Поблагодарили: 94 раза
74HC595 для 328/168 через его USART
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Вернуться в «Микросхемы расширений»
Перейти
- Правила размещений сообщений
- FLProg & SCADA
- ↳ FLProg
- ↳ FLProg-Scada
- ↳ Проекты
- ↳ Пожелания
- Основной
- ↳ Периферийное железо для контроллеров
- ↳ Датчики температуры, влажности и давления
- ↳ Прочие датчики и энкодеры
- ↳ Дисплеи и индикаторы
- ↳ Часы реального времени
- ↳ Управление двигателями
- ↳ Устройства памяти
- ↳ Расширители портов
- ↳ Кнопки и клавиатуры
- ↳ Звук, музыка и видео
- ↳ Светодиоды
- ↳ ЦАП и АЦП
- ↳ Печатные платы, блоки питания, корпуса и прочие компоненты
- ↳ Приборы и оборудование
- ↳ Espressif ESP
- ↳ ESP8266
- ↳ Справка по ESP8266
- ↳ Платы на основе ESP8266
- ↳ ESP32
- ↳ Справка по ESP32
- ↳ Платы на основе ESP32
- ↳ WEB интерфейс
- ↳ Готовые прошивки
- ↳ Спросить у знатоков
- ↳ Темы от автора
- ↳ Обсуждение работы сайта
- ↳ Справочники и даташиты
- ↳ Юмор. Отдохните, улыбнитесь и с новыми силами в бой!
- ↳ Покупка железа (Обмен опытом)
- ↳ Просто поболтать (На свободную тему)
- ↳ Торрент - ссылки
- ↳ HMI_панель на Андроиде - KaScada
- ↳ Полезные ссылки
- ↳ OnLine Общение
- ↳ Читальный зал
- ↳ HMI Virtuino
- ↳ Пользовательские контроллеры
- ↳ Коммуникация, связь, инструменты, программы
- ↳ MQTT
- ↳ Blynk
- ↳ Modbus
- ↳ Remote XY
- ↳ WiFi
- ↳ Bluetooth
- ↳ Radio 433 MHz
- ↳ GSM / GPRS
- ↳ GPS
- ↳ Infrared (IR)
- ↳ Ethernet
- ↳ UART
- ↳ CAN
- ↳ Другие
- ↳ Контроль доступа. Обсуждение
- ↳ RFID
- ↳ iButton
- ↳ Датчик отпечатка пальцев
- ↳ Конфиденциальность
- ↳ Базовые элементы
- ↳ Таймеры
- ↳ Математика
- ↳ Логика
- ↳ переменные
- ↳ Arduino. Другие МК
- ↳ ATmega328,168
- ↳ ATmega32u4,2560
- ↳ Atmel Cortex-M3
- ↳ Проекты различных устройств на Ардуино
- ↳ Инкубаторы
- ↳ STM32
- ↳ Проекты различных устройств на STM32
- ↳ Команда ecoins
- ↳ RP2040 и т.д.
- Видео. Уроки. Примеры.
- ↳ Обучающие видео материалы
- ↳ Видео от Автора программы
- ↳ Ключ к Arduino
- ↳ Видео от Rovki
- ↳ Материалы от Siberian
- ↳ Обучающие примеры работы в FLProg
- ↳ Интересный контент с FLProg
- Проекты различных устройств
- ↳ Проекты различных устройств на Arduino
- ↳ Проекты различных устройств на ESP8266 / ESP32
- ↳ ESP8266
- ↳ ESP32
- ↳ Проекты различных устройств на STM32
- ↳ Проекты с разными контроллерами
- Песочница
- ↳ Начинающим
- ↳ Wiki
- ↳ Электронщикам - Непрограммистам
- ↳ Штатные блоки
- ↳ Помогите, а то я "нимагу"
- ↳ А что так можно было, да?
- ↳ Не могу найти тему ...
- Пользовательские блоки
- ↳ Триггеры, таймеры, счетчики, детекторы сигнала
- ↳ Блоки для рассчетов и цифровые фильтры
- ↳ Блоки сравнения (компараторы)
- ↳ Коммуникация и связь
- ↳ Управление шаговыми двигателями и сервоприводами
- ↳ Часы реального времени (RTC)
- ↳ Дисплеи, индикаторы и клавиатуры
- ↳ Работа со строками
- ↳ Датчики и энкодеры
- ↳ EEPROM и SD карты
- ↳ Конвертация типов, шифраторы и дешифраторы
- ↳ Микросхемы расширений
- ↳ ПИД регуляторы (PID), блоки для ШИМ
- ↳ Звук и видео
- ↳ Контроль доступа
- ↳ Светодиоды, освещение
- ↳ Другое
- ↳ Разработка пользовательских блоков
- ↳ Библиотеки пользователей
- ↳ Блоки для ESP32/ESP8266
- Программирование на С++
- ↳ Учебные материалы
- ↳ С++ в Ардуино
- ↳ Общие вопросы
- Одноплатные компьютеры
- ↳ Rapsberry Pi
- ↳ Orange Pi
- ↳ Banana Pi
- Умный Дом
- ↳ Проекты
- ↳ Умная Дача
- ↳ Home Assistant
- ↳ MajorDoMo
- ↳ OpenHAB
- ↳ ioBroker
- ↳ Облачные сервисы
- ↳ LoRa
- ↳ Общая информация и вопросы
- ↳ Проекты
- Объявления
- ↳ Доска объявлений
- ↳ Прием заказов
- ↳ Коллективные покупки
- Другие визуальные среды программирования
- ↳ Node-Red
- ↳ Примеры
- ↳ Настройки
- ↳ Общие вопросы
- ↳ HiAsm
- ↳ Примеры
- ↳ Настройки
- ↳ Общие вопросы
- ↳ LabVIEW
- ЧПУ
- ↳ Станок на ATmega 2560 с шилдом
- ↳ Проекты
- ↳ ЧПУ + FLProg
- ↳ Общие вопросы...
- Android
- ↳ Визуальное программирование в App Inventor
- ↳ Программы
- ↳ Денежные переводы
- ↳ Обсуждение программы FLProg (Не багтрекер, и не хотелки. Делимся опытом!!)
- ↳ Встроенные блоки
- ↳ Интерфейс программы
- ↳ Установка и работа FLProg на разных ОС
- ↳ FLProg и Arduino IDE
- ↳ Помощь и справочная информация
- ↳ Сторонняя SCADA для Ардуино
- ↳ Прочие вопросы
- ↳ Баг - Трекер
- ↳ Новые
- ↳ Принятые
- ↳ В работе
- ↳ Выполненно
- ↳ Отложенно (временно не возможно)
- ↳ Не принятые
- ↳ Архивы
- ↳ Архив (Версия 2.1)
- ↳ Архив (Версия 1.15)
- ↳ Архив (Версия 1.14)
- ↳ Архив (Версия 1.12)
- ↳ Архив (Версия 1.11.1)
- ↳ Архив версия 1.11
- ↳ Архив (Версия 1.10.4)
- ↳ Архив (Версия 1.10.3)
- ↳ Архив (Версия 1.10.2)
- ↳ Архив (Версия 1.10.1)
- ↳ Архив (Версия 1.10.4)
- ↳ Архив (Версия 1.10.3)
- ↳ Архив (Версия 1.10.2)
- ↳ Новый функционал
- ↳ Новые
- ↳ Принято
- ↳ В работе
- ↳ Выполненно
- ↳ Отложенно (временно не возможно)
- ↳ Не принято
- Самые интересные и популярные темы (эксперимент)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя