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

ШИИМ 10 БИТ пользовательский блока на Си

Добавлено: 07.07.2016{, 21:07}
Слимпер
Попалась мне на глаза интересная библиотека TimerOne, одна из функций возможность генерировать 10 Битный ШИМ с настраиваемым периодом.

Решил сделать блок:

Название :Блок ШИМ 10Бит

Разрядностью 10Бит (0-1023)
Период можно настраивать

Получилось два блока.
Описание:


PWM_CONST_(CODE)
СпойлерПоказать
Блок  ШИМ
Разрядностью 10Бит (0-1023)
Период можно настраивать
!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Входа
PWM_1, PWM_2, PWM_3 - задается скважность ШИМ в виде значений 0-1023

Параметры
period – Период ШИМ в микросекундах
меньше 100 лучше не ставить
Верхний предел 8388480 (8,4секунды)

pin_1, pin_2, pin_3 - номер пина соответствующего входам PWM_1, PWM_2, PWM_3
Если вход не используется, то надо выставлять 0.
Возможно использовать для следующих пинов
Arduino Uno          9, 10
Arduino Leonardo     9, 10, 11
Arduino Mega          11, 12, 13

encoder - Совместно сблоком Энкодер_С
Сделал для возможности использовать ШИМ, при примении  блока Энкодер_С, в этом режиме параметр period неиспользуется
Период ШИМ будет равен значению  period из блока Энкодер_С

! Блок Энкодер_С должен размещятся в проекте раньше Блок ШИМ
PWM_REG_(CODE)
СпойлерПоказать
Блок ШИМ
Разрядностью 10Бит (0-1023)
Период можно настраивать
!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Входа
PWM_1, PWM_2, PWM_3 - задается скважность ШИМ в виде значений 0-1023
period – Период ШИМ в микросекундах (если оставить пустым будет период 2000мкс)
Меньше 100 лучше не ставить (хотя это надо тестировать)
Верхний предел 8388480 (8,4секунды)

Параметры
pin_1, pin_2, pin_3 - номер пина соответствующего входам PWM_1, PWM_2, PWM_3
Если вход не используется, то надо выставлять 0.
Возможно использовать для следующих пинов
Arduino Uno              9, 10
Arduino Leonardo     9, 10, 11
Arduino Mega          11, 12, 13
Возможно использовать для следующих пинов
Arduino Uno                  9, 10
ArduinoLeonardo          9, 10, 11
ArduinoMega                11, 12, 13


!!!!Возможны конфликты с блоками где используется Timer1 (из известных мне Rremote, Servo)

Еще два блока полный аналог предыдущих, только используется Timer3 (есть только в ArduinoLeonardo ArduinoMega)

PWM_CONST_T3
PWM_REG_T3-CODE


Возможно использовать для следующих пинов
Arduino Leonardo     5
Arduino Mega            2, 3, 5


Если у кого есть осциллограф (и не лень),  проверти правильность работы и минимальной возможный период.

Обновление

Добавил второй вариант с заданием Периода через вход блока, т.е можно регулировать Период ШИМ по ходу выполнения программы.

Актуальные версии блоков находятся ШИМ 10 БИТ с изменяемым периодом 

Все вопросы и предложения в эту тему.

ШИИМ 10 БИТ пользовательский блока на Си

Добавлено: 28.01.2024{, 23:46}
VNL64T
В целом плохая идея, особенно AVR. При росте проекта начнутся прболемы.
Переходите на другие платформы.
На RP2040 на втором ядре совсем хорошо такие задумки получаются. Недавно для одной локальной задачи генерил необходимую последовательность с частотой 300кгц. ШИМ наверное с частотой 150-200кГц получится.
Полностью согласен... :smile37:
Но.. аппаратный шим тем и хорош что работает минуя основной код, т.е. если код основной программы не будет залезать в установки шим на каждом цикле он должен справится без проблем, и примеров тому масса.. например моргать диодом а параллельно выполнять основной код с другими задачами.. по сути получается что шим использует только прерывания таймера не касаясь основной программы..
Из этого следует что он может, а вот незнание предмета т.е. языка есть преграда..

Может заодно подскажите программу на простом внятнографическом чтобы Raspberry Pi программировать?
Спасибо..

ШИИМ 10 БИТ пользовательский блока на Си

Добавлено: 29.01.2024{, 04:18}
ecoins
VNL64T писал(а):
28.01.2024{, 23:46}
Может заодно подскажите программу на простом внятнографическом чтобы Raspberry Pi программировать?
Спасибо..
Все тесты в теме "Экосреда ecoins" можно грузить в любой контроллер - ограничение только по памяти.

ШИИМ 10 БИТ пользовательский блока на Си

Добавлено: 29.01.2024{, 07:54}
VNL64T
ecoins писал(а):
29.01.2024{, 04:18}
Все тесты в теме "Экосреда ecoins" можно грузить в любой контроллер - ограничение только по памяти.
:smile37:

Если долго мучится? что-нибудь получится!
Шагами в любую сторону, градация и заполнения почти любые.. (тестировал на 50% заполнения..)
ATmega328p, 1 MHz просто для эксперимента (фронты чуть заваливает)

Для тех кто пойдет по моим стопам..
Редактирование блока- Параметры пользователя константа Pin_1 = изменяем значение по умолчанию на нужный (нам) ШИМ вывод (или убираем вовсе значение по умолчанию (там у автора ошибочная привязка к 9 пину..)
Далее в окне кода DeclareSelection изменяем строку на unsigned int P=0; (при заполнении 0 будет 0 )
все сохраняем..

Далее прежде чем сменить Период обязательно нужно блокировать Заполнение..
Т.е. на момент смены Периода Заполнение должно быть НОЛЬ!!! (Иначе не даст сменить Период)
После смены Периода с задержкой 5мс. возвращаем и Заполнение то что было или иное..


Всем спасибо.. особенно автору Блока!!! :yahoo:
Вижу что не сложный но в скобках весь попутался :fie: