আপনি পর্যায় সঠিক পিডব্লিউএম মোডে 25 কিলাহার্টজ থেকে টাইমার 1 থেকে চক্রটি কনফিগার করতে পারেন এবং এটি পিন 9 এবং 10 এর মতো দুটি আউটপুট ব্যবহার করতে পারেন:
// PWM output @ 25 kHz, only on pins 9 and 10.
// Output value should be between 0 and 320, inclusive.
void analogWrite25k(int pin, int value)
{
switch (pin) {
case 9:
OCR1A = value;
break;
case 10:
OCR1B = value;
break;
default:
// no other pin will work
break;
}
}
void setup()
{
// Configure Timer 1 for PWM @ 25 kHz.
TCCR1A = 0; // undo the configuration done by...
TCCR1B = 0; // ...the Arduino core library
TCNT1 = 0; // reset timer
TCCR1A = _BV(COM1A1) // non-inverted PWM on ch. A
| _BV(COM1B1) // same on ch; B
| _BV(WGM11); // mode 10: ph. correct PWM, TOP = ICR1
TCCR1B = _BV(WGM13) // ditto
| _BV(CS10); // prescaler = 1
ICR1 = 320; // TOP = 320
// Set the PWM pins as output.
pinMode( 9, OUTPUT);
pinMode(10, OUTPUT);
}
void loop()
{
// Just an example:
analogWrite25k( 9, 110);
analogWrite25k(10, 210);
for (;;) ; // infinite loop
}
0 এর সাথে মান analogWrite25k()
লিখার অর্থ পিনটি সর্বদা স্বল্প থাকে, যেখানে 320 মানে সর্বদা উচ্চ হয়। নিয়মিত প্রায় কাজ করা analogWrite()
উচিত , তবে এটি 255 একই হিসাবে 320 (অর্থাত্ সর্বদা উচ্চ) হিসাবে ব্যাখ্যা করবে।
এই কোডটি একটি আরডুইনো ইউনো বা অনুরূপ বোর্ড (এটিমেগা 168 বা 328 @ 16 মেগাহার্টজ) গ্রহণ করে। এখানে ব্যবহৃত পদ্ধতিটির জন্য 16-বিট টাইমার প্রয়োজন, এবং এটি টাইমার 1 ব্যবহার করে কারণ এটি ইউনোতে একমাত্র উপলব্ধ; এজন্য মাত্র দুটি আউটপুট উপলব্ধ। পদ্ধতিটি 16-বিট টাইমার সহ অন্যান্য এভিআর ভিত্তিক বোর্ডগুলির সাথে অভিযোজিত হতে পারে। গারবেন যেমন উল্লেখ করেছেন, সেই টাইমারটির সাথে সম্পর্কিত আইসিআরএক্স রেজিস্টার থাকা উচিত। আরডুইনো মেগায় এমন 4 টি টাইমার রয়েছে, যার প্রতিটি 3 টি আউটপুট রয়েছে।