Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 29.03.2014, 15:05  
mikesmith
Администратор
 
Аватар для mikesmith
 
Регистрация: 10.05.2003
Сообщений: 1,739
Сказал спасибо: 497
Сказали Спасибо 2,686 раз(а) в 595 сообщении(ях)
mikesmith на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Народ, зачем ругаться)) На куче форумов задавался этот вопрос, значит начинающие сталкиваются с подобным ограничением. Не виноваты же они, что что ардуина не учит программера работе с таймерами и PWM.

Я и сам вот затупил с этим ШИМ'ом ардуиновским (ихняя analogWrite - зло, начинающему будет сложно понять, в чем там дело), редко с ним имею дело, но для разработки готовых кирпичиков иногда удобно, и понятия не имел что ихний штатный ШИМ работает на такой низкой частоте, а потом просто поменял делитель. Писалось бы под "голый" контроллер без встроенных функция, сразу было бы понятно, что надо настроить делители. Если эта инфа кому поможет - буду рад)
Реклама:
__________________
C уважением, Михаил
Ищите даташиты на KAZUS.RU: http://kazus.ru/datasheets/index.html
mikesmith вне форума  
Сказали "Спасибо" mikesmith
lviv21 (22.12.2015)
Непрочитано 29.03.2014, 18:45  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Сообщение от mikesmith Посмотреть сообщение
встроенная функция analogWrite - организует на ножке широтноимпульсную модуляцию с частотой около 480-490Гц (при штатных 16Мгц)
Как же им это "удалось", это надо постараться!
Судя по ДШ

При тактовой 16 МГц и прескалере таймера=1, можно иметь аппаратный ШИМ:
16000/256=62,5 кГц
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 29.03.2014, 19:42  
mikesmith
Администратор
 
Аватар для mikesmith
 
Регистрация: 10.05.2003
Сообщений: 1,739
Сказал спасибо: 497
Сказали Спасибо 2,686 раз(а) в 595 сообщении(ях)
mikesmith на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Вот они и поделили на 64/256 (в зависимости от ноги) и ничиго никому не сказали)) Мол, для управления сервомоторчиком или светодиодом "пофэйдить" - хватит. А если светодиодов несколько и индикация динамическая - покупайте ихние платки с аппаратными RGB-дровами и ни слова о делителях (это я о начинающих) %)
__________________
C уважением, Михаил
Ищите даташиты на KAZUS.RU: http://kazus.ru/datasheets/index.html
mikesmith вне форума  
Непрочитано 29.03.2014, 20:22  
gary2007
Почётный гражданин KAZUS.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

mikesmith, посмотрите, если niXto говорит что можно вставлять ассемблерные вставки, то измените прескалер таймера, к примеру для таймера 0:
Код:
  ldi r16,(1‹‹CS00) ;предделитель таймера ставим=1
  out TCCR0B,r16   ;записываем в регистр
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Сказали "Спасибо" gary2007
mikesmith (29.03.2014)
Непрочитано 29.03.2014, 20:53  
mikesmith
Администратор
 
Аватар для mikesmith
 
Регистрация: 10.05.2003
Сообщений: 1,739
Сказал спасибо: 497
Сказали Спасибо 2,686 раз(а) в 595 сообщении(ях)
mikesmith на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Да уже изменил))

Код:
TCCR1B = TCCR1B & 0b11111000 | 0x01;
TCCR2B = TCCR2B & 0b11111000 | 0x01;
Но можно и ассемблерной вставкой, конечно
__________________
C уважением, Михаил
Ищите даташиты на KAZUS.RU: http://kazus.ru/datasheets/index.html
mikesmith вне форума  
Непрочитано 22.12.2015, 21:58  
AleksandrAVR
Частый гость
 
Регистрация: 22.12.2015
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
AleksandrAVR на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Добрый день!
Чтобы не заводить новую тему, спрошу здесь.
Мега2560
Нужен ШИМ для 6 светодиодов, так чтобы не видно было мерцаний, 490ГЦ не подходит.

Пишу в сетапе
TCCR0B = TCCR0B & 0b11111000 | 0x02;
TCCR1B = TCCR1B & 0b11111000 | 0x02;
TCCR2B = TCCR2B & 0b11111000 | 0x02;

Вывожу на диоды

analogWrite(led_3, light); и т.д. на все ноги

- на 9,10,11 ногах все гуд, на 3,5,6 как было так и остается низкая частота.

Видимо какие-то конфликты с таймерами идут.
Я понимаю что надо читать даташиты, но в двух словах, это можно как-то поправить?
Спасибо.
AleksandrAVR вне форума  
Непрочитано 22.12.2015, 22:40  
mikesmith
Администратор
 
Аватар для mikesmith
 
Регистрация: 10.05.2003
Сообщений: 1,739
Сказал спасибо: 497
Сказали Спасибо 2,686 раз(а) в 595 сообщении(ях)
mikesmith на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

1) Arduino 2560 имеет 12 пинов, поддерживающих ШИМ. Номера пинов от 2 до 13.

