Управление цифровым потенциометром (двухканальным) MCP42100 последовательное подключение
- Войдите на сайт для отправки комментариев
Сб, 29/02/2020 - 18:32
Здравствуйте, Уважаемые форумчане!
У меня возникла проблема с пониманием как правильно нужно отправлять команды на два последовательно подключённых потенциометра MCP42100 и MCP41010
Не понимаю в какой момент нужно посылать команду на второй канал ЦП 100ком и почему у меня не приходит команда на ЦП 10ком
//настройка конфигурационного байта
byte MCP4xxxxConfig(int mode, int chan){
byte byte_mode;
byte byte_chan;
switch (mode){
case 1: //write
byte_mode = 16;
break;
case 2: //shut down
byte_mode = 32;
break;
default: //none
byte_mode = 0;
break;
}
switch (chan){
case 1: // Command executed on Potentiometer 0
byte_chan = 1;
break;
case 2: // Command executed on Potentiometer 1
byte_chan = 2;
break;
default: //none
byte_chan = 0;
break;
}
return (byte_mode | byte_chan);
}
//попытка в лоб
void MCP4test() {
digitalWrite(SS_NTC, LOW); //включаем приём данных регистрами
SPItransferByte(MCP4xxxxConfig(1, 1)); //отправляем первый байт в регистр конфигурации
SPItransferByte(0); //отправляем второй байт в "регистр ползунка"
SPItransferByte(MCP4xxxxConfig(1, 2)); //отправляем первый байт в регистр конфигурации
SPItransferByte(0); //отправляем второй байт в "регистр ползунка"
SPItransferByte(MCP4xxxxConfig(1, 1)); //отправляем первый байт в регистр конфигурации
SPItransferByte(0); //отправляем второй байт в "регистр ползунка"
digitalWrite(SS_NTC, HIGH); //выключаем приём данных регистров
}
//другая попытка - настроить оба ЦП за раз через разные каналы первого
void MCP4xxxxWriteCascade(byte v1100, byte v2100, byte v110) {
// отправляет в каскад потенциометров значения
//настраиваем 1й канал 100ком
digitalWrite(SS_NTC, LOW); //включаем приём данных регистрами
SPItransferByte(MCP4xxxxConfig(1, 1)); //отправляем первый байт в регистр конфигурации
SPItransferByte(v1100); //отправляем второй байт в "регистр ползунка"
//настраиваем канал 10км
SPItransferByte(MCP4xxxxConfig(1, 1)); //отправляем первый байт в регистр конфигурации
SPItransferByte(v110); //отправляем второй байт в "регистр ползунка"
digitalWrite(SS_NTC, HIGH); //выключаем приём данных регистров
//настраиваем 2й канал 100ком
digitalWrite(SS_NTC, LOW); //включаем приём данных регистрами
SPItransferByte(MCP4xxxxConfig(1, 2)); //отправляем первый байт в регистр конфигурации
SPItransferByte(v2100); //отправляем второй байт в "регистр ползунка"
//настраиваем канал 10км
SPItransferByte(MCP4xxxxConfig(1, 1)); //отправляем первый байт в регистр конфигурации
SPItransferByte(v110); //отправляем второй байт в "регистр ползунка"
digitalWrite(SS_NTC, HIGH); //выключаем приём данных регистров
}
//функция отправки байта
void SPItransferByte(byte _byte){
for(int i = 0; i < 8; i++) {
SPItransferBit(bitRead(_byte, 7-i));
}
}
void SPItransferBit(boolean _bit) {
digitalWrite(SPI_MOSI, _bit);
// delay(300);
digitalWrite(SPI_SCK, HIGH);
digitalWrite(SPI_SCK, LOW);
digitalWrite(SPI_MOSI, LOW);
}
Даташит на ЦП
Вообще поделка должна имитировать термосопротивление, но это совсем другая история... Очень прошу помочь - не хочется бросать это дело
То что на картинке подписан Analog Devices прошу не обращать внимание, по факту там MCP