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

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

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

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


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


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

См.также

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