Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

Быстрые пины быстрый digitalRead digitalWrite analogRead analogWrife ускоритель пинов входы выходы

Пользовательские блоки не подходящее под другие разделы
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Аватара пользователя
Dryundel
Полковник
Сообщения: 1898
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 569
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#1

Сообщение Dryundel » 16.07.2022{, 20:35}

Fast Pins
Блок актуален для AVR ATmega168 / 328 и ATtiny85 / 13 (UNO, NANO, MINI, PROMINI)
.
4.jpg
4.jpg (1.65 КБ) 902 просмотра
.
Новый блок поменял название т.к. и функционал расширился.
Возможности:
- Оптимизация Цифровых входов (digitalRead)
- Оптимизация Цифровых выходов (digitalWrite)
- Оптимизация Аналоговых входов (analogRead)
- Оптимизация Аналоговых(ШИМ) выходов (analogWrite)
- Выбор оптимизируемых позиций
Краткое описание блокаПоказать
Блок Fast Pins ускоряет работу входов / выходов в стандартно созданном
проекте в десятки раз. Он заменяет все digitalRead, digitalWrite, analogRead, analogWrite
на быстрые аналоги. Эти команды создаются не только штатными блоками вход / выход,
но и многими другими блоками работающими в пинами. К примеру при работе штатного
блока "Матричная клавиатура" 4х4 - 24 таких команд в каждом цикле.

Блок Fast Pins почти не требует настроек. Его надо разместить
в любом месте проекта. Всю работу он сделает автоматически.
Достаточно только выбрать цели оптимизации

Блок актуален только для AVR ATmega168 / 328 и ATtiny85 / 13

Если в проекте использован другой коньроллер замена проигнорируется.
В этом случае блок мешать не будет, но и помогать тоже.
Тестирование в #23 посте
.
История версий
.
fastDigital Read / Write
1.jpg
1.jpg (4.33 КБ) 1495 просмотров
fastDigitalRead__Write_(Code_-_Professional).ubi
(156.35 КБ) 34 скачивания
.
Этот блок ускоряет работу чтения и записи портов в стандартно созданном
проекте в десятки раз. Он заменяет все digitalRead и digitalWrite на быстрые
аналоги. Эти команды создаются не толко блоками вход / выход, но и многими
другими блоками работающими с пинами. К примеру при работе только одного штатного
блока "Матричная клавиатура" 4х4 - выполняется 24 таких команды в каждом цикле программы.

Блок fastDigitalRead / Write не требует настроек. Его надо разместить
в любом месте проекта. Всю работу он сделает автоматически.


Блок актуален только для AVR ATmega168 / 328 и ATtiny85 / 13 (UNO, NANO, MINI, MINIPRO)

Если в проекте использован другой контроллер замена проигнорируется.
В этом случае блок мешать не будет, но и помогать тоже.
.
Альтернативные блоки от aidar_i
Работа с портами ввода и вывода Ардуино через регистры.
.
Пропускаем несколько постов с личным мнением некоторых, сильно продвинутых, товарищей и сразу переходим к посту #12 , посту #19 и посту#20 с тестами!
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Dryundel
Полковник
Сообщения: 1898
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 569
Откуда: Ярославль
Имя: Андрей
Контактная информация:

fastDigital Read / Write - Ускоритель работы портов (быстрые пины)

#21

Сообщение Dryundel » 18.07.2022{, 14:04}

Sancho писал(а):
18.07.2022{, 13:42}
Компилятор преобразует функции на этапе сборки в прямую работу с регистрами. Скорость одинакова.
Правда, как он это делает я не могу предположить, т.к.
А все очень просто.
1. Размер проекта зависит от количества символов в ПБ. Даже описание на это влияет, да и все эти условия, параметры в Про редакторе.
2. Размер скетча в ArduinoIDE цифирька не однозначная и не окончательная, а весьма приблизительная.
3. Компилятор много чего вырезает.
К примеру если:

const int a = 5;
int b;
.........
if(a == 5) b = a;

То он тупо сделает так:
const int b = 5;

а возможно даже так: )))
const byte b = 5;

И никакие операции сравнений и лишние переменные в прошивку не пойдут.
В конечном итоге компилятору по барабану, функция там или библиотека. Если есть признак однозначности, если варианты отсутствуют, то он режет код вдоль и поперек. Даже иногда лишнее вырезает. Особенно когда функции по прерываниям присутствуют. Ему же без разницы, прошивка то в итоге на уровне битов и регистров происходит.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Dryundel
Полковник
Сообщения: 1898
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 569
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#22

Сообщение Dryundel » 22.07.2022{, 22:42}

Блок обновился и поменял название.
Название темы тоже пришлось поменять.
Fast Pins
.
4.jpg
4.jpg (1.65 КБ) 490 просмотров
Скачать в первом посте
.
Добавлено:
- Оптимизация Аналоговых входов (analogRead)
- Оптимизация Аналоговых выходов (analogWrite)
- Выбор оптимизируемых позиций
.
Тест новой версии
Импровизация управления скоростью, ну скажем вентилятора.
- Два цифровых входа - Включение питания, Режим работы 1 - 2
- Два аналоговых входа - Потенциометры предустановки режимов 1 и 2
- Три цифровых выхода - Индикация Питание, Режим 1, Режим 2.
- Аналоговый(ШИМ) выход - собственно то, чем управляем
- Блок подсчета усредненного количества циклов программы за секунду + вывод результата в UART.
Скрин тестового проектаПоказать
3.jpg
Скачать
Test_Fast_Pins.flp
(941.71 КБ) 16 скачиваний
.
Результаты:
Сначала тестируем проект без блока оптимизации - 6600 - 6700 циклов в секунду, в разных режимах. (более 150мкс на цикл)
Теперь закидываем блок Fast Pins в проект - 56000 - 58000 циклов в секунду. (17мкс на цикл)
.
О результатах судите сами.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

arisov77
Рядовой
Сообщения: 48
Зарегистрирован: 11.06.2016{, 12:42}
Репутация: 6
Откуда: Инза

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#23

Сообщение arisov77 » 24.07.2022{, 09:01}

Dryundel писал(а):
16.07.2022{, 20:35}
Блок актуален для AVR ATmega168 / 328...
А почему для AtMega2560 не подойдёт?

Аватара пользователя
Dryundel
Полковник
Сообщения: 1898
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 569
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#24

Сообщение Dryundel » 24.07.2022{, 10:43}

arisov77 писал(а):
24.07.2022{, 09:01}
А почему для AtMega2560 не подойдёт?
Хороший вопрос.
Наверное потому, что сделан для того, для чего сделан.
Возможно позже добавлю и 2560.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

arisov77
Рядовой
Сообщения: 48
Зарегистрирован: 11.06.2016{, 12:42}
Репутация: 6
Откуда: Инза

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#25

Сообщение arisov77 » 24.07.2022{, 13:22}

Dryundel писал(а):
24.07.2022{, 10:43}
Возможно позже добавлю и 2560.
Было бы не плохо, тем более, что в AtMega2560 полно входов/выходов и я иногда, что бы не использовать всякие "расширители" портов использую её.

Masterli
Рядовой
Сообщения: 6
Зарегистрирован: 04.11.2020{, 20:52}
Репутация: 0
Имя: Владимир

Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite

#26

Сообщение Masterli » 03.08.2022{, 20:12}

Dryundel, супер! Как же здорово, что есть ребята, которые умеют делать очень нужные блоки, да еще так изящно! :smile9: Спасибо!

Ответить

Вернуться в «Другое»