Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

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

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

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


Ambox content.png Черновик


Регулировка яркости светодиодов с помощью двух 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. }

См.также

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