2) Частота ШИМ по умолчанию 490 Гц для всех выводов, за исключением 13 и 4, частота на которых составляет 980 Гц.

3) Таймеров несколько, все управляют разными выводами:

Таймер 0 (PWM пинов 13 и 4);
таймер 1 (PWM пинов 12 и 11);
Таймер 2 (PWM пинов 10 и 9);
Таймер 3 (PWM пинов 5, 3 и 2);
Таймер 4 (PWM пинов 8, 7 и 6);

4) Частоты ШИМ в зависимости от делителя (для TCCR1B, TCCR2B, TCCR3B, TCCR4B):

делитель = 1 ---› частота ШИМ 31000 Гц
делитель = 2 ---› частота ШИМ 4000 Гц
делитель = 3 ---› частота ШИМ 490 Гц (значение по умолчанию)
делитель = 4 ---› частота ШИМ 120 Гц
делитель = 5 ---› частота ШИМ 30 Гц
делитель = 6 ---› частота ШИМ ‹20 Гц

для TCCR0B (Таймер 0):

делитель = 1 ---› частота ШИМ 62000 Гц
делитель = 2 ---› частота ШИМ 7800 Гц
делитель = 3 ---› частота ШИМ 980 Гц (значение по умолчанию)
делитель = 4 ---› частота ШИМ 250 Гц
делитель = 5 ---› частота ШИМ 60 Гц
делитель = 6 ---› частота ШИМ ‹20 Гц

P.S. Обратите внимание, что на TCCR0B (Таймер 0) завязаны все основные функции времени в Arduino: то есть, если вы измените этот таймер, такие функции как Delay(), Millis() и т.п. будет продолжать работать, но в другом масштабе времени (быстрее или медленнее)
__________________
C уважением, Михаил
Ищите даташиты на KAZUS.RU: http://kazus.ru/datasheets/index.html
mikesmith вне форума  
Непрочитано 22.12.2015, 22:42  
mikesmith
Администратор
 
Аватар для mikesmith
 
Регистрация: 10.05.2003
Сообщений: 1,739
Сказал спасибо: 497
Сказали Спасибо 2,686 раз(а) в 595 сообщении(ях)
mikesmith на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Так как вы просили "в двух словах", в вашем случае вы забыли про третий и четвертый таймеры:

TCCR3B = TCCR3B & 0b11111000 | 0x02;
TCCR4B = TCCR4B & 0b11111000 | 0x02;

Ну и помните про TCCR0B, если собираетесь работать с функциями задержек, пересчитайте их.
__________________
C уважением, Михаил
Ищите даташиты на KAZUS.RU: http://kazus.ru/datasheets/index.html
mikesmith вне форума  
Непрочитано 22.12.2015, 23:16  
AleksandrAVR
Частый гость
 
Регистрация: 22.12.2015
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
AleksandrAVR на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Спасибо большое, то что надо. Видимо я на другой контроллер инфу посмотрел. Спасибо, все работает!
AleksandrAVR вне форума  
Непрочитано 07.03.2017, 15:27  
Fer3ll
Прохожий
 
Регистрация: 07.03.2017
Сообщений: 5
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fer3ll на пути к лучшему
По умолчанию Re: Увеличить частоту ШИМ'а Arduino

Я только начинающий, но что то тут не сходится.
Мы говорим тут о ТCCR0/TCCR1/TCCR2
ТCCR0 и TCCR2 - 8 битные таймеры/счетчики.
TCCR1 - 16 битный таймер счетчик.

Итак по Вашей технологии пишем: делитель = 1 ---› частота ШИМ 62000 Гц т.е.
TCCR0B=TCCR0B&0b11111000|0x01;
На частотомере получаем совсем не 62000 Гц а 31250 Гц.
При дальнейшем изменении значений константы "0х01" понял что пост перемешан.

от сюда следует:

ТАЙМЕР/СЧЕТЧИК 0 (8bit)

TCCR0B=TCCR0B&0b11111000|‹константа›;

Константа | Делитель Частота(Гц)
0x01| 1 31250
0x02 | 8 3906.25
0x03 | 64 488.28125
0x04 | 256 122.0703125
0x05 | 1024 30.517578125
-----------------------------------------------------------
ТАЙМЕР/СЧЕТЧИК 1 (16bit)

TCCR1B=TCCR1B&0b11111000|‹константа›;

Константа Делитель Частота(Гц)
0x01 1 62500
0x02 8 7812.5
0x03 64 976.5625
0x04 256 244.140625
0x05 1024 61.03515625
Fer3ll вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прошивать Arduino mini nikola-7 Песочница (вопросы новичков) 5 10.03.2014 14:15
Проблема с Arduino Motor Shield domka Песочница (вопросы новичков) 6 29.07.2013 11:56
Алгоритм программного шима для светодиодов whoim AVR 20 30.06.2013 18:00
Из ШИМа - аналог. vo1 Микроконтроллеры, АЦП, память и т.д 17 24.12.2009 14:54


Часовой пояс GMT +4, время: 22:17.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot