Страница 2 из 2
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 16.07.2022{, 20:35}
Dryundel
Fast Pins
Блок актуален для AVR ATmega168 / 328 и ATtiny85 / 13 (UNO, NANO, MINI, PROMINI)
.
- 4.jpg (1.65 КБ) 4642 просмотра
.
Актуальная версия:
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 посте
.
История версий
.
.
Этот блок ускоряет работу чтения и записи портов в стандартно созданном
проекте в десятки раз. Он заменяет все digitalRead и digitalWrite на быстрые
аналоги. Эти команды создаются не толко блоками вход / выход, но и многими
другими блоками работающими с пинами. К примеру при работе только одного штатного
блока "Матричная клавиатура" 4х4 - выполняется 24 таких команды в каждом цикле программы.
Блок fastDigitalRead / Write не требует настроек. Его надо разместить
в любом месте проекта. Всю работу он сделает автоматически.
Блок актуален только для AVR ATmega168 / 328 и ATtiny85 / 13 (UNO, NANO, MINI, MINIPRO)
Если в проекте использован другой контроллер замена проигнорируется.
В этом случае блок мешать не будет, но и помогать тоже.
.
Альтернативные блоки от
aidar_i
Работа с портами ввода и вывода Ардуино через регистры.
.
Пропускаем несколько постов с личным мнением некоторых, сильно продвинутых, товарищей и сразу переходим к посту #12 , посту #19 и посту#20 с тестами!
fastDigital Read / Write - Ускоритель работы портов (быстрые пины)
Добавлено: 18.07.2022{, 14:04}
Dryundel
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;
И никакие операции сравнений и лишние переменные в прошивку не пойдут.
В конечном итоге компилятору по барабану, функция там или библиотека. Если есть признак однозначности, если варианты отсутствуют, то он режет код вдоль и поперек. Даже иногда лишнее вырезает. Особенно когда функции по прерываниям присутствуют. Ему же без разницы, прошивка то в итоге на уровне битов и регистров происходит.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 22.07.2022{, 22:42}
Dryundel
Блок обновился и поменял название.
Название темы тоже пришлось поменять.
Fast Pins
.
- 4.jpg (1.65 КБ) 2786 просмотров
Скачать в первом посте
.
Добавлено:
- Оптимизация Аналоговых входов (analogRead)
- Оптимизация Аналоговых выходов (analogWrite)
- Выбор оптимизируемых позиций
.
Тест новой версии
Импровизация управления скоростью, ну скажем вентилятора.
- Два цифровых входа - Включение питания, Режим работы 1 - 2
- Два аналоговых входа - Потенциометры предустановки режимов 1 и 2
- Три цифровых выхода - Индикация Питание, Режим 1, Режим 2.
- Аналоговый(ШИМ) выход - собственно то, чем управляем
- Блок подсчета усредненного количества циклов программы за секунду + вывод результата в UART.
Скачать
.
Результаты:
Сначала тестируем проект без блока оптимизации -
6600 - 6700 циклов в секунду, в разных режимах. (более 150мкс на цикл)
Теперь закидываем блок
Fast Pins в проект -
56000 - 58000 циклов в секунду. (17мкс на цикл)
.
О результатах судите сами.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 24.07.2022{, 09:01}
arisov77
Dryundel писал(а): ↑16.07.2022{, 20:35}
Блок актуален для AVR ATmega168 / 328...
А почему для AtMega2560 не подойдёт?
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 24.07.2022{, 10:43}
Dryundel
arisov77 писал(а): ↑24.07.2022{, 09:01}
А почему для AtMega2560 не подойдёт?
Хороший вопрос.
Наверное потому, что сделан для того, для чего сделан.
Возможно позже добавлю и 2560.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 24.07.2022{, 13:22}
arisov77
Dryundel писал(а): ↑24.07.2022{, 10:43}
Возможно позже добавлю и 2560.
Было бы не плохо, тем более, что в AtMega2560 полно входов/выходов и я иногда, что бы не использовать всякие "расширители" портов использую её.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 03.08.2022{, 20:12}
Masterli
Dryundel, супер! Как же здорово, что есть ребята, которые умеют делать очень нужные блоки, да еще так изящно!
Спасибо!
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 20.08.2022{, 06:08}
Di123
у меня как раз и влияет блок на ацп с потенциометрами
если без блока то всё норм по всем трём потенциометрам цыфры меняются от 0-9
с вашим блоком один потенциометр влияяет на другой меняя на том значения и некоторые не доходят до нуля
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 20.08.2022{, 08:09}
Dryundel
Di123, этот блок не для Вас. Вам только штатные и то не все. Остальное у Вас не работает.
Отправлено спустя 5 минут 47 секунд:
Перед тем как что то писать, типа - "Фсёпропало! ", обычно читают инструкции и тестируют настройки. Я не могу никого заставлять это делать.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 28.02.2023{, 17:28}
Dryundel
Блок обновлен.
Исправлен баг неотключения ШИМ при совместной оптимизации analogWrite и digitalWrite (Аналоговых и Цифровых выходов)
Ссылка на скачивание в
первом посте..
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 15.04.2023{, 20:15}
Dryundel
Блок обновлен.
Актуальная версия:
Fast_Pins_(Быстрые_пины)_V1.2_(Code_-_Professional).ubi
Полностью переработана оптимизация analogWrite.
Доработано описание настроек.
Описание в первом
посте.
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 13.10.2023{, 19:33}
cfitymrf
Здравствуйте . поставил блок , полезли ошибки , без блока все нормально.
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
Fast Pins - (быстрые пины). -- Оптимизация работы входов/выходов -- digitalRead, digitalWrite, analogRead, analogWrite
Добавлено: 15.10.2023{, 09:37}
НовыйUser
Dryundel писал(а): ↑24.07.2022{, 10:43}
Возможно позже добавлю и 2560.
Спасибо за блоки и информацию для размышлений
результаты впечатляют 0_o
2560 ходовая железка и оптимизация ее , очень интересный ход
(в ожидании блоков на 2560)