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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Нет описания правки
 
(не показано 7 промежуточных версий 1 участника)
Строка 20: Строка 20:
Соберите схему согласно монтажной схеме.
Соберите схему согласно монтажной схеме.


[[File:arduino_uno_mcp4231_led_speaker_1.png|1300px|center]]
[[File:arduino_uno_mcp4231_led_speaker_1.png|thumb|1300px|center|'''Рис. 1.''' Подключение светодиодов и динамика к двум цифровым потенциометрам MCP4231 и плате Arduino.|alt=Рис. 1. Подключение светодиодов и динамика к двум цифровым потенциометрам MCP4231 и плате Arduino.]]


[[File:connect_led_to_digitpot_1.png|frame|center|Схема подключения светодиода к потенциометру]]
[[File:connect_led_to_digitpot_1.png|frame|center|'''Рис. 2.''' Схема подключения светодиода к потенциометру.|alt=Рис. 2. Схема подключения светодиода к потенциометру]]


[[File:MCP4231-digital-potentiometer-pinout.png|frame|center|Распиновка цифрового потенциометра [[MCP4231]]]]
[[File:MCP4231-digital-potentiometer-pinout.png|frame|center|'''Рис.3.''' Распиновка цифрового потенциометра [[MCP4231]].|alt=Рис.3. Распиновка цифрового потенциометра MCP4231.]]


==Код==
==Код==


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
#include <SPI.h>                                  // Подключение SPI библиотеки
#include <SPI.h>                                  // Подключение SPI библиотеки


Строка 104: Строка 104:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Пример]]
[[Категория:Пример]]
[[Категория:Примеры]]
[[Категория:Примеры]]
[[Категория:Пример программирования Arduino]]
[[Категория:Пример программирования Arduino]]
[[Категория:Примеры программирования Arduino]]
[[Категория:Примеры программирования Arduino]]

Текущая версия от 11:23, 8 июля 2023

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


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

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

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

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

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

Рис. 1. Подключение светодиодов и динамика к двум цифровым потенциометрам MCP4231 и плате Arduino.
Рис. 1. Подключение светодиодов и динамика к двум цифровым потенциометрам MCP4231 и плате Arduino.
Рис. 2. Схема подключения светодиода к потенциометру
Рис. 2. Схема подключения светодиода к потенциометру.
Рис.3. Распиновка цифрового потенциометра MCP4231.
Рис.3. Распиновка цифрового потенциометра MCP4231.

Код

#include <SPI.h>                                   // Подключение SPI библиотеки

const int SPEAKER=8;                               // Контакт к которому подключен динамик
int freq = 100;                                    // Начальная частота сигнала для динамика

// Помните при подключении библиотеки SPI
// контактами MOSI, MISO и CLK по умолчанию 
// будут следующие цифровые контакты Arduino:
// 11 = MOSI, 12 = MISO, 13 = CLK

const int SS1=10;                                  // SS-контакт(Slave Select, т.е. контакт выбора ведомого устройства) 1-ой микросхемы MCP4231
const int SS2=9;                                   // SS-контакт(Slave Select, т.е. контакт выбора ведомого устройства) 2-ой микросхемы MCP4231

const byte REG0=B00000000;                         // Команда записи в регистр 0 т.е. выбор 1-го потенциометра
const byte REG1=B00010000;                         // Команда записи в регистр 1 т.е. выбор 2-го потенциометра

void setup()
{
  pinMode(SS1, OUTPUT);                            // Установка SS1-контакта как выход
  pinMode(SS2, OUTPUT);                            // Установка SS2-контакта как выход
 
  SPI.begin();                                     // Инициализация SPI-интерфейса
}

/*
* Функция управления яркостью светодиодов и громкостью динамика
* SS    - контакт выбора ведомого устройства(микросхемы MCP4231)
* reg   - адрес регистра потенциометра выбранной микросхемы MCP4231
* level - значение сопротивления
* Возможные варианты вызова:
* setLed(SS1, REG0, значение от 0 до 128) - выбор 1-ой микросхемы MCP4231, 1-го потенциометра и 1-ый светодиод(в данном случае)
* setLed(SS1, REG1, значение от 0 до 128) - выбор 1-ой микросхемы MCP4231, 2-го потенциометра и 3-ый светодиод(в данном случае)
* setLed(SS2, REG0, значение от 0 до 128) - выбор 2-ой микросхемы MCP4231, 1-го потенциометра и 2-ый светодиод(в данном случае)
* setLed(SS2, REG1, значение от 0 до 128) - выбор 2-ой микросхемы MCP4231, 2-го потенциометра и динамика(в данном случае)
*/

void setReg(int SS, int reg, int level)
{
  digitalWrite(SS, LOW);                          // Установить низкий уровень на контакте SS
  SPI.transfer(reg);                              // Отправка команды (адрес регистра 1-го или 2-го потенциометра)
  SPI.transfer(level);                            // Отправка значений (0-128) величины сопротивления
  digitalWrite(SS, HIGH);                         // Установить высокий уровень на контакте SS
}

void loop()
{
  tone(SPEAKER, freq);                            // генерация сигнала заданной частоты
  for (int i=0; i<=128; i++)
  {
    setReg(SS1, REG0, i);
    setReg(SS1, REG1, i);
    setReg(SS2, REG0, i);
    setReg(SS2, REG1, i);
    delay(10);
  }
  delay(300);
  for (int i=128; i>=0; i--)
  {
    setReg(SS1, REG0, i);
    setReg(SS1, REG1, i);
    setReg(SS2, REG0, i);
    setReg(SS2, REG1, i);
    delay(10);
  } 
  delay(300);
  freq = freq+100;
  if (freq > 2000) freq = 100;
}

См.также

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