Můžete nakonfigurovat časovač 1 tak, aby cykloval na 25 kHz ve fázově správném režimu PWM, a použít dva výstupy na pinech 9 a 10 takto:
// PWM output @ 25 kHz, only on pins 9 and 10.// Output value should be between 0 and 320, including. vyloučit analogWrite25k (int pin, int value) {switch (pin) {případ 9: OCR1A = hodnota; přestávka; případ 10: OCR1B = hodnota; přestávka; výchozí: // žádný jiný pin nebude fungovat; }} void setup () {// Konfigurace časovače 1 pro PWM @ 25 kHz. TCCR1A = 0; // vrátit zpět konfiguraci provedenou ... TCCR1B = 0; // ... základní knihovna Arduino TCNT1 = 0; // reset časovače TCCR1A = _BV (COM1A1) // neinvertovaný PWM na kap. A | _BV (COM1B1) // stejné na ch; B | _BV (WGM11); // režim 10: ph. správné PWM, TOP = ICR1 TCCR1B = _BV (WGM13) // ditto | _BV (CS10); // prescaler = 1 ICR1 = 320; // TOP = 320 // Nastaví PWM piny jako výstup. pinMode (9, VÝSTUP); pinMode (10, OUTPUT);} void loop () {// Jen příklad: analogWrite25k (9, 110); analogWrite25k (10, 210); pro (;;) ; // nekonečná smyčka}
Zápis hodnoty 0 pomocí analogWrite25k ()
znamená, že pin bude vždy LOW, zatímco 320 znamená vždy HIGH. Normální analogWrite ()
by měl téměř fungovat, ale bude interpretovat 255 stejně jako 320 (iealways HIGH).
Tento kód předpokládá Arduino Uno nebo podobná deska (ATmega168 nebo 328 @ 16 MHz). Metoda použitá zde vyžaduje 16bitový časovač, a tudíž ituses Timer 1, protože je jediný dostupný na Uno; proto jsou k dispozici pouze dva výstupy. Metodu lze přizpůsobit jiným deskám založeným na AVR s 16bitovým časovačem. Jak poznamenal Gerben, tento časovač by měl mít odpovídající registr ICRx. Na Arduino Mega jsou 4 takové časovače, každý se 3 výstupy.