16bit код и светодиодный драйвер

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

Здравствуйте

 

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

shiftOut(SDI, CLK, MSBFIRST, j);

Как обозначить ,каким bitом управлять

#define SDI 10
#define CLK 9
#define LE 8
long b = (0b00000001,0b00000000);
 

void setup()
{
  pinMode(SDI, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LE, OUTPUT);
}
  
void loop()
{ 
  for(int a=0;a<510;a++){
  digitalWrite(LE, LOW);
 //digitalWrite(a,HIGH);
 analogWrite(b,a);
 shiftOut(SDI, CLK, MSBFIRST, a);
 delay(100);
  digitalWrite(LE, HIGH);
  delay(100);}

 

artem10
Offline
Зарегистрирован: 14.08.2015
Или так?




#define SDI 10
#define CLK 9
#define LE 8
long b = (0b00000001,0b00000000);
 

void setup()
{
  pinMode(SDI, OUTPUT);
  pinMode(CLK, OUTPUT);
  pinMode(LE, OUTPUT);
}
  
void loop()
{ 
  
 digitalWrite(LE, LOW);
 for(int a=0;a<510;a++){
 //digitalWrite(a,HIGH);
 analogWrite(b,a);
 shiftOut(SDI, CLK, MSBFIRST, a);
 delay(100);
 digitalWrite(LE, HIGH);}
 delay(100);}

 

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

Не понял для чего у Вас строки 19 (в первом)  и 25 (во втором). Чего Вы этим хотели добиться?

Отдельным битом никак не управлять. Просто загоняете туда весь регистр, а все биты в нём заранее выставляете.

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

Чтоб плавно диоды загорались,и управление ргб.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а что за драйвер?

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

artem10 пишет:

Чтоб плавно диоды загорались,и управление ргб.

Т.е. переменная b - номер пина? А зачем её так хитро задавать?

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

Да,я по другому не представляю как.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

странный тс

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

artem10 пишет:

Да,я по другому не представляю как.

А что Вы имели в виду, когда писали:

long b = (0b00000001,0b00000000);

чему по-Вашему должна быть равна b?

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

Номеру ножки на драйвере.

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

artem10 пишет:

Номеру ножки на драйвере.

Вы число можете назвать? Просто число, которому должна быть равна переменная b.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

)))

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

Первый бит или 0.

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

1

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

Ну, слва Богу, значит Вам нужно, что переменная b равнялась 1. Ну так и пишите 

int b = 1;

Козьма Прутков правильно говорил "Не мудрствуй лукаво!"

Кстати, совершенно не понимаю нафига там long. У Вас что ног больше, чем 65 535?

А ещё лучше не тратить память на переменную и завести номер ноги константой времени компиляции (если, конечно, номер в процессе работы программы не собирается меняться).

#define NOGA 1

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

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

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

Вот с этим кодом светодиод просто мигает,а мне надо сделать,чтоб он плавно разгорался.

Как мне вставить это код в отправку данных?

SunX
SunX аватар
Offline
Зарегистрирован: 04.10.2014

artem10 пишет:

Вот с этим кодом светодиод просто мигает,а мне надо сделать,чтоб он плавно разгорался.

Как мне вставить это код в отправку данных?

Никак, dm135b такого не умеет.

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

Придется использовать arduino mini.

Хотел сделать на тини13 и драйвере.

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

artem10 пишет:

Вот с этим кодом светодиод просто мигает,а мне надо сделать,чтоб он плавно разгорался.

Как мне вставить это код в отправку данных?

Никак. Ваш драйвер не умеет управлять яркостью.

Вам нужно либо взять что-то другое, например TLC5940 - он умеет управлять 16 светодиодами и выставлять яркость каждому индивидуально.

Ну или проще - если Ва не нужно именно управлять, а нужно только чтобы плавно разгорались и плавно гасли, я бы использовал тот драйвер, что есть, а на каждый дио поставил бы RC цепочку с правильно подобранной постоянной времени. Включается питание - кодненсатор заряжается, по мере заряда диод набирает яркость. Пропало питание - конденсатор разряжается и по мере разряда диод постепенно гаснет. Делов то - лдин резистор и один конденсатор на каждый диод - если место позволяет, я бы так сделал и не парился бы.

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

Спасибо за подсказки ,буду варианты переберать.

Дак этот код будет работать с TLC5940,или нет?

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

Даже если не будет, то изменения минимальны, т.к. у обоих драйверов управление через одинаковый интерфейс. Но у TLC5940 ещё можно ШИМ'ом яркость регулировать.

Только Вы смотрите, я не знаю как у Вас подключаются диоды и можете ли Вы это подключение переделать. TLC5940 работает только в схемах с общим анодом. Если у Вас отдельные диоды, то Вам всё равно как их вставлять, а вот если, скажем семисементник или ещё какая матрица, то нужно, чтобы именно общий анод был. Если общий катод, то TLC5940 не подходит.