Arduino:Примеры/SPIDigitalPot
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Управление цифровым потенциометром при помощи SPI[1]
В этом уроке вы научитесь, как управлять цифровым потенциометром AD5206 при помощи протокола SPI. О том, что такое SPI, читайте в уроке о SPIEEPROM.
Цифровые потенциометры требуются в том случае, когда вам нужно менять сопротивление в цепи не вручную, а цифровым способом. Это применимо в таких задачах, как, например, изменение яркости светодиода, регулировка звукового сигнала и генерация нот. В данном же примере мы будем управлять яркостью шести светодиодов, для чего воспользуемся цифровым потенциометром с шестью каналами. Впрочем, эту инструкцию можно применить и для SPI-коммуникации с другими девайсами, потребуется разве что некоторая модификация.
Необходимое оборудование
- Цифровой потенциометр AD5206;
- Микроконтроллерный модуль Arduino;
- 6 светодиодов;
- 6 резисторов на 220 Ом;
- Провода-перемычки;
Введение в то, как работает цифровой потенциометр AD5206
Паспортные данные AD5206 можно посмотреть тут.
AD5206 – это 6-канальный цифровой потенциометр. Это значит, что в него встроено 6 регулируемых резисторов (потенциометров), каждым из которых можно управлять индивидуально и электронно. Кроме того, у каждого из этих потенциометров имеется по 3 контакта, которые можно подсоединять так же, как и у механического потенциометра. Эти контакты обозначаются как Ax, Bx и Wx (к примеру, A1, B1 и W1). Например, в этом примере мы будем использовать все эти регулируемые резисторы в качестве делителей напряжения: у каждого один из контактов (контакт B) будет иметь значение HIGH, другой (контакт A) – LOW, а третий (центральный контакт; движок) будет отвечать за изменение сопротивления. Максимальным сопротивлением AD5206 будет 10 кОм, разбитые на 255 интервалов (где 255 – это максимум, а 0 – минимум).
Цепь
Схема
Код
/*
Управление цифровым потенциометром
Этот скетч осуществляет управление цифровым потенциометром AD5206.
Этот датчик обладает 6 потенциометр-каналами.
У каждого канала имеется по три контакта, имеющих следующие
наименования:
A – подсоединяется к напряжению
W – это движок потенциометра; когда вы задаете ему то или иное
значение, это меняет уровень сопротивления
B – подсоединяется к «земле»
AD5206 совместим с SPI, и чтобы управлять им, вам нужно отправить два
байта. Один будет содержать информацию о номере канала
(с 0-ого по 5-ый), а второй – значение сопротивления для этого канала
(от 0 до 255).
Цепь:
* Все A-контакты AD5206 подсоединены к +5V
* Все B-контакты AD5206 подсоединены к «земле»
* Светодиоды и 220-омовые резисторы последовательно подсоединены от каждого W-контакта к «земле»
* CS – к 10-ому цифровому контакту (контакт SS)
* SDI – к 11-ому цифровому контакту (контакт MOSI)
* CLK – к 13-ому цифровому контакту (контакт SCK)
Создан 10 августа 2010 Томом Иго (Tom Igoe).
За оригинальный урок благодарим Хизер Дьюи-Хэгборг (Heather Dewey-Hagborg), 2005
*/
// Подключаем библиотеку SPI:
#include <SPI.h>
// Делаем 10-ый контакт SS-контактом (т.е. контактом Slave Select)
// для цифрового потенциометра:
const int slaveSelectPin = 10;
void setup() {
// Делаем SS-контакт выходным:
pinMode (slaveSelectPin, OUTPUT);
// Инициализируем SPI:
SPI.begin();
}
void loop() {
// Пробегаемся по шести каналам цифрового потенциометра:
for (int channel = 0; channel < 6; channel++) {
// Меняем сопротивление на канале с минимального на максимальное:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// Будучи на максимуме, ждем секунду:
delay(100);
// Меняем сопротивление на канале с максимального на минимальное:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}
}
void digitalPotWrite(int address, int value) {
// Задаем SS-контакту значение LOW, чтобы выбрать чип:
digitalWrite(slaveSelectPin,LOW);
// Отсылаем через SPI адрес и значение:
SPI.transfer(address);
SPI.transfer(value);
// Задаем SS-контакту значение HIGH, чтобы отменить выбор чипа:
digitalWrite(slaveSelectPin,HIGH);
}
Авторство оригинального урока принадлежит Хизер Дьюи-Хэгборг (Heather Dewey-Hagborg), а к модификации приложили руку Том Иго (Tom Igoe) и Кристиан Церрито (Christian Cerrito).
См.также
- Arduino SPI LIbrary
- BarometricPressureSensor
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Пример
- Примеры
- Пример программирования Arduino
- Примеры программирования Arduino