Вопрос по 74HC595

Kruppa
Offline
Зарегистрирован: 18.12.2015

Подскажите, пожалуйста!

Начал разбираться с микросхемой сос двиговым регистром.

Нашел совсем простенький учебный код :

#define clock 13
#define data 12
#define latch 10
 
void setup() {
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  digitalWrite(latch, HIGH);
}
 
void loop() {
  digitalWrite(latch, LOW);
  shiftOut(data, clock, LSBFIRST, 0b10000000);
  digitalWrite(latch, HIGH);
}

Несколько раз всё перепроверил, но в итоге, диоды светятся не как в статье (там должен светиться только первый), а сперва загарается первый, потом второй и т.д., а потом они дружно светятся все вместе)))
Я уж думал, что сам ошибся где-то, несколько раз все перепроверил. Но нет. Ошибок моих вроде нет...

Kruppa
Offline
Зарегистрирован: 18.12.2015

Собственно, сама статья - http://cxem.net/arduino/arduino166.php

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Текст Вашей программы вполне соответствует Вашему описанию ее работы.

Кстати, можете указать строчки, которые по Вашему мнению должны изменять количество горящих светодиодов?

 

 

PS. Перечитал. Засомневался в словесном описании. По скетчу должен гореть один светодиод.

PPS. Еще раз перечитал. В скетче на савмом деле много чего не хватает. Так что, если он работает как-то непонятно, я не удивлюсь. Для начала добавьте последним оператором в loop() строчку:

delay(200);

Kruppa
Offline
Зарегистрирован: 18.12.2015

Так в том и дело, что должен гореть один диод. А горят все.
я добавлял, не помогает вообще:(

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Добавьте delay(), потом посмотрим.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Попробуйте перенести сигнал с пина 13 на какой-нибудь другой.

Вообще, есть уверенность, что схема правильно собрана?

Kruppa
Offline
Зарегистрирован: 18.12.2015

Поставил на 8 пин. Тоже самое.
Несколько раз разбирал и собирал схему.

Если, конечно, не перепутал первую ножку с последней у микросхемы 74HC95,

но по описанию, 1-я ножка идет слева наверху, возле полукруглой выемки. Значит верно вроде..
Даже не знаю, что еще может быть.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Схему брали отсюда? http://arduino.ru/Tutorial/registr_74HC595

Kruppa
Offline
Зарегистрирован: 18.12.2015
Kruppa
Offline
Зарегистрирован: 18.12.2015

Kruppa
Offline
Зарегистрирован: 18.12.2015

Но распиновка вроде такая же там

vk007
Offline
Зарегистрирован: 16.06.2015

Kruppa пишет:

Если, конечно, не перепутал первую ножку с последней у микросхемы 74HC95,

но по описанию, 1-я ножка идет слева наверху, возле полукруглой выемки. Значит верно вроде..

Уверены? Слева наверху - это смотря как корпус повернуть.

(вид сверху)

Kruppa
Offline
Зарегистрирован: 18.12.2015

Да, именно так. Там выемка такая же.
Я так понимаю, корпус с лицевой стороны - должен смотреть на меня (с лицевой - где надписи)?
Снизу, правда, еще какой-то кружок есть...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну я бы начал копать в сторону аппаратных проблем:

- заменил микросхему регистра на другой экземпляр,

- подключил схему к другим ногам (все три) Ардуино.

vk007
Offline
Зарегистрирован: 16.06.2015

Да, если смотреть на маркировку (в нормальной горизонтальной ориентации), то ключ (выемка) должен быть слева, 1 ножка - слева внизу, остальные - против часовой стрелки.

Kruppa
Offline
Зарегистрирован: 18.12.2015

я заменил микросхему 74HC595. Всё тоже самое...

 

Правильно я понимаю распиновку её?

vk007
Offline
Зарегистрирован: 16.06.2015

да

Kruppa
Offline
Зарегистрирован: 18.12.2015

все выходящие ножки ардуино поменял на их собратьев, результат такой же

vk007
Offline
Зарегистрирован: 16.06.2015

+ питания на 16-й ноге вижу, а где земля на 8-й???

Kruppa
Offline
Зарегистрирован: 18.12.2015

Да, землю забыл.
Но я её раньше ставил, не работала схема. Сейчас опять поставил - не работает.

Я попробовал другой код, там всё работает. Проблема где-то в коде, на мой взгляд

vk007
Offline
Зарегистрирован: 16.06.2015

Небольшая рекомендация - используйте цвета проводов с умом. Это намного облегчит понимание, что куда подключено.

У вас сейчас синими проводками заведены от ардуины на макетку и земля, и +5V. Потом + дальше по схеме расходится желтым и зеленым, земля дальше разведена красным. И это на простой схеме, представьте, что будет на сложной. Просто так, не отследив, куда подключен провод, "без стакана" не разобраться.

Определите для себя, например, синий - это земля, красный - питание (или какие вам там цвета больше нравятся). Но вся земля - одним цветом, питание - другим, все остальное - какие остались.

vk007
Offline
Зарегистрирован: 16.06.2015

Kruppa пишет:

Да, землю забыл.
Но я её раньше ставил, не работала схема. Сейчас опять поставил - не работает.

Ну без питания оно точно работать не будет. 8 - "gnd", 16 - "+".

Kruppa
Offline
Зарегистрирован: 18.12.2015

Абсолютно согласен с Вами) Но у меня просто проводов мало было)

