Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/81: Рейтинг темы: голосов - 81, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 99
1

Программный ШИМ(PWM)

29.03.2011, 13:43. Показов 16519. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
И снова здравствуйте, вопрос состоит в следующем:

как реализовать программный шим?

мои догадки
1. сделать цикл
loop
и тут счетчик допустим от 0 до 255 .
как только счетчик досчитал до какого то значения пусть это будет 50 тогда включить и выключить светодиод
jmp loop
2.чтобы невидно было сильного мерцания допустим что светодиод тухнет и загарается с частотой 60гц.
так как шим то работает? минимум 60 герц и частота возрастает??? или как

если можно пример пожалуйста, только не си!

спасиб!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2011, 13:43
Ответы с готовыми решениями:

Генерация ШИМ в режиме Fast PWM
Доброго! Пытаюсь реализовать программу управления яркостью светодиода через UART. Вот код: .include...

STK500 как поменять яркость диода с помощью ШИМ (PWM)?
Доброго времени суток. Сравнительно недавно изучаю AVR И вот не могу понять, как с помощью ШИМ...

Atmega 2560. Генерация 16-разрядного ШИМ в режиме Fast PWM
Всем привет! Пытаюсь подать на ножку PB7 (к которой подключен светодиод) 16-разрядный ШИМ в режиме...

Программный шим atmega8
Короче нет не одного толкового урока или стати на тему программного шима всегда какой то ржб...

16
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 1,031
29.03.2011, 14:14 2
на сайте в статье про управление сервомашинками этот вопрос подробно разобран
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
29.03.2011, 14:40 3
2.чтобы невидно было сильного мерцания допустим что светодиод тухнет и загарается с частотой 60гц.
так как шим то работает? минимум 60 герц и частота возрастает??? или как
Ну во-первых, при ШИМ частота не меняется. Меняется скважность (или обратный ей к-т заполнения).
Во-вторых 60Гц это мало. Мерцание будет по глазам бить. Минимум надо 500Гц. Может это субъективное, но я ненавижу, когда что-то мерцает в боковом зрении при повороте головы.

Программный ШИМ реализуется так же, как и аппаратный: можно сделать быстрый (fast pwm), или корректный по фазе (phase correct pwm). В последнем случае счетчик реверсируется (считает в обратном направлении).
0
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 180
29.03.2011, 15:09 4
можно так же делать программно-аппаратный шим, т.е. по прерываниям от таймера руками дергаем ноги. полезно, если железных каналов мало. но логика может быть весьма изощренной.
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
29.03.2011, 15:26 5
можно так же делать программно-аппаратный шим, т.е. по прерываниям от таймера руками дергаем ноги. полезно, если железных каналов мало. но логика может быть весьма изощренной.
Угу, например когда внутри прерывания аппаратного счетчика инк(дек)рементируем еще один регистр-счетчик, тем самым имеем канал ШИМ с другой частотой, ну и т.д.
0
0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 99
29.03.2011, 21:49 6
В timer_counter_0 есть регистры... что они означают и что в них вносить(понятно что биты..)
OCR0
SFIOR
PSR10
TCCR0
FOC0
WGM00
COM0
WGMO1
CS0
TCNT0
TIFR
0CF0
TOV0
TIMSK
OCIE0
TOIE0

и например как его включать то? если например в делфи или си enabtid=trui

и хоть кто нибудь пример прекрепите! почитаю пойму
0
0 / 0 / 0
Регистрация: 12.02.2010
Сообщений: 180
29.03.2011, 22:10 7
rtfm
0
0 / 0 / 0
Регистрация: 19.09.2010
Сообщений: 1,761
30.03.2011, 01:42 8
zikitf, все эти регистры необходимы для управления разными режимами таймера, а так же в них содержатся числа, до которых таймер в данный момент досчитал (например в TCNT0), а так же другая информация.
Опции включаются/отключаются установкой соответствующих битов.

Узнать конкретно, какой регистр и бит в нём за что отвечает можно только из даташита на контроллер!

Контроллеры разные, счетчики разные, регистры тоже (хоть и схожи). Так что, как уже сказали, rtfm! :)
0
0 / 0 / 0
Регистрация: 09.01.2011
Сообщений: 544
30.03.2011, 09:05 9
Я для программного шима на тиньке таймер не юзал. Светодиодами управлять норм и так получалось.
0
.ykmori
05.02.2014, 22:40 10
тут описыввают то что вы спрашивали

Многоканальный программный ШИМ в AVR
http://habrahabr.ru/post/152299/

Код
#define F_CPU 9600000 //fuse LOW=0x7a
#include <avr/interrupt.h>
#include <util/delay.h>

uint8_t counter=0;
uint8_t lev_ch1, lev_ch2, lev_ch3;
uint8_t buf_lev_ch1, buf_lev_ch2, buf_lev_ch3;

void delay_ms(uint8_t ms) //функция задержки
{
while (ms)
{
_delay_ms(1);
ms--;
}
}

