Управление цифровым потенциометром (двухканальным) 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