Страница 3 из 3
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 27 окт 2021, 04:37
Di123
неработает опять ничего
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 27 окт 2021, 19:45
aidar_i
Di123 писал(а): 27 окт 2021, 04:37
неработает опять ничего
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
У Вас блоком ШИМ включаются таймеры на выводах 9 и 10. Нужно отключить ШИМ на выводе 10.
Хотя в параметрах есть, но похоже не работает. Нужно автора попросить вставить такую настройку, если только этот пин выбран ШИМ, то на других пинах этого таймера отключить таймер.
В штатных есть проверка этого. В свои блоки вставлять нет смысла, будет как штатный.
Это делается заменой в: TCCR1A=(1<<COM1A1) | (1<<COM1B0) | (1<<WGM11); B1 на В0 .
Если вставить эту строку в сетап, работает.
Отправлено спустя 8 часов 21 минуту 33 секунды:
Di123 писал(а): 27 окт 2021, 04:37
неработает опять ничего
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
В блоке GyverPWM есть ошибки в коде: PWM_set(<Выберите ~10( PWM ).PWM> ,<Duty
D9 FastPWM 4_bit>); так во всех строках 10 пина.
Я добавил в блок отключение ШИМ в 9 и 10 пинах, если выбрали 10 пин цифровым, то Шим отключается в 9м и наоборот.
Испытайте:
Цифровые входы1 .flp
ВРЕМЕННО УДАЛИЛ
Блок ШИМ бета, недооформлен, на 8, 10, 12, 14, 15, 16 бит.
Сейчас ШИМ Гувера работает с моим цифровым выходом..
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 27 окт 2021, 20:51
Di123
где то ошибка на 16 бит шим работает как вкл выкл
2021-10-28_004815.png
Отправлено спустя 1 минуту 5 секунд:
либо теоретически блок ускорения не всостоянии пощитать такие мелкие импульсы
Отправлено спустя 52 секунды:
хотя нет я интегер поставил зря
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 27 окт 2021, 22:35
AlexCrane
[ref]Di123[/ref], Исправил блоки GyverPWM
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 00:22
Dryundel
AlexCrane писал(а): 27 окт 2021, 22:35
Di123, Исправил блоки GyverPWM
Пошла движуха на форуме!

