0 / 0 / 0
Регистрация: 19.03.2011
Сообщений: 99
|
|
1 | |
Программный ШИМ(PWM)29.03.2011, 13:43. Показов 16519. Ответов 16
Метки нет (Все метки)
И снова здравствуйте, вопрос состоит в следующем:
как реализовать программный шим? мои догадки 1. сделать цикл loop и тут счетчик допустим от 0 до 255 . как только счетчик досчитал до какого то значения пусть это будет 50 тогда включить и выключить светодиод jmp loop 2.чтобы невидно было сильного мерцания допустим что светодиод тухнет и загарается с частотой 60гц. так как шим то работает? минимум 60 герц и частота возрастает??? или как если можно пример пожалуйста, только не си! спасиб!!!
0
|
29.03.2011, 13:43 | |
Ответы с готовыми решениями:
16
Генерация ШИМ в режиме Fast PWM STK500 как поменять яркость диода с помощью ШИМ (PWM)? Atmega 2560. Генерация 16-разрядного ШИМ в режиме Fast PWM Программный шим atmega8 |
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 |
Во-вторых 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); //заданной длительности. } |
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 | |
06.02.2014, 15:38 | |
Помогаю со студенческими работами здесь
17
Attiny 85 - программный ШИМ в прерывании stm32f030f4p6 ШИМ (PWM) STM8L ШИМ(PWM) ATtiny13. PWM (ШИМ) MSP430 PWM - формирование ШИМ таймером. программный PWM на HAL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
В чем отличие между 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
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
|