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

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

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


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


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

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

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

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

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

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

Код

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

См.также

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