Это радует.
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 06:18
aidar_i
Создавая блоки на новом редакторе, осознал, что он, в некотором роде, может выступать (и выступает) как библиотека, которая не занимает память МК.
Вообще думаю, если у нас программа не для программистов с кодом, почему генерируемый код в с++? Какая разница человеку , что там?
Я создаю блоки этой темы (хотя есть продвинутые блоки наших форумчан по этой теме ), чтобы посмотреть, что в итоге получается. Мне кажется , красиво получается.
Я пытался заменить блоками входа выхода вот это:
https://github.com/arduino/ArduinoCore- ... _digital.c
Таким образом язык программирования FLProg появляется!
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 20:01
Di123
[ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 20:17
aidar_i
Di123 писал(а): 28 окт 2021, 20:01
[ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 20:37
Di123
[ref=#000080]aidar_i[/ref], да работает на 16 15 14 и у алекса тоже теперь норм
но под светодиодную подсветку в любом случае брать не выше 12 бит ибо частота там приемлемая для здоровья глаз
у вас для битов маленькая частота выбора возможности
Отправлено спустя 1 минуту 17 секунд:
ну в край 13 бит на фасте ещё можно
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 28 окт 2021, 23:07
aidar_i
Di123 писал(а): 28 окт 2021, 20:37
у вас для битов маленькая частота выбора возможности
Москва тоже строилась не сразу!
Отправлено спустя 2 часа 8 минут 19 секунд:
ЗДЕСЬ добавил на 8, 10, 12 бит. Добавил проверку МК и выводов.
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 29 окт 2021, 14:45
aidar_i
ШИМ на 9, 10, 11 выводах
Цифровые выходы ШИМ Ардуино.flp
Отправлено спустя 7 минут 13 секунд:
[ref]Di123[/ref], сможете проверить?
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 29 окт 2021, 15:56
Di123
[ref=#000080]aidar_i[/ref], перемаргивают
а что там не так могло быть
в следующий раз когда будете заниматься построением переменных у щетчика там есть галочка сброса в 0
2021-10-29_194813.png
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 29 окт 2021, 17:18
aidar_i
Di123 писал(а): 29 окт 2021, 15:56
[ref=#000080]aidar_i[/ref], перемаргивают
а что там не так могло быть
В примере, 11я уменьшается ступеньчато, 9,10 увеличиваются ступенчато. На старте горит светодиод на 11 пине, он начинает тухнуть, а на 9,10м начинает загораться. Проверил, работает.
Про галочку спасибо! Почему то по старинке делал.
Отправлено спустя 18 минут 38 секунд:
Пример с плавным загоранием светодиодов
Цифровые выходы ШИМ Ардуино1.flp
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 29 окт 2021, 17:30
Di123
работает
только константа ставится 256 это граница до которой надо дойти она не включительна
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 29 окт 2021, 17:39
aidar_i
Спасибо! Следующим буду аналоговый вход делать. Потом решу как блоки скомпоновать, пока изучаю.
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 01 ноя 2021, 20:36
aidar_i
Блок для Таймер 1 AVR (АТМега328).
Таймер 1 (ШИМ).flp
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 30 ноя 2021, 14:05
aidar_i
Кто в таймерах разбирается протестируйте.
Кто не очень, используйте как ШИМ выходы на 9 и 10 выводах. Кому нужно разрядность до 16 бит можно использовать 14 режим..
Этот блок можно использовать для изучения таймера1, вписал все 15 режимов, разрядность от 8 до 16 бит, режимы состояния выходов. В описаниях режимов использовал Гугл перевод из даташита. Пробовал прерывания тоже вписать , но блок получается посложнее, довести до конца не хватило времени, пока их убрал.
Даташит на Атмега328.
DOC001549488.pdf
Книга Евстифеева
Evstifeev-avr-tiny-and-mega.pdf
Настройка таймеров, режимы из даташита
Настройки таймеров из даташита.docx
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 13 июл 2022, 12:04
Dryundel
[ref=#ff8000]aidar_i[/ref], нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера.

Может пригодиться.
[spoiler=Быстрый digitalWrite]
Код: Выделить всё
//===Быстрый digitalWrite=====
void fastDigitalWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) bitWrite(PORTD, pin, val);
else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
else if (pin < 20) bitWrite(PORTC, (pin - 14), val);
#elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__)
bitWrite(PORTB, pin, val);
#else
digitalWrite(pin, val);
#endif
}
[/spoiler]
Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 16 июл 2022, 21:02
aidar_i
Dryundel писал(а): 13 июл 2022, 12:04
[ref=#ff8000]aidar_i[/ref], нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера.

Может пригодиться.
[spoiler=Быстрый digitalWrite]
Код: Выделить всё
//===Быстрый digitalWrite=====
void fastDigitalWrite(const uint8_t pin, bool val) {
#if defined(__AVR_ATmega328P__) || defined(__AVR_ATmega168__)
if (pin < 8) bitWrite(PORTD, pin, val);
else if (pin < 14) bitWrite(PORTB, (pin - 8), val);
else if (pin < 20) bitWrite(PORTC, (pin - 14), val);
#elif defined(__AVR_ATtiny85__) || defined(__AVR_ATtiny13__)
bitWrite(PORTB, pin, val);
#else
digitalWrite(pin, val);
#endif
}
[/spoiler]
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код

Работа с портами ввода и вывода Ардуино через регистры.
Добавлено: 17 июл 2022, 00:03
Dryundel
aidar_i писал(а): 16 июл 2022, 21:02
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код
Пожалуйста. Это то же самое. Только обращение организовано с помощью скриптов, которые ну никак не длиннее и не хуже чем рукописный код. Попробуй потестируй
fastDigital Read / Write и сравни. А удобство просто несравнимое!
Отправлено спустя 2 часа 31 минуту 44 секунды:
[ref=#ff8000]aidar_i[/ref], вот Вам и доказательство абсолютной идентичности обращения к портам.
ТЕСТ