AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
10.10.2021, 15:13
|
#1
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
ШИМ на Ардуино
Добрый день, есть вопрос к ардуинщикам, могу ли я управлять несколькими выводами шим одновременно? Например яркость светодиодов, тремя или четырьмя разными по 3\4 шим выходами с разным уровнем яркости. С одним выходом получается без проблем, а вот с несколькими, и хватит ли скорости работы ардуинки чтобы еще вести обработку входных данных. Можно сравнить со светомузыкой или типа этого.
|
|
|
|
10.10.2021, 15:46
|
#2
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,054
Сказал спасибо: 3,042
Сказали Спасибо 3,213 раз(а) в 2,183 сообщении(ях)
|
Re: ШИМ в Ардуино
Если отказаться от Arduino IDE (со всякими digitalwrite / digitalread и кривыми скетчами) - то ещё и останется "лишняя" скорость.
__________________
Экзорцист 40-го уровня.
|
|
|
|
10.10.2021, 15:53
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,646
Сказал спасибо: 117
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: ШИМ в Ардуино
ШИМ нужен аппаратный или софтовый? Если первое, то читайте даташит на МК, который в вашей ардуйне распаян (там, ЕМНИП, даже STM32 бывают, а, скажем, у STM32F072C8T6 можно получить минимум 6 независимых групп ШИМ, от 1 до 4 каналов в каждой группе); если второе, то из-за низкой производительности количество каналов тоже сильно большим сделать не получится.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
10.10.2021, 16:02
|
#4
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: ШИМ в Ардуино
Конечно можете. Даже если ШИМ сделан программно. Снизьте частоту и глубину (разрядность) ШИМ, оптимизируйте код, напишите непосредственное управление ногами, а не через DigitalWrite и Delayms.
Используйте один аппаратный таймер, задающий тики, и счетчик тиков.
Код:
|
/* программныц счетчик тиков ШИМ */
int counter = 0;
/* скважность ШИМ */
int pwm1 = 10, pwm2 = 70, pwm3 = 50, pwm4 = 100;
int tickflag = 0; // флаг аппаратного таймера тиков
while(1)
{
/* по флагу таймера тиков: */
if(tickflag)
{
/* начало цикла, активировать все выходы,
* для которых скважность не равна 0 */
if(counter == 0)
{
if(pwm1 != 0) SetOut(1);
if(pwm2 != 0) SetOut(2);
if(pwm3 != 0) SetOut(3);
if(pwm4 != 0) SetOut(4);
}
/* сравнение каждого канала со счетчиком тиков,
* сброс выхода канала, если заданная скважность
* достигнута */
if(counter › pwm1) ResetOut(1);
if(counter › pwm2) ResetOut(2);
if(counter › pwm3) ResetOut(3);
if(counter › pwm4) ResetOut(4);
/* инкремент счетчика или сброс при достижении
* максимального счета*/
if(counter ‹ 100) counter++;
else counter = 0;
tickflag = 0; // сброс флага тиков
}
} |
tickflag должен выставляться в прерывании аппаратного таймера.
Вместо функций ResetOut и SetOut ради увеличения быстродействия можно написать непосредственное управление ногами.
Ардуинщики в большинстве весьма беспомощны, когда вопрос стоит в быстродействии и нестандартном подходе. Ничего личного, просто констатация факта. И вообще, по теме ардуины лучше обращаться непосредственно на форум arduino.ru - там хотябы понимают трагичность положения. Мы, извините, не понимаем таких мучений...
Последний раз редактировалось NewWriter; 10.10.2021 в 16:09.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
10.10.2021, 16:27
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,003
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,374 сообщении(ях)
|
Re: ШИМ в Ардуино
Сообщение от Faworit
|
есть вопрос к ардуинщикам
|
здесь нет ардуинщиков - их больно бьют
Сообщение от Faworit
|
могу ли я управлять несколькими выводами шим одновременно?
|
да, софтово почти всеми ногами МК, как описал NewWriter (делал почти так на тини2313 10бит на канал). но это
Сообщение от ForcePoint
|
Если отказаться от Arduino IDE
|
Сообщение от Faworit
|
хватит ли скорости работы ардуинки чтобы еще вести обработку входных данных
|
мы не знаем вашей задачи, но если на AVR, то может потребоваться поднять частоту кварца либо перейти на АСМ или другой тип МК (STM32, PIC24)
Arduino IDE, как и другие разновидности С, сильно "едят" ресурсы и, зачастую, много времени уделяют пересылкам "регистр-стек" или "регистр-память"
|
|
|
|
10.10.2021, 16:51
|
#6
|
Прописка
Регистрация: 28.12.2006
Сообщений: 277
Сказал спасибо: 25
Сказали Спасибо 20 раз(а) в 18 сообщении(ях)
|
Re: ШИМ в Ардуино
На макетке собрал простенькую схемку для эксперимента. Даже на резисторах(переменниках) скорость реакции меня не воодушевила. А мне еще необходимо тратить время на вывод инфы на дисплейчик. А по поводу ардуинки, так моя жаба душит ставить стм-ку, но увы, прийдется! Всем спасибо за информацию, тема закрыта.
|
|
|
|
10.10.2021, 17:11
|
#7
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: ШИМ в Ардуино
дак я ж тоже не сразу к STM-кам перешел. Раньше на 8-битниках делал, и как-то умудрялся даже графический монохромный дисплей поднимать. Так что дело тут в оптимальности кода.
|
|
|
|
10.10.2021, 17:18
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,054
Сказал спасибо: 3,042
Сказали Спасибо 3,213 раз(а) в 2,183 сообщении(ях)
|
Re: ШИМ в Ардуино
Сообщение от Faworit
|
Даже на резисторах(переменниках) скорость реакции меня не воодушевила.
|
Мой хрустальный шар показывает уши блокирующего всё analogread'а с программным опросом готовности, никчёмные delay'и и прочую срамоту.
__________________
Экзорцист 40-го уровня.
|
|
|
|
11.10.2021, 12:17
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 15.11.2010
Сообщений: 2,379
Сказал спасибо: 338
Сказали Спасибо 328 раз(а) в 253 сообщении(ях)
|
Re: ШИМ в Ардуино
Сообщение от Faworit
|
С одним выходом получается без проблем, а вот с несколькими,
|
тоже без проблем
Сообщение от Faworit
|
хватит ли скорости работы ардуинки чтобы еще вести обработку входных данных.
|
дурина - это шляпа. Без неё МК работает раз в 10 быстрее.
Я на тине выводил 6 ШИМ сигналов, принимал ИК лучи, обрабатывал сигналы конечным автоматом. МК ещё и спать успевал. На дурине сделать такое невозможно в принципе.
|
|
|
|
11.10.2021, 12:28
|
#10
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,646
Сказал спасибо: 117
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: ШИМ в Ардуино
Сообщение от Faworit
|
А по поводу ардуинки, так моя жаба душит ставить стм-ку, но увы, прийдется!
|
Если черезжопно продолжать писать код, то это не поможет!
А вот без калокуба - вполне…
Но и на абдурине можно, если использовать ее не как кусок говна, а как девборду с авркой, сделать ШИМ на куче ног даже софтово. Но лучше все же делать это не в суперлупе, а по прерыванию таймера. А еще лучше - таки делать ШИМ аппаратно.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:46.
|
|