Kruppa
Offline
Зарегистрирован: 18.12.2015

да, сейчас стоит на 8 минус, а на 16 плюс. Светятся все диоды.
Если ставлю паузу после цикла, они начинают светится поочередно.
Причем, предыдущий не гаснет. Когда зажигается третий диод - горят дальше уже все вместе

vk007
Offline
Зарегистрирован: 16.06.2015

Было бы полезно поцепить на выходы из ардуины, которыми управляется микросхема, светодиоды (data, clock, latch). А в скетче натыкать между функциями delay (хотя бы в секунду каждый) и визуально посмотреть, что выдает ардуина.

Но тут используется shiftOut, которая очень быстро все сделает и разглядеть будет невозможно. Попробуйте без нее обойтись.

Там ничего сложного в ее реализации нет.

1) На пин data выставляете нужное значение - 1 (HIGH) или 0 (LOW).

2) После этого на пин clock 1.

3) И снова на пин clock но уже 0.

4) И т.д. несколько раз пункты 1-3 - сколько бит надо передать.

Но это если действительно захотите разобраться.

Kruppa
Offline
Зарегистрирован: 18.12.2015

Правильно ли я понял, что надо написать вместо битов-

///////////////////////////////

digitalWrite(data, HIGH);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

digitalWrite(data, LOW);

/////////////////////////////////

digitalWrite(clock, HIGH);

digitalWrite(clock, LOW);

?

Kruppa
Offline
Зарегистрирован: 18.12.2015

Кстати, собрал с этой же ардуинкой и с этой же микросхемой сдвига - более сложную схемку - всё работает без проблем...
Все же что с кодом, мне кажется

vk007
Offline
Зарегистрирован: 16.06.2015

после каждого digitalWrite(data, ... ) надо ставить

digitalWrite(clock, HIGH);

digitalWrite(clock, LOW);

Т.е. выставили бит, подали импульс на clock, снова выставили бит, снова импульс, ...

Это как бы если представить, что у вас есть несколько мячей - черных и белых.

Поставили перед собой мяч - digitalWrite(data, "черный" или "белый" );

Сделали удар - digitalWrite(clock, HIGH); digitalWrite(clock, LOW); - приложили силу и убрали силу.

Kruppa
Offline
Зарегистрирован: 18.12.2015

Написал такой код

#define clock 13
#define data 12
#define latch 10
 
void setup() {
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  digitalWrite(latch, HIGH);
}
 
void loop() {
digitalWrite(latch, LOW);

/////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
/////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(latch, HIGH);
}

Опять встре три диода горят, будь они...!))

vk007
Offline
Зарегистрирован: 16.06.2015

Kruppa пишет:

Опять встре три диода горят, будь они...!))

А горят все три потому что оно крутится в loop, и с каждым циклом горящий светодиод сдвигается дальше.

Перенесите код в setup и будет гореть только один.

vk007
Offline
Зарегистрирован: 16.06.2015

Я предложил избавиться от shiftOut только чтобы можно задержек натыкать и посмотреть как оно передает данные на микросхему в "замедленной съемке". А работа кода от этого не поменяется конечно.

Kruppa
Offline
Зарегистрирован: 18.12.2015

Ну хорошо, а тогда почему при таком варианте вообще ничего не горит?
 

#define clock 13
#define data 12
#define latch 10
 
void setup() {
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
  pinMode(latch, OUTPUT);
  digitalWrite(latch, HIGH);
}
 
void loop() {
digitalWrite(latch, LOW);

/////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(data, HIGH);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
/////////////
digitalWrite(data, LOW);
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
////////////
digitalWrite(latch, HIGH);
}

 

vk007
Offline
Зарегистрирован: 16.06.2015

Блин, плохо ночью голова соображает, сразу и не увидел - да там выводы перепутаны!

должно быть:

#define clock 10
#define data 12
#define latch 13

и все заработает как надо и даже не перенося в setup!

Вот вариант с "замедлением кода" и установкой диодов на выводы ардуины и подошел бы как раз, можно было бы заметить, что моргает не тот "clock".

vk007
Offline
Зарегистрирован: 16.06.2015

Получилось?

Kruppa
Offline
Зарегистрирован: 18.12.2015

Даааа!)))) УРА!)))
Спасибо большущее!))))