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

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

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

#41

Сообщение Di123 » 27.10.2021{, 04:37}

неработает опять ничего :smile198:
в прошлый раз шим не работал
а щас работает но теперь выход не работает
на 10 не горит на 9 меняется
меняю на родной пин 10 всё нормально на 10 горит на 9 меняется

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#42

Сообщение aidar_i » 27.10.2021{, 11:24}

Di123 писал(а):
27.10.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.10.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
(236.44 КБ) 30 скачиваний
ВРЕМЕННО УДАЛИЛ
Блок ШИМ бета, недооформлен, на 8, 10, 12, 14, 15, 16 бит.
Сейчас ШИМ Гувера работает с моим цифровым выходом..
Последний раз редактировалось aidar_i 29.10.2021{, 01:58}, всего редактировалось 7 раз.

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

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

#43

Сообщение Di123 » 27.10.2021{, 20:49}

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

Отправлено спустя 52 секунды:
хотя нет я интегер поставил зря

Аватара пользователя
AlexCrane
Капитан
Сообщения: 895
Зарегистрирован: 20.10.2017{, 13:22}
Репутация: 294
Откуда: Ульяновск
Имя: Александр

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

#44

Сообщение AlexCrane » 27.10.2021{, 22:35}

Di123, Исправил блоки GyverPWM
Если не знаю, то не скажу. Если скажу, то сначала проверю...
Если нет возможности отблагодарить материально, хотя бы оцени пост....

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

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

#45

Сообщение Dryundel » 28.10.2021{, 00:22}

AlexCrane писал(а):
27.10.2021{, 22:35}
Di123, Исправил блоки GyverPWM
Пошла движуха на форуме! Изображение
Изображение
Это радует.

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#46

Сообщение aidar_i » 28.10.2021{, 06:18}

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

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

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

#47

Сообщение Di123 » 28.10.2021{, 20:01}

aidar_i, а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#48

Сообщение aidar_i » 28.10.2021{, 20:17}

Di123 писал(а):
28.10.2021{, 20:01}
aidar_i, а ваш шим я так понял самый быстрый сейчас ?
тоесть если мне надо на 16 бит крутануть выходной сигнал от 0 до 65535 шагов то каждый шаг он выполнит на 3 мкс быстрее итого 3*65535=192мс уменьшится цыкл программы в диапазоне момента нарастания шима ?
Испытайте, блок ШИМ на 16 бит работает, 14, 15 еще нужно подкорректировать.

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

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

#49

Сообщение Di123 » 28.10.2021{, 20:36}

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

Отправлено спустя 1 минуту 17 секунд:
ну в край 13 бит на фасте ещё можно

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#50

Сообщение aidar_i » 28.10.2021{, 20:59}

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

Отправлено спустя 2 часа 8 минут 19 секунд:
ЗДЕСЬ добавил на 8, 10, 12 бит. Добавил проверку МК и выводов.

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#51

Сообщение aidar_i » 29.10.2021{, 14:38}

ШИМ на 9, 10, 11 выводах
Цифровые выходы ШИМ Ардуино.flp
(541.1 КБ) 37 скачиваний
Отправлено спустя 7 минут 13 секунд:
Di123, сможете проверить?

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

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

#52

Сообщение Di123 » 29.10.2021{, 15:56}

aidar_i, перемаргивают
а что там не так могло быть

в следующий раз когда будете заниматься построением переменных у щетчика там есть галочка сброса в 0
2021-10-29_194813.png

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#53

Сообщение aidar_i » 29.10.2021{, 16:59}

Di123 писал(а):
29.10.2021{, 15:56}
aidar_i, перемаргивают
а что там не так могло быть

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

Отправлено спустя 18 минут 38 секунд:
Пример с плавным загоранием светодиодов
Цифровые выходы ШИМ Ардуино1.flp
(457.61 КБ) 34 скачивания

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

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

#54

Сообщение Di123 » 29.10.2021{, 17:30}

работает
только константа ставится 256 это граница до которой надо дойти она не включительна

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#55

Сообщение aidar_i » 29.10.2021{, 17:39}

Спасибо! Следующим буду аналоговый вход делать. Потом решу как блоки скомпоновать, пока изучаю.

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#56

Сообщение aidar_i » 01.11.2021{, 20:36}

Блок для Таймер 1 AVR (АТМега328).
Таймер 1 (ШИМ).flp
(682.92 КБ) 44 скачивания

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#57

Сообщение aidar_i » 30.11.2021{, 14:05}

Кто в таймерах разбирается протестируйте.
Кто не очень, используйте как ШИМ выходы на 9 и 10 выводах. Кому нужно разрядность до 16 бит можно использовать 14 режим..
Этот блок можно использовать для изучения таймера1, вписал все 15 режимов, разрядность от 8 до 16 бит, режимы состояния выходов. В описаниях режимов использовал Гугл перевод из даташита. Пробовал прерывания тоже вписать , но блок получается посложнее, довести до конца не хватило времени, пока их убрал.
Даташит на Атмега328.
DOC001549488.pdf
(5.14 МБ) 29 скачиваний
Книга Евстифеева
Evstifeev-avr-tiny-and-mega.pdf
(2.5 МБ) 32 скачивания
Настройка таймеров, режимы из даташита

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

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

#58

Сообщение Dryundel » 13.07.2022{, 12:04}

aidar_i, нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера. :) Может пригодиться.
Быстрый 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
    } 

aidar_i
Полковник
Сообщения: 3122
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 675
Откуда: Уфа
Имя: Айдар
Контактная информация:

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

#59

Сообщение aidar_i » 16.07.2022{, 21:02}

Dryundel писал(а):
13.07.2022{, 12:04}
aidar_i, нашел я интересный универсальный код для быстрой работы с пинами.
Подрезал у Гайвера. :) Может пригодиться.
Быстрый 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
    } 
Спасибо!
У меня тут реализовано прямое обращение портам, быстрее только ассемблер или машинный код :)

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

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

#60

Сообщение Dryundel » 16.07.2022{, 21:32}

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

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

Ответить

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