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 – минимум).
Цепь
Схема
Код
1 /*
2 Управление цифровым потенциометром
3
4 Этот скетч осуществляет управление цифровым потенциометром AD5206.
5 Этот датчик обладает 6 потенциометр-каналами.
6
7 У каждого канала имеется по три контакта, имеющих следующие
8 наименования:
9 A – подсоединяется к напряжению
10 W – это движок потенциометра; когда вы задаете ему то или иное
11 значение, это меняет уровень сопротивления
12 B – подсоединяется к «земле»
13
14 AD5206 совместим с SPI, и чтобы управлять им, вам нужно отправить два
15 байта. Один будет содержать информацию о номере канала
16 (с 0-ого по 5-ый), а второй – значение сопротивления для этого канала
17 (от 0 до 255).
18
19 Цепь:
20 * Все A-контакты AD5206 подсоединены к +5V
21 * Все B-контакты AD5206 подсоединены к «земле»
22 * Светодиоды и 220-омовые резисторы последовательно подсоединены от каждого W-контакта к «земле»
23 * CS – к 10-ому цифровому контакту (контакт SS)
24 * SDI – к 11-ому цифровому контакту (контакт MOSI)
25 * CLK – к 13-ому цифровому контакту (контакт SCK)
26
27 Создан 10 августа 2010 Томом Иго (Tom Igoe).
28
29 За оригинальный урок благодарим Хизер Дьюи-Хэгборг (Heather Dewey-Hagborg), 2005
30 */
31
32
33 // Подключаем библиотеку SPI:
34 #include <SPI.h>
35
36 // Делаем 10-ый контакт SS-контактом (т.е. контактом Slave Select)
37 // для цифрового потенциометра:
38 const int slaveSelectPin = 10;
39
40 void setup() {
41 // Делаем SS-контакт выходным:
42 pinMode (slaveSelectPin, OUTPUT);
43 // Инициализируем SPI:
44 SPI.begin();
45 }
46
47 void loop() {
48 // Пробегаемся по шести каналам цифрового потенциометра:
49 for (int channel = 0; channel < 6; channel++) {
50 // Меняем сопротивление на канале с минимального на максимальное:
51 for (int level = 0; level < 255; level++) {
52 digitalPotWrite(channel, level);
53 delay(10);
54 }
55 // Будучи на максимуме, ждем секунду:
56 delay(100);
57 // Меняем сопротивление на канале с максимального на минимальное:
58 for (int level = 0; level < 255; level++) {
59 digitalPotWrite(channel, 255 - level);
60 delay(10);
61 }
62 }
63
64 }
65
66 void digitalPotWrite(int address, int value) {
67 // Задаем SS-контакту значение LOW, чтобы выбрать чип:
68 digitalWrite(slaveSelectPin,LOW);
69 // Отсылаем через SPI адрес и значение:
70 SPI.transfer(address);
71 SPI.transfer(value);
72 // Задаем SS-контакту значение HIGH, чтобы отменить выбор чипа:
73 digitalWrite(slaveSelectPin,HIGH);
74 }
Авторство оригинального урока принадлежит Хизер Дьюи-Хэгборг (Heather Dewey-Hagborg), а к модификации приложили руку Том Иго (Tom Igoe) и Кристиан Церрито (Christian Cerrito).
См.также
- Arduino SPI LIbrary
- BarometricPressureSensor
Внешние ссылки