Логічно випливає, що частота сигналу ШІМ визначається швидкістю лічильника. Припускаючи, що ви використовуєте ATmega168 з прошитим на ньому завантажувачем Arduino Diecimila (а це саме те, якщо ви купили Arduino Diecimila), період цього лічильника - один системний тактовий сигнал, поділеній на певну величину попереднім подільником.
Попередній подільник – 3-х бітове значення, яке зберігається в трьох молодших бітах регістрів лічильника/таймера: CS02, CS01 і CS00. Є три таких регістри таймера/лічильника: TCCR0B, TCCR1B і TCCR2B.
Оскільки існує три різних подільники, то шість контактів ШІМ розбиті на три пари: кожна пара має свій власний попередній подільник. Наприклад, обидва контакти 5 і 6 Arduino контролюються TCCR0B, так що ви можете встановити контакти 5 і 6 Arduino для виведення сигналу ШІМ на одній частоті. Контакти 9 і 10 Arduino управляються TCCR1B, так що вони можуть бути встановлені на іншій частоті, ніж контакти 5 і 6. Контакти 3 і 11 Arduino знаходяться під контролем TCCR2B, так що вони можуть бути встановлені на третій частоті. Але ви не можете встановити різні частоти для контактів, які знаходяться під контролем одного і того ж подільника (наприклад, контакти 5 і 6 повинні бути на одній і тій же частоті).
Якщо використовуєте значення за замовчуванням, встановлене завантажувачем на платформі Arduino Diecimila, то ваші частоти ШІМ:
- Arduino PIN5 і PIN6: 976.56 Гц
- Arduino PIN9, PIN10, PIN11 і PIN3: 490.20 Гц (в інших джерелах - 488,28 Гц)
У налаштуваннях частини void setup()коду вашого Arduino встановіть або скиньте біти CS02, CS01 і CS00 у відповідних регістрах TCCRnB:
// Для Arduino Uno, Nano, Micro Magician, Mini Driver, Lilly Pad і будь-якої іншої плати, яка використовує ATmega 8, 168 або 328**
//---- Встановити частоту ШІМ для PIN5 і PIN6 ----
//TCCR0B = TCCR0B & B11111000 | B00000001; //встановити подільник timer 0 в 1 1 для частоти ШІМ 62500.00 Гц
//TCCR0B = TCCR0B & B11111000 | B00000010; //встановити подільник timer 0 в 1 8 для частоти ШІМ 7812.50 Гц
TCCR0B = TCCR0B & B11111000 | B00000011; //встановити подільник timer 0 в 64 для частоти ШІМ 976.56 Гц (За замовчуванням)
//TCCR0B = TCCR0B & B11111000 | B00000100; //встановити подільник timer 0 в 256 для частоти ШІМ 244.14 Гц
//TCCR0B = TCCR0B & B11111000 | B00000101; //встановити подільник timer 0 в 1024 для частоти ШІМ 61.04 Гц
//---- Встановити частоту ШІМ для PIN9 і PIN10 ----
//TCCR1B = TCCR1B & B11111000 | B00000001; //встановити подільник timer 1 в 1 для частоти ШІМ 31372.55 Гц
//TCCR1B = TCCR1B & B11111000 | B00000010; //встановити подільник timer 1 в 8 для частоти ШІМ 3921.16 Гц
TCCR1B = TCCR1B & B11111000 | B00000011; // встановити подільник timer 1 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR1B = TCCR1B & B11111000 | B00000100; //встановити подільник timer 1 в 256 для частоти ШІМ 122.55 Гц
//TCCR1B = TCCR1B & B11111000 | B00000101; //встановити подільник timer 1 в 1024 для частоти ШІМ 30.64 Гц
//---- Встановити частоту ШІМ для PIN3 і PIN11 ----
//TCCR2B = TCCR2B & B11111000 | B00000001; //встановити подільник timer 2 в 1 для частоти ШІМ 31372.55 Гц
//TCCR2B = TCCR2B & B11111000 | B00000010; //встановити подільник timer 2 в 8 для частоти ШІМ 3921.16 Гц
//TCCR2B = TCCR2B & B11111000 | B00000011; //встановити подільник timer 2 в 32 для частоти ШІМ 980.39 Гц
TCCR2B = TCCR2B & B11111000 | B00000100; //встановити подільник timer 2 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR2B = TCCR2B & B11111000 | B00000101; //встановити подільник timer 2 в 128 для частоти ШІМ 245.10 Гц
//TCCR2B = TCCR2B & B11111000 | B00000110; //встановити подільник timer 2 в 256 для частоти ШІМ 122.55 Гц
//TCCR2B = TCCR2B & B11111000 | B00000111; //встановити подільник timer 2 в 1024 для частоти ШІМ 30.64 Гц
//Для Arduino Mega1280, Mega2560, MegaADK, Spider і будь-якої іншої плати, яка використовує ATmega1280 або ATmega2560**
//---- Встановити частоту ШІМ для PIN4 & PIN13 -----
//TCCR0B = TCCR0B & B11111000 | B00000001; //встановити подільник timer 0 в 1 для частоти ШІМ 62500.00 Гц
//TCCR0B = TCCR0B & B11111000 | B00000010; //встановити подільник timer 0 в 8 для частоти ШІМ 7812.50 Гц
TCCR0B = TCCR0B & B11111000 | B00000011; //встановити подільник timer 0 в 64 для частоти ШІМ 976.56 Гц (За замовчуванням)
//TCCR0B = TCCR0B & B11111000 | B00000100; //встановити подільник timer 0 в 256 для частоти ШІМ 244.14 Гц
//TCCR0B = TCCR0B & B11111000 | B00000101; //встановити подільник timer 0 в 1024 для частоти ШІМ 61.04 Гц
//-----Встановити частоту ШІМ для PIN11 & PIN12 -----
//TCCR1B = TCCR1B & B11111000 | B00000001; //встановити подільник timer 1 в 1 для частоти ШІМ 31372.55 Гц
//TCCR1B = TCCR1B & B11111000 | B00000010; // встановити подільник timer 1 в 8 для частоти ШІМ 3921.16 Гц
TCCR1B = TCCR1B & B11111000 | B00000011; // встановити подільник timer 1 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR1B = TCCR1B & B11111000 | B00000100; //встановити подільник timer 1 в 256 для частоти ШІМ 122.55 Гц
//TCCR1B = TCCR1B & B11111000 | B00000101; //встановити подільник timer 1 в 1024 для частоти ШІМ 30.64 Гц
//--- Встановити частоту ШІМ для PIN9 & PIN10 -----
//TCCR2B = TCCR2B & B11111000 | B00000001; //встановити подільник timer 2 в 1 для частоти ШІМ 31372.55 Гц
//TCCR2B = TCCR2B & B11111000 | B00000010; //встановити подільник timer 2 в 8 для частоти ШІМ 3921.16 Гц
//TCCR2B = TCCR2B & B11111000 | B00000011; //встановити подільник timer 2 в 32 для частоти ШІМ 980.39 Гц
TCCR2B = TCCR2B & B11111000 | B00000100; //встановити подільник timer 2 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR2B = TCCR2B & B11111000 | B00000101; //встановити подільник timer 2 в 128 для частоти ШІМ 245.10 Гц
//TCCR2B = TCCR2B & B11111000 | B00000110; //встановити подільник timer 2 в 256 для частоти ШІМ 122.55 Гц
//TCCR2B = TCCR2B & B11111000 | B00000111; //встановити подільник timer 2 в 1024 для частоти ШІМ 30.64 Гц
//--- Встановити частоту ШІМ для PIN2, PIN3 & PIN5 ---
//TCCR3B = TCCR3B & B11111000 | B00000001; //встановити подільник timer 3 в 1 для частоти ШІМ 31372.55 Гц
//TCCR3B = TCCR3B & B11111000 | B00000010; //встановити подільник timer 3 в 8 для частоти ШІМ 3921.16 Гц
TCCR3B = TCCR3B & B11111000 | B00000011; //встановити подільник timer 3 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR3B = TCCR3B & B11111000 | B00000100; //встановити подільник timer 3 в 256 для частоти ШІМ 122.55 Гц
//TCCR3B = TCCR3B & B11111000 | B00000101; // встановити подільник timer 3 в 1024 для частоти ШІМ 30.64 Гц
//--- Встановити частоту ШІМ для PIN6, PIN7 & PIN8 ----
//TCCR4B = TCCR4B & B11111000 | B00000001; //встановити подільник timer 4 в 1 для частоти ШІМ 31372.55 Гц
//TCCR4B = TCCR4B & B11111000 | B00000010; //встановити подільник timer 4 в 8 для частоти ШІМ 3921.16 Гц
TCCR4B = TCCR4B & B11111000 | B00000011; //встановити подільник timer 4 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR4B = TCCR4B & B11111000 | B00000100; //встановити подільник timer 4 в 256 для частоти ШІМ 122.55 Гц
//TCCR4B = TCCR4B & B11111000 | B00000101; //встановити подільник timer 4 в 1024 для частоти ШІМ 30.64 Гц
//- Встановити частоту ШІМ для PIN44, PIN45 & PIN46 ---
//TCCR5B = TCCR5B & B11111000 | B00000001; //встановити подільник timer 5 в 1 для частоти ШІМ 31372.55 Гц
//TCCR5B = TCCR5B & B11111000 | B00000010; //встановити подільник timer 5 в 8 для частоти ШІМ 3921.16 Гц
TCCR5B = TCCR5B & B11111000 | B00000011; //встановити подільник timer 5 в 64 для частоти ШІМ 490.20 Гц (За замовчуванням)
//TCCR5B = TCCR5B & B11111000 | B00000100; //встановити подільник timer 5 в 256 для частоти ШІМ 122.55 Гц
//TCCR5B = TCCR5B & B11111000 | B00000101; //встановити подільник timer 5 в 1024 для частоти ШІМ 30.64 Гц
За матеріалами: arduino-info.wikispaces.com