4х канальный ШИМ на UNO 100ГЦ
- Войдите на сайт для отправки комментариев
Втр, 23/01/2018 - 10:40
Необходимо 4 выхода ШИМ с частотой 100 ГЦ.
/* Arduino UNO (Atmel 328) */
#include <PWM.h>
//int pin5 = 5; // пины - таймер 0
//int pin6 = 6; // пины - таймер 0
int pin9 = 9; // пины - таймер 1
int pin10 = 10; // пины - таймер 1
int pin3 = 3; // пины - таймер 2
int pin11 = 11; // пины - таймер 2
unsigned long frequency = 100; // частота ШИМ 100(Гц)
void setup(){
InitTimersSafe();
SetPinFrequency(pin3, frequency);
SetPinFrequency(pin11, frequency);
SetPinFrequency(pin9, frequency);
SetPinFrequency(pin10, frequency);
}
void loop(){
pwmWrite(pin9, 125);
pwmWrite(pin10, 125);
pwmWrite(pin3, 125);
pwmWrite(pin11, 125);
}
Но в результате: на пин 11 тишина.
В чем может быть проблема.
а 11 вывод у вас аппаратно ШИМ?? (хотя по опсанию вроде должен быть ШИМ)
попробуйте только его ставить и посмотреть что на нем... ну или вместо него другой поставить
А в loop-то зачем это делать?
Перенесите строки 20-23 в setup и скажите, что получилось.
Да, мне необходим аппаратный ШИМ.
А в loop-то зачем это делать?
Перенесите строки 20-23 в setup и скажите, что получилось.
В loop я хочу менять скважность в зависимости от логики кода.
Перенес в setup, но ничего не поменялось. А именно на пине 3,9,10 частота 100 Гц, на 11 - так наводки и помехи очень малые. 11 пин жив, проверял отдельным скетчем analogWrite(11,127), частота только там дефолтовская.
С горем по-полам взял код(функцию) из arduino.com,
void setPwmFrequency(int pin, int divisor) { byte mode; if(pin == 5 || pin == 6 || pin == 9 || pin == 10) { switch(divisor) { case 1: mode = 0x01; break; case 8: mode = 0x02; break; case 64: mode = 0x03; break; case 256: mode = 0x04; break; case 1024: mode = 0x05; break; default: return; } if(pin == 5 || pin == 6) { TCCR0B = TCCR0B & 0b11111000 | mode; } else { TCCR1B = TCCR1B & 0b11111000 | mode; } } else if(pin == 3 || pin == 11) { switch(divisor) { case 1: mode = 0x01; break; case 8: mode = 0x02; break; case 32: mode = 0x03; break; case 64: mode = 0x04; break; case 128: mode = 0x05; break; case 256: mode = 0x06; break; case 1024: mode = 0x07; break; default: return; } TCCR2B = TCCR2B & 0b11111000 | mode; } }В итоге получились такие частоты
ШИМ 100 Гц на все четырех пинах arduino UNO пока не получается. Пока только 122 Гц (