Простой скетч

Алексей1307
Offline
Зарегистрирован: 05.06.2019

Ребята, всем привет! Цифровой потенциометр MCP41100 и ардуино нано. Нужно чтобы сопротивление резистора постоянно менялось от 0 до 100ком. А у меня изменяется от 0 до 70ком. Помогите пожалуйста найти ошибку!

#include <SPI.h>


byte address = 0x11;
int CS= 10;
int i=0;

void setup()
{
  pinMode (CS, OUTPUT);
  SPI.begin();
}

void loop()
{
    for (i = 0; i <= 256; i++)
    {
      digitalPotWrite(i);
      delay(15);
    }
   delay(150);
    for (i = 256; i >= 0; i--)
    {  
      digitalPotWrite(i);
      delay(15);
     
    }
 ;}

int digitalPotWrite(int value)
{
  digitalWrite(CS, LOW);
  SPI.transfer(address);
  SPI.transfer(value);
  digitalWrite(CS, HIGH);
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Я с таким дело не имел, но согласно даташиту в него надо два байта каждый раз отправлять - командный и данные. А тут только один отправляется

The first byte sent is always the command byte, followed by the data byte.

sadman41
Offline
Зарегистрирован: 19.10.2016

Команду-то он подаёт. Только назвал её адресом зачем-то. А вот правильно ли измеряет...

Я бы просто 0xFF записал в оба Pot-a безо всяких циклов (0x13). 

Впрочем, есть у меня два X9C одного номинала с алиэкспресса - один крутится до 10К, второй до 9К.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
1. Исправьте ошибки: в строке №16 должно быть "<", а не "<="; а в строке №22 - 255, а не 256.
 
2. В строке 21 поставьте паузу побольше, у Вас поди мультиметр не успевает показать что там.
Алексей1307
Offline
Зарегистрирован: 05.06.2019

ЕвгенийП пишет:

1. Исправьте ошибки: в строке №16 должно быть "<", а не "<="; а в строке №22 - 255, а не 256.
 
2. В строке 21 поставьте паузу побольше, у Вас поди мультиметр не успевает показать что там.

Исправил ошибки. Никаких изменений, максимум до 70ком изменяется.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Свежий код давайте, откуда мне знать что Вы там исправили

Гриша
Offline
Зарегистрирован: 27.04.2014

DC CHARACTERISTICS: 100 kΩ VERSION   

                                 min    typ    max

Nominal Resistance R   70    100    130    kΩ    TA = +25°C (Note 1)

может просто дело в этом?

Алексей1307
Offline
Зарегистрирован: 05.06.2019

Гриша пишет:

DC CHARACTERISTICS: 100 kΩ VERSION   

                                 min    typ    max

Nominal Resistance R   70    100    130    kΩ    TA = +25°C (Note 1)

может просто дело в этом?

То есть у него погрешность +-30ком. Не думал что так много.

Алексей1307
Offline
Зарегистрирован: 05.06.2019

ЕвгенийП пишет:

Свежий код давайте, откуда мне знать что Вы там исправили

#include <SPI.h>


byte address = 0x11;
int CS= 10;
int i=0;

void setup()
{
  pinMode (CS, OUTPUT);
  SPI.begin();
}

void loop()
{
    for (i = 0; i < 256; i++)
    {
      digitalPotWrite(i);
      delay(20);
    }
   delay(5000);
    for (i = 255; i > 0; i--)
    {  
      digitalPotWrite(i);
      delay(20);
     
    }
 ;}

int digitalPotWrite(int value)
{
  digitalWrite(CS, LOW);
  SPI.transfer(address);
  SPI.transfer(value);
  digitalWrite(CS, HIGH);
}

 

Гриша
Offline
Зарегистрирован: 27.04.2014

Алексей1307 пишет:

То есть у него погрешность +-30ком. Не думал что так много.

самого удивило, 30% погрешность, это как "лаптем по карте"... 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Это легко проверить.

Поставьте в setup, в самый конец digitalPotWrite(255);. А loop оставьте пустым. И замерьте его максимальное. Странно, что Вы раньше этого не сделали.

Кстати, почти уверен, что Вы измеряете сопротивление неправильно. Нарисуйте схему измеренния и скажите чем именно измеряете.

 

Алексей1307
Offline
Зарегистрирован: 05.06.2019

ЕвгенийП пишет:

Поставьте в setup, в самый конец digitalPotWrite(255);. А loop оставьте пустым. И замерьте его максимальное. 

Выдает ошибку.

exit status 1
'digitalPotWrite' was not declared in this scope
 
Алексей1307
Offline
Зарегистрирован: 05.06.2019

Запитал ардуину от кроны - 90ком максимальное сопротивление, если от USB - макс. 70ком.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей1307 пишет:
Выдает ошибку.

exit status 1
'digitalPotWrite' was not declared in this scope
 

Переставьте функцию digitalPotWrite (строки №№ 30-36) выше функции setup.

И всего определяйте/объявляйте функции ДО использования.

Вы не написали чем и как (схема) Вы измеряете сопротивление.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Совет ЕвгенийП правильный, но можно обновить IDE до последней и ей будет похрену где объявлена функция, до или после еЁ использования.

но еще раз, суровые "челябинские мужики" делают как советовал Евгений.

Гриша
Offline
Зарегистрирован: 27.04.2014

АПД. оба байта в сетап, а то только один и запишите :)))))))))