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

Создаем свой блок. Вопросы, помощь знатоков.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

неработает опять ничего :smile198:
в прошлый раз шим не работал
а щас работает но теперь выход не работает
Цифровые входы и выходы Ардуино1 (1).rar
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение 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 бит.
Сейчас ШИМ Гувера работает с моим цифровым выходом..
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось aidar_i 29 окт 2021, 01:58, всего редактировалось 7 раз.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

где то ошибка на 16 бит шим работает как вкл выкл
2021-10-28_004815.png
Отправлено спустя 1 минуту 5 секунд:
либо теоретически блок ускорения не всостоянии пощитать такие мелкие импульсы

Отправлено спустя 52 секунды:
хотя нет я интегер поставил зря
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
AlexCrane
Капитан
Сообщения: 903
Зарегистрирован: 20 окт 2017, 13:22
Откуда: Ульяновск
Имя: Александр
Поблагодарили: 12 раз

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

Сообщение AlexCrane »

[ref]Di123[/ref], Исправил блоки GyverPWM
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

AlexCrane писал(а): 27 окт 2021, 22:35 Di123, Исправил блоки GyverPWM
Пошла движуха на форуме! Изображение
Изображение
Это радует.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Создавая блоки на новом редакторе, осознал, что он, в некотором роде, может выступать (и выступает) как библиотека, которая не занимает память МК.
Вообще думаю, если у нас программа не для программистов с кодом, почему генерируемый код в с++? Какая разница человеку , что там?
Я создаю блоки этой темы (хотя есть продвинутые блоки наших форумчан по этой теме ), чтобы посмотреть, что в итоге получается. Мне кажется , красиво получается.
Я пытался заменить блоками входа выхода вот это: https://github.com/arduino/ArduinoCore- ... _digital.c
Таким образом язык программирования FLProg появляется!
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

[ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Di123 писал(а): 28 окт 2021, 20:01 [ref=#000080]aidar_i[/ref], а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

[ref=#000080]aidar_i[/ref], да работает на 16 15 14 и у алекса тоже теперь норм
но под светодиодную подсветку в любом случае брать не выше 12 бит ибо частота там приемлемая для здоровья глаз
у вас для битов маленькая частота выбора возможности

Отправлено спустя 1 минуту 17 секунд:
ну в край 13 бит на фасте ещё можно
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Di123 писал(а): 28 окт 2021, 20:37 у вас для битов маленькая частота выбора возможности
Москва тоже строилась не сразу! :)

Отправлено спустя 2 часа 8 минут 19 секунд:
ЗДЕСЬ добавил на 8, 10, 12 бит. Добавил проверку МК и выводов.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

ШИМ на 9, 10, 11 выводах
Цифровые выходы ШИМ Ардуино.flp
Отправлено спустя 7 минут 13 секунд:
[ref]Di123[/ref], сможете проверить?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

[ref=#000080]aidar_i[/ref], перемаргивают
а что там не так могло быть

в следующий раз когда будете заниматься построением переменных у щетчика там есть галочка сброса в 0
2021-10-29_194813.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Di123 писал(а): 29 окт 2021, 15:56 [ref=#000080]aidar_i[/ref], перемаргивают
а что там не так могло быть

В примере, 11я уменьшается ступеньчато, 9,10 увеличиваются ступенчато. На старте горит светодиод на 11 пине, он начинает тухнуть, а на 9,10м начинает загораться. Проверил, работает.
Про галочку спасибо! Почему то по старинке делал.

Отправлено спустя 18 минут 38 секунд:
Пример с плавным загоранием светодиодов
Цифровые выходы ШИМ Ардуино1.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03 ноя 2018, 19:38
Имя: Дмитрий

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

Сообщение Di123 »

работает
только константа ставится 256 это граница до которой надо дойти она не включительна
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Спасибо! Следующим буду аналоговый вход делать. Потом решу как блоки скомпоновать, пока изучаю.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Блок для Таймер 1 AVR (АТМега328).
Таймер 1 (ШИМ).flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Кто в таймерах разбирается протестируйте.
Кто не очень, используйте как ШИМ выходы на 9 и 10 выводах. Кому нужно разрядность до 16 бит можно использовать 14 режим..
Этот блок можно использовать для изучения таймера1, вписал все 15 режимов, разрядность от 8 до 16 бит, режимы состояния выходов. В описаниях режимов использовал Гугл перевод из даташита. Пробовал прерывания тоже вписать , но блок получается посложнее, довести до конца не хватило времени, пока их убрал.
Даташит на Атмега328.
DOC001549488.pdf
Книга Евстифеева
Evstifeev-avr-tiny-and-mega.pdf
Настройка таймеров, режимы из даташита
Настройки таймеров из даташита.docx
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение 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]
aidar_i
Полковник
Сообщения: 3360
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 14 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение 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]
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код :)
Аватара пользователя
Dryundel
Полковник
Сообщения: 2473
Зарегистрирован: 22 май 2017, 23:15
Откуда: Ярославль
Имя: Андрей
Благодарил (а): 10 раз
Поблагодарили: 40 раз

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

Сообщение Dryundel »

aidar_i писал(а): 16 июл 2022, 21:02 Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код
Пожалуйста. Это то же самое. Только обращение организовано с помощью скриптов, которые ну никак не длиннее и не хуже чем рукописный код. Попробуй потестируй fastDigital Read / Write и сравни. А удобство просто несравнимое!

Отправлено спустя 2 часа 31 минуту 44 секунды:
[ref=#ff8000]aidar_i[/ref], вот Вам и доказательство абсолютной идентичности обращения к портам. ТЕСТ
Ответить

Вернуться в «Разработка пользовательских блоков»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя