Страница 3 из 3

Работа с портами ввода и вывода Ардуино через регистры.

Добавлено: 27 окт 2021, 04:37
Di123
неработает опять ничего :smile198:
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется

Работа с портами ввода и вывода Ардуино через регистры.

Добавлено: 27 окт 2021, 19:45
aidar_i
Di123 писал(а): 27 окт 2021, 04:37 неработает опять ничего :smile198:
в прошлый раз шим не работал
а щас работает но теперь выход не работает

Цифровые входы и выходы Ардуино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 неработает опять ничего :smile198:
в прошлый раз шим не работал
а щас работает но теперь выход не работает

Цифровые входы и выходы Ардуино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], вот Вам и доказательство абсолютной идентичности обращения к портам. ТЕСТ