Вопрос по 74HC595
- Войдите на сайт для отправки комментариев
Сб, 19/12/2015 - 20:13
Подскажите, пожалуйста!
Начал разбираться с микросхемой сос двиговым регистром.
Нашел совсем простенький учебный код :
#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); }
Несколько раз всё перепроверил, но в итоге, диоды светятся не как в статье (там должен светиться только первый), а сперва загарается первый, потом второй и т.д., а потом они дружно светятся все вместе)))
Я уж думал, что сам ошибся где-то, несколько раз все перепроверил. Но нет. Ошибок моих вроде нет...
Собственно, сама статья - http://cxem.net/arduino/arduino166.php
Текст Вашей программы вполне соответствует Вашему описанию ее работы.
Кстати, можете указать строчки, которые по Вашему мнению должны изменять количество горящих светодиодов?
PS. Перечитал. Засомневался в словесном описании. По скетчу должен гореть один светодиод.
PPS. Еще раз перечитал. В скетче на савмом деле много чего не хватает. Так что, если он работает как-то непонятно, я не удивлюсь. Для начала добавьте последним оператором в loop() строчку:
delay(200);
Так в том и дело, что должен гореть один диод. А горят все.
я добавлял, не помогает вообще:(
Добавьте delay(), потом посмотрим.
Попробуйте перенести сигнал с пина 13 на какой-нибудь другой.
Вообще, есть уверенность, что схема правильно собрана?
Поставил на 8 пин. Тоже самое.
Несколько раз разбирал и собирал схему.
Если, конечно, не перепутал первую ножку с последней у микросхемы 74HC95,
но по описанию, 1-я ножка идет слева наверху, возле полукруглой выемки. Значит верно вроде..
Даже не знаю, что еще может быть.
Схему брали отсюда? http://arduino.ru/Tutorial/registr_74HC595
Нет,
отсюда - http://cxem.net/arduino/arduino166.php
Но распиновка вроде такая же там
Если, конечно, не перепутал первую ножку с последней у микросхемы 74HC95,
но по описанию, 1-я ножка идет слева наверху, возле полукруглой выемки. Значит верно вроде..
Уверены? Слева наверху - это смотря как корпус повернуть.
(вид сверху)
Да, именно так. Там выемка такая же.
Я так понимаю, корпус с лицевой стороны - должен смотреть на меня (с лицевой - где надписи)?
Снизу, правда, еще какой-то кружок есть...
Ну я бы начал копать в сторону аппаратных проблем:
- заменил микросхему регистра на другой экземпляр,
- подключил схему к другим ногам (все три) Ардуино.
Да, если смотреть на маркировку (в нормальной горизонтальной ориентации), то ключ (выемка) должен быть слева, 1 ножка - слева внизу, остальные - против часовой стрелки.
я заменил микросхему 74HC595. Всё тоже самое...
Правильно я понимаю распиновку её?

да
все выходящие ножки ардуино поменял на их собратьев, результат такой же
+ питания на 16-й ноге вижу, а где земля на 8-й???
Да, землю забыл.
Но я её раньше ставил, не работала схема. Сейчас опять поставил - не работает.
Я попробовал другой код, там всё работает. Проблема где-то в коде, на мой взгляд
Небольшая рекомендация - используйте цвета проводов с умом. Это намного облегчит понимание, что куда подключено.
У вас сейчас синими проводками заведены от ардуины на макетку и земля, и +5V. Потом + дальше по схеме расходится желтым и зеленым, земля дальше разведена красным. И это на простой схеме, представьте, что будет на сложной. Просто так, не отследив, куда подключен провод, "без стакана" не разобраться.
Определите для себя, например, синий - это земля, красный - питание (или какие вам там цвета больше нравятся). Но вся земля - одним цветом, питание - другим, все остальное - какие остались.
Да, землю забыл.
Но я её раньше ставил, не работала схема. Сейчас опять поставил - не работает.
Ну без питания оно точно работать не будет. 8 - "gnd", 16 - "+".
Абсолютно согласен с Вами) Но у меня просто проводов мало было)
да, сейчас стоит на 8 минус, а на 16 плюс. Светятся все диоды.
Если ставлю паузу после цикла, они начинают светится поочередно.
Причем, предыдущий не гаснет. Когда зажигается третий диод - горят дальше уже все вместе
Было бы полезно поцепить на выходы из ардуины, которыми управляется микросхема, светодиоды (data, clock, latch). А в скетче натыкать между функциями delay (хотя бы в секунду каждый) и визуально посмотреть, что выдает ардуина.
Но тут используется shiftOut, которая очень быстро все сделает и разглядеть будет невозможно. Попробуйте без нее обойтись.
Там ничего сложного в ее реализации нет.
1) На пин data выставляете нужное значение - 1 (HIGH) или 0 (LOW).
2) После этого на пин clock 1.
3) И снова на пин clock но уже 0.
4) И т.д. несколько раз пункты 1-3 - сколько бит надо передать.
Но это если действительно захотите разобраться.
Правильно ли я понял, что надо написать вместо битов-
///////////////////////////////
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);
?
Кстати, собрал с этой же ардуинкой и с этой же микросхемой сдвига - более сложную схемку - всё работает без проблем...
Все же что с кодом, мне кажется
после каждого digitalWrite(data, ... ) надо ставить
digitalWrite(clock, HIGH);
digitalWrite(clock, LOW);
Т.е. выставили бит, подали импульс на clock, снова выставили бит, снова импульс, ...
Это как бы если представить, что у вас есть несколько мячей - черных и белых.
Поставили перед собой мяч - digitalWrite(data, "черный" или "белый" );
Сделали удар - digitalWrite(clock, HIGH); digitalWrite(clock, LOW); - приложили силу и убрали силу.
Написал такой код
Опять встре три диода горят, будь они...!))
Опять встре три диода горят, будь они...!))
А горят все три потому что оно крутится в loop, и с каждым циклом горящий светодиод сдвигается дальше.
Перенесите код в setup и будет гореть только один.
Я предложил избавиться от shiftOut только чтобы можно задержек натыкать и посмотреть как оно передает данные на микросхему в "замедленной съемке". А работа кода от этого не поменяется конечно.
Ну хорошо, а тогда почему при таком варианте вообще ничего не горит?
Блин, плохо ночью голова соображает, сразу и не увидел - да там выводы перепутаны!
должно быть:
и все заработает как надо и даже не перенося в setup!
Вот вариант с "замедлением кода" и установкой диодов на выводы ардуины и подошел бы как раз, можно было бы заметить, что моргает не тот "clock".
Получилось?
Даааа!)))) УРА!)))
Спасибо большущее!))))