int main(void)
{
DDRB=0b00000111; // установка PortB пины 0,1,2 выходы
TIMSK0 = 0b00000010; // включить прерывание по переполнению таймера
TCCR0B = 0b00000001; // настройка таймера, делитель выкл
sei();               // разрешить прерывания

lev_ch1=0; //начальные значения
lev_ch2=64; //длительности ШИМ
lev_ch3=128; //трёх каналов

while (1)       //бесконечная шарманка
{
for (uint8_t i=0;i<255;i++)
{
lev_ch1++; //увеличиваем значения
lev_ch2++; //длительности ШИМ
lev_ch3++; //каждого канала
delay_ms(50); //пауза 50мс
}
}
}

ISR (TIM0_OVF_vect)  //обработка прерывания по переполнению таймера
{
if (++counter==0) //счетчик перехода таймера через ноль
{
buf_lev_ch1=lev_ch1; //значения длительности ШИМ
buf_lev_ch2=lev_ch2;
buf_lev_ch3=lev_ch3;
PORTB |=(1<<PB0)|(1<<PB1)|(1<<PB2); //подаем 1 на все каналы
}
if (counter==buf_lev_ch1) PORTB&=~(1<<PB1); //подаем 0 на канал
if (counter==buf_lev_ch2) PORTB&=~(1<<PB0); //по достижении
if (counter==buf_lev_ch3) PORTB&=~(1<<PB2); //заданной длительности.
}
MCSD: APP BUILDER
8794 / 4073 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
Записей в блоге: 5
05.02.2014, 23:05 11
это спрашивали в 2011. Вы чуток припоздали
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
05.02.2014, 23:47 12
Тьфу, епт, ТС же программный шим просит... Если светодиоды, то BAM рулит.
тыц 1
тыц 2
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
06.02.2014, 01:58 13
Тем более, что программа пестрит быдлокодом...
0
0 / 0 / 0
Регистрация: 25.01.2010
Сообщений: 219
06.02.2014, 03:58 14
1) полностью программный ШИМ
2) "...только не Си", всё на Асме
3) обильные комментарии в коде
Надеюсь поможет
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
06.02.2014, 06:25 15
Цитата Сообщение от kytikot
Тем более, что программа пестрит быдлокодом...
?
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
06.02.2014, 14:52 16
1 - Автор, а почему вы уперлись именно в программный шим? На шим итак много ресурсов уходит, а на программный тем более. У меня есть один пример многоканальный, так там у МК практически нет тактов вне прерывания.
2 - Чтобы светодиоды не моргали - чем больше частота, тем лучше. От 100 гц. Еще лучше от 200 гц.
3 - У всех avr есть аппаратный шим, настроил и забыл, шим аппаратно работает.
4 - Как я уже говорил, для светодиодов лучше BAM.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
06.02.2014, 15:38 17
Это ты с кем разговариваешь?
0
06.02.2014, 15:38
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2014, 15:38
Помогаю со студенческими работами здесь

Attiny 85 - программный ШИМ в прерывании
Здравствуйте. Прошу помощи, у самого понять не получается. Хочу сделать программный ШИМ на...

stm32f030f4p6 ШИМ (PWM)
Столкнулся с проблемой. Не работает ШИМ. Возможно я ЧДНТ. Контроллер: stm32f030f4p6. Среда...

STM8L ШИМ(PWM)
Здравствуйте, необходимо сделать с помощью ШИМа генерацию трехфазного напряжения. Среда разработки...

ATtiny13. PWM (ШИМ)
прошу знающих пояснить принцип управления аппаратным ШИМом, а именно: 1. как в коде Си это...

MSP430 PWM - формирование ШИМ таймером.
Пробую на один из выводов вывести сигнал ШИМ. Для формирования ШИМ исользуется TimerA. Суть...

программный PWM на HAL
Добрый день. Уже второй день бьюсь над реализацией программного ШИМ. Рекомендовали для этих целей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
В чем отличие между INNER JOIN и OUTER JOIN
bytestream 22.01.2025
В современных базах данных информация часто распределена между множеством взаимосвязанных таблиц, что делает операции объединения JOIN неотъемлемой частью работы с SQL. Эти операции позволяют. . .
Как сделать первую букву заглавной в JavaScript
bytestream 22.01.2025
JavaScript предоставляет разработчикам множество инструментов для эффективной работы с текстовыми данными. Одной из часто встречающихся задач при обработке строк является преобразование первой буквы. . .
Что такое Big O нотация и алгоритмическая сложность
bytestream 22.01.2025
Введение в алгоритмическую сложность В мире разработки программного обеспечения эффективность алгоритмов играет crucial роль в создании качественных приложений. Алгоритмическая сложность. . .
Как решать конфликты слияния (merge) в Git
bytestream 22.01.2025
Конфликты слияния в системе контроля версий Git возникают в ситуациях, когда две или более ветки разработки содержат несовместимые изменения в одних и тех же участках кода. Эти конфликты представляют. . .
Как использовать регулярные выражения
bytestream 22.01.2025
Регулярные выражения представляют собой мощный инструмент для работы с текстовыми данными, который позволяет осуществлять поиск, проверку и манипуляцию строками на основе определенных шаблонов. Этот. . .
Как выйти из Vim
bytestream 22.01.2025
Vim (Vi IMproved) представляет собой один из самых влиятельных текстовых редакторов в истории компьютерной индустрии, эволюционировавший из своего предшественника Vi, созданного Биллом Джоем в 1976. . .
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru