Skip to content

Instantly share code, notes, and snippets.

@spjutbjorn
Created April 14, 2017 10:54
Show Gist options
  • Select an option

  • Save spjutbjorn/3c72046bd2160eecd9eb5590040c136b to your computer and use it in GitHub Desktop.

Select an option

Save spjutbjorn/3c72046bd2160eecd9eb5590040c136b to your computer and use it in GitHub Desktop.
arduino 25khz pwm drive
word VentPin = 3;
void setup() {
pinMode(VentPin, OUTPUT);
pwm25kHzBegin();
}
void loop() {
pwmDuty(19); // 25% (range = 0-79 = 1.25-100%)
delay(5000);
pwmDuty(39); // 50% (range = 0-79 = 1.25-100%)
delay (5000);
pwmDuty(59); // 75% (range = 0-79 = 1.25-100%)
delay (5000);
}
void pwm25kHzBegin() {
TCCR2A = 0; // TC2 Control Register A
TCCR2B = 0; // TC2 Control Register B
TIMSK2 = 0; // TC2 Interrupt Mask Register
TIFR2 = 0; // TC2 Interrupt Flag Register
TCCR2A |= (1 << COM2B1) | (1 << WGM21) | (1 << WGM20); // OC2B cleared/set on match when up/down counting, fast PWM
TCCR2B |= (1 << WGM22) | (1 << CS21); // prescaler 8
OCR2A = 79; // TOP overflow value (Hz)
OCR2B = 0;
}
void pwmDuty(byte ocrb) {
OCR2B = ocrb; // PWM Width (duty)
}
@hixfield
Copy link
Copy Markdown

Is it possible to also output a 25KHz signal for PWM on pin 11 in this way?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment