Arduino:Примеры/Регулировка яркости светодиодов и громкости динамика с помощью двух SPI цифровых потенциометров MCP4231

Материал из Онлайн справочника
Перейти к навигации Перейти к поиску

Проверка/Оформление/Редактирование: Мякишев Е.А.


Pixel Art Mini Meow Animated.gif Черновик


Регулировка яркости светодиодов и громкости динамика с помощью двух SPI цифровых потенциометров MCP4231

Данный пример демонстрирует управление яркостью светодиодов и громкостью динамика с помощью цифровых потенциометров с использованием библиотеки SPI.

Необходимые компоненты

Монтажная схема

Соберите схему согласно монтажной схеме.

Arduino uno mcp4231 led speaker 1.png
Схема подключения светодиода к потенциометру
Распиновка цифрового потенциометра MCP4231

Код

 1 #include <SPI.h>                                   // Подключение SPI библиотеки
 2 
 3 const int SPEAKER=8;                               // Контакт к которому подключен динамик
 4 int freq = 100;                                    // Начальная частота сигнала для динамика
 5 
 6 // Помните при подключении библиотеки SPI
 7 // контактами MOSI, MISO и CLK по умолчанию 
 8 // будут следующие цифровые контакты Arduino:
 9 // 11 = MOSI, 12 = MISO, 13 = CLK
10 
11 const int SS1=10;                                  // SS-контакт(Slave Select, т.е. контакт выбора ведомого устройства) 1-ой микросхемы MCP4231
12 const int SS2=9;                                   // SS-контакт(Slave Select, т.е. контакт выбора ведомого устройства) 2-ой микросхемы MCP4231
13 
14 const byte REG0=B00000000;                         // Команда записи в регистр 0 т.е. выбор 1-го потенциометра
15 const byte REG1=B00010000;                         // Команда записи в регистр 1 т.е. выбор 2-го потенциометра
16 
17 void setup()
18 {
19   pinMode(SS1, OUTPUT);                            // Установка SS1-контакта как выход
20   pinMode(SS2, OUTPUT);                            // Установка SS2-контакта как выход
21  
22   SPI.begin();                                     // Инициализация SPI-интерфейса
23 }
24 
25 /*
26 * Функция управления яркостью светодиодов и громкостью динамика
27 * SS    - контакт выбора ведомого устройства(микросхемы MCP4231)
28 * reg   - адрес регистра потенциометра выбранной микросхемы MCP4231
29 * level - значение сопротивления
30 * Возможные варианты вызова:
31 * setLed(SS1, REG0, значение от 0 до 128) - выбор 1-ой микросхемы MCP4231, 1-го потенциометра и 1-ый светодиод(в данном случае)
32 * setLed(SS1, REG1, значение от 0 до 128) - выбор 1-ой микросхемы MCP4231, 2-го потенциометра и 3-ый светодиод(в данном случае)
33 * setLed(SS2, REG0, значение от 0 до 128) - выбор 2-ой микросхемы MCP4231, 1-го потенциометра и 2-ый светодиод(в данном случае)
34 * setLed(SS2, REG1, значение от 0 до 128) - выбор 2-ой микросхемы MCP4231, 2-го потенциометра и динамика(в данном случае)
35 */
36 
37 void setReg(int SS, int reg, int level)
38 {
39   digitalWrite(SS, LOW);                          // Установить низкий уровень на контакте SS
40   SPI.transfer(reg);                              // Отправка команды (адрес регистра 1-го или 2-го потенциометра)
41   SPI.transfer(level);                            // Отправка значений (0-128) величины сопротивления
42   digitalWrite(SS, HIGH);                         // Установить высокий уровень на контакте SS
43 }
44 
45 void loop()
46 {
47   tone(SPEAKER, freq);                            // генерация сигнала заданной частоты
48   for (int i=0; i<=128; i++)
49   {
50     setReg(SS1, REG0, i);
51     setReg(SS1, REG1, i);
52     setReg(SS2, REG0, i);
53     setReg(SS2, REG1, i);
54     delay(10);
55   }
56   delay(300);
57   for (int i=128; i>=0; i--)
58   {
59     setReg(SS1, REG0, i);
60     setReg(SS1, REG1, i);
61     setReg(SS2, REG0, i);
62     setReg(SS2, REG1, i);
63     delay(10);
64   } 
65   delay(300);
66   freq = freq+100;
67   if (freq > 2000) freq = 100;
68 }

См.также

Внешние ссылки