Проблема со сдвиговым регистром

waw555
Offline
Зарегистрирован: 27.12.2019

Здравствуйте, уважаемые форумчане!

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

Прошу подсказать направление для решения следующей проблемы.

Работаю с широко известным сдвиговым регистром 74HC595

Не могу понять, почему не могу запустить последний выход.

Связка следующая:

NodeMCU + HW-130 Motor Shield

не срабатывает следующий код:


BLYNK_WRITE(V9)
{
  ledpos = 7;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

 

В ledpos = 0; включаю необходимую мне позицию, но ledpos = 7; не включает последнюю 8 позицию.

void setup(){ 
 byte leds = 0;
 ledpos = 0;
} 
BLYNK_WRITE(V2)
{
  ledpos = 0;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V3)
{
  ledpos = 1;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V4)
{
  ledpos = 2;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V5)
{
  ledpos = 3;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V6)
{
  ledpos = 4;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V7)
{
  ledpos = 5;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V8)
{
  ledpos = 6;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}

BLYNK_WRITE(V9)
{
  ledpos = 7;
  if ( param.asInt() == 1 ) {
    Serial.println(leds);
    bitWrite(leds, ledpos, HIGH);
    updateShiftRegister(); }
  else {
    Serial.println(leds);
    bitWrite(leds, ledpos, LOW);
    updateShiftRegister(); }
}
void updateShiftRegister()
{
   digitalWrite(LATCH, LOW);
   shiftOut(DATA, CLOCK, LSBFIRST, leds);
   Serial.print("updateShiftRegister");
   Serial.println(leds);
   digitalWrite(LATCH, HIGH);
}

 

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Дорогой waw555 с ребёнком, если Вы пишете о том, что у вас проблема со сдвиговым регистром, то приводите код, в котором есть только сдвиговый регистр.

А коли у вас это всё замотано три раза в BLYNK, не пытайтесь искать кошку в тёмной комнате, обвиняя сдвиговый регистр в том, чего он не совершал.

Иными словами - учитесь описывать проблему правильно. Это и вам поможет и вашему ребёнку.

waw555
Offline
Зарегистрирован: 27.12.2019

Хорошо, попробуем по другому.

Имею проблему с логической единицей, на выходе QH микросхемы 74HC595.

Отправляя на микросхему 74HC595 следующие данные

через ledpos задаю позицию в байте от 0 до 7

через функцию bitWrite(leds, ledpos, HIGH); сохраняю байт в переменную leds

через функцию updateShiftRegister() передаю leds в микросхему

void updateShiftRegister()
{
   digitalWrite(LATCH, LOW);
   shiftOut(DATA, CLOCK, LSBFIRST, leds);
   Serial.print("updateShiftRegister");
   Serial.println(leds);
   digitalWrite(LATCH, HIGH);
}

При передаче байта с ledpos от 0 до 6, на выходах QA-QG микросхемы появляется логическая 1, а при передаче ledpos = 7 логическая 1 на выходе QH не появляется.

В чем может быть проблема?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Иными словами, вот это:

void updateShiftRegister()
{
   digitalWrite(LATCH, LOW);
   shiftOut(DATA, CLOCK, LSBFIRST, B11111111);
   digitalWrite(LATCH, HIGH);
}

Выставляет только 7 выходов в лог.1?

waw555
Offline
Зарегистрирован: 27.12.2019

Да, все верно, поставил ваш код, и нет логической 1 на выходе QH

 

поставил на все выходы светодиоды, загорелись все кроме QH

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

waw555 пишет:

Да, все верно, поставил ваш код, и нет логической 1 на выходе QH

 

поставил на все выходы светодиоды, загорелись все кроме QH

А вы случайно выход Qh(7я нога) с выходом SQh (9я нога) не перепутали? И если нет, то может просто микросхема битая?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Тогда, выходит, что проблема с железом - контакты, дохлая МС.

Для гарантии я бы, конечно, какую-нить нану ещё натравил на сдвиговый. Так скыть - контрольный эксперимент.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

waw555 пишет:

поставил на все выходы светодиоды, загорелись все кроме QH

Вопрос, на всякий, для ясности: не перепутали QH с QH' ?

waw555
Offline
Зарегистрирован: 27.12.2019

Нет QH с QH' не перепутал, QH - 7 нога.

Подключил UNO, та же история.

Поехал за новой микросхемой.

waw555
Offline
Зарегистрирован: 27.12.2019

Проблема решена, новая микросхема заработала как надо. Спасибо за уделенное время.