MCP41ххх, в нашем случаи MCP41010 — Микросхема-потенциометр с цифровым управлением, изменение сопротивления происходит благодаря массиву из 256 резисторов. В серии есть потенциометры сопротивлением 10kΩ, 50kΩ и 100kΩ, MCP41010, MCP41050 и MCP41100 соответственно. Также существует сдвоенная микросхема MCP42010 с аналогичными параметрами.
Удобных модулей с такой микросхемой не существует, но MCP41010 можно найти в DIP корпусе или SO8 версию данной микросхемы впаять в переходник на DIP8, как в моем случаи.
Особенности работы:
Управление микросхемой происходит с помощью SPI интерфейса, распиновка микросхемы ниже.
- 1 нога, CS, чипселект интерфейса SPI, подключается на любой свободный выход arduino, в примере подключен к 10.
- 2 нога, SCK, тактовый вход интерфейса SPI, подключается к 13 выходу arduino UNO.
- 3 нога, SI, MOSI вход интерфейса SPI, подключается к 11 входу arduino UNO.
- 4 нога, Vss, масса.
- 5, 6, 7 нога, PA0, PW0, PB0, выходы потенциометра.
- 8 нога, Vdd, питание 2,7 — 5,5V.
У SPI интерфейса микросхемы отсутствует нога MISO, а значит невозможно прочитать состояние ползунка потенциометра, можно только установить значение записав байт в регистр микросхемы.
Подключение потенциометра к Arduino:
В данном случаи, для общения с микросхемой используется аппаратный SPI, а значит схема верна только для arduino UNO. На других версиях arduino плат (leonardo, mega) SPI находится на разъеме ICSP и искать выходы SCK и MOSI нужно там.
Выход ползунка потенциометра, PW0, подключен к аналоговому входу A0 arduino, а сам ползунок подключен по схеме делителя напряжения. В примере ниже, последовательно, в цикле, сдвигаем ползунок потенциометра от крайнего положения и отправляем в монитор порта значение напряжения на входе A0.
Код:
#include <SPI.h> // инклюдим библиотеку для аппаратного SPI #define CS 10 // нога чипслекет byte val = 0; void setup() { Serial.begin(115200); SPI.begin(); pinMode (CS, OUTPUT); } void loop() { float voltage = (analogRead(A0) * 5.0)/ 1024.0; // читаем напряжение на входе А0 Serial.print("voltage = " ); // отправляем данные о напряжении в монитор порта Serial.print(voltage); Serial.print(" val = "); // значение которое пишем в потенциометр Serial.print(val, BIN); // бинарное Serial.print(" / "); Serial.println(val, DEC); // десятичное val++; // прибавляем к переменной 1 MCP4xxxxWrite(val); // пишем значение переменной в потенциометр delay(50); // ждем до следующего раза } void MCP4xxxxWrite(byte val) { // отправляет в потенциометр значение ползунка digitalWrite(CS, LOW); // включаем прием данных микросхемой SPI.transfer(0b00010001); // отправляем первый байт в регистр конфигурации SPI.transfer(val); // отправляем второй байт в "регистр ползунка" digitalWrite(CS,HIGH); // выключаем прием данных микросхемой }
После загрузки примера в arduino.
В мониторе порта видим значение напряжения на входе A0 и значение которое было записано в потенциометр в двух форматах.
Купить:
Микросхему можно тут.