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

Arduino:Примеры/DigitalPotentiometer

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

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


Управление цифровым потенциометром AD5171 с помощью библиотеки Wire [1]

Этот пример показывает, как при помощи библиотеки Wire управлять цифровым потенциометром AD5171 от Analog Devices, который коммуницирует через синхронный последовательный протокол I2C. Мы настроим потенциометр таким образом, чтобы он преодолевал 64 уровня сопротивления, тем самым меняя яркость светодиода.

В протоколе I2C для отправки и передачи данных используется два контакта: Serial Clock (SCL), через который Arduino отбивает тактовый импульс, и Serial Data (SDA), по которому и проходит обмен данными между девайсами.

Если тактовый импульс меняется с LOW на HIGH (этот сценарий известен как «положительный фронт тактового сигнала»), Arduino через SDA-линию отсылает I2C-девайсу бит информации, содержащий адрес конкретного устройства, а также запрос на отправку данных. Если тактовый импульс меняется с HIGH на LOW («отрицательный фронт тактового сигнала»), «разбуженный» I2C-девайс в ответ на запрос отсылает Arduino необходимые данные по той же SDA-линии.

Поскольку I2C-протокол позволяет всем подключенным девайсам иметь свой уникальный адрес, а оба устройства (и ведущее, и ведомое) обмениваются информацией по одной и той же линии, Arduino может коммуницировать с несколькими девайсами (но по очереди), при этом используя лишь два контакта микроконтроллера.

Необходимое оборудование

  • Плата Arduino;
  • Цифровой потенциометр AD5171;
  • Светодиод;
  • Резистор на 220 Ом;
  • Два резистора на 4,7 кОм;
  • Макетная плата Breadboard;
  • Провода-перемычки;

Цепь

Подключите 3-ий, 6-ой и 7-ой контакты AD5171 к «земле», а 2-ой и 8-ой контакты – к +5V.

Контакт номер 4 потенциометра (т.е. SCL, используется для тактового импульса) подключите к 5-ому аналоговому контакту на Arduino, а контакт номер 5 (т.е. SDA, используется для передачи данных) – к 4-ому аналоговому контакту.

Также к каждой из этих линий (и к SCL, и к SDA) добавьте по одному подтягивающему резистору и подсоедините их к +5V.

Наконец, подключите светодиод к 1-ому контакту AD5171 (т.е. к его движку), но через 220-омовый резистор.

AD5171 bb.png

Когда 6-ой контакт AD5171 (т.е. ADO) подсоединен к «земле», его адрес – это «44». Чтобы добавить к той же SDA-шине еще один цифровой потенциометр, подключите его ADO-контакт к +5V, и это сменит его адрес на «45».

Одновременно можно использовать только два таких цифровых потенциометра.

Схема

AD5171 sch.png
AD5171 pinconfig.png

Код

  1. // Управление цифровым потенциометром через I2C
  2. // от Николаса Замбетти (Nicholas Zambetti, http://www.zambetti.com)
  3. // и Шона Бонковски (Shawn Bonkowski, http://people.interaction-ivrea.it/s.bonkowski)
  4.  
  5. // Демонстрирует использование библиотеки Wire.
  6. // Управляет цифровым потенциометром AD5171 через I2C/TWI.
  7.  
  8. // Создан 31 марта 2006.
  9.  
  10. // Этот код не защищен авторским правом.
  11.  
  12. #include <Wire.h>
  13.  
  14. void setup()
  15. {
  16.   Wire.begin(); // подключаем шину I2C (для ведущего устройства адрес опционален)
  17. }
  18.  
  19. byte val = 0;
  20.  
  21. void loop()
  22. {
  23.   Wire.beginTransmission(44); // начинаем передачу данных девайсу #44 (0x2c);
  24.                               // этот адрес указан в «даташите»
  25.   Wire.write(byte(0x00));     // отсылаем байт с инструкцией  
  26.   Wire.write(val);            // отсылаем байт со значением от потенциометра  
  27.   Wire.endTransmission();     // останавливаем передачу данных
  28.  
  29.   val++;        // увеличиваем значение
  30.   if(val == 64) // если достигли 64-ой позиции (т.е. максимума)...
  31.   {
  32.     val = 0;    // ...начинаем с самого низкого значения
  33.   }
  34.   delay(500);
  35. }

См.также

  1. Wire.begin()
  2. Wire.beginTransmission()
  3. Wire.endTransmission()
  4. Wire.send()
  5. Wire Library
  6. SFRRanger_reader
  7. Master Reader/Slave Writer
  8. Master Writer/Slave receiver
  9. SPIDigitalPot

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

  1. AD5171 Digital Potentiometer