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

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

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

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 КБ) 4631 просмотр
.
Актуальная версия:
Fast_Pins_(Быстрые_пины)_V1.2_(Code_-_Professional).ubi
Полностью переработана оптимизация analogWrite.
Доработано описание настроек.

История версий Исправлен баг не полного отключения ШИМ при совместной оптимизации analogWrite и digitalWrite (Аналоговых и Цифровых выходов)
.

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

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

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

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

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


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

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

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

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;

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

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

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

#22

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

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

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

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

#23

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

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

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

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

#24

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

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

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

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

#25

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

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

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

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

#26

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

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

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

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

#27

Сообщение Di123 » 20.08.2022{, 06:08}

у меня как раз и влияет блок на ацп с потенциометрами
если без блока то всё норм по всем трём потенциометрам цыфры меняются от 0-9
с вашим блоком один потенциометр влияяет на другой меняя на том значения и некоторые не доходят до нуля
тест.flp
(1.13 МБ) 44 скачивания

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

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

#28

Сообщение Dryundel » 20.08.2022{, 08:09}

Di123, этот блок не для Вас. Вам только штатные и то не все. Остальное у Вас не работает. :)

Отправлено спустя 5 минут 47 секунд:
Перед тем как что то писать, типа - "Фсёпропало! ", обычно читают инструкции и тестируют настройки. Я не могу никого заставлять это делать.

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

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

#29

Сообщение Dryundel » 28.02.2023{, 17:28}

Блок обновлен.
Исправлен баг неотключения ШИМ при совместной оптимизации analogWrite и digitalWrite (Аналоговых и Цифровых выходов)
Ссылка на скачивание в первом посте..

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

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

#30

Сообщение Dryundel » 15.04.2023{, 20:15}

Блок обновлен.

Актуальная версия:
Fast_Pins_(Быстрые_пины)_V1.2_(Code_-_Professional).ubi
Полностью переработана оптимизация analogWrite.
Доработано описание настроек.

Описание в первом посте.

cfitymrf
Рядовой
Сообщения: 67
Зарегистрирован: 06.09.2021{, 07:45}
Репутация: 3
Имя: иван

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

#31

Сообщение cfitymrf » 13.10.2023{, 19:33}

Здравствуйте . поставил блок , полезли ошибки , без блока все нормально.
Arduino: 1.8.19 (Windows 10), Плата:"Arduino Pro or Pro Mini, ATmega328P (5V, 16 MHz)"

pr1:1854:6: error: ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:2:22: note: old declaration 'int digitalReadFast(uint8_t)'

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:136:5: note: in expansion of macro 'digitalRead'

int digitalRead(uint8_t pin);

^~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'void setup()':

pr1:216:22: error: call of overloaded 'digitalWriteFast(int, int)' is ambiguous

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:3:23: note: candidate: void digitalWriteFast(uint8_t, uint8_t)

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:135:6: note: in expansion of macro 'digitalWrite'

void digitalWrite(uint8_t pin, uint8_t val);

^~~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:1868:6: note: candidate: void digitalWriteFast(uint8_t, bool)

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'void loop()':

pr1:1149:39: error: call of overloaded 'analogWriteFast(int, double&)' is ambiguous

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:4:22: note: candidate: void analogWriteFast(uint8_t, int)

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:139:6: note: in expansion of macro 'analogWrite'

void analogWrite(uint8_t pin, int val);

^~~~~~~~~~~

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:1881:6: note: candidate: void analogWriteFast(uint8_t, uint16_t)

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino: In function 'bool digitalReadFast(uint8_t)':

pr1:1854:10: error: ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

C:\Users\шурик\AppData\Local\Temp\flprog\pr1\pr1.ino:2:22: note: old declaration 'int digitalReadFast(uint8_t)'

C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\cores\arduino/Arduino.h:136:5: note: in expansion of macro 'digitalRead'

int digitalRead(uint8_t pin);

^~~~~~~~~~~

Несколько библиотек найдено для "Wire.h"

Используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\Wire

Не используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\Wire

Несколько библиотек найдено для "EEPROM.h"

Используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\EEPROM

Не используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\E2PROM

Несколько библиотек найдено для "SPI.h"

Используется: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\SPI

Не используется: C:\Program Files (x86)\FLProg\ideV8\portable\packages\arduino\hardware\avr\1.8.4\libraries\SPI

exit status 1

ambiguating new declaration of 'bool digitalReadFast(uint8_t)'

Неверная версия '3.8b' для библиотеки в: c:\Program Files (x86)\FLProg\ideV8\portable\sketchbook\libraries\GyverButton

НовыйUser
Сержант
Сообщения: 154
Зарегистрирован: 26.11.2015{, 22:05}
Репутация: 8

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

#32

Сообщение НовыйUser » 15.10.2023{, 09:37}

Dryundel писал(а):
24.07.2022{, 10:43}
Возможно позже добавлю и 2560.
Спасибо за блоки и информацию для размышлений
результаты впечатляют 0_o
2560 ходовая железка и оптимизация ее , очень интересный ход

(в ожидании блоков на 2560)

Ответить

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