Проблема со сдвиговым регистром
- Войдите на сайт для отправки комментариев
Пт, 27/12/2019 - 10:12
Здравствуйте, уважаемые форумчане!
Сильно не судите, не программист я, с ребенком балуемся. Если, и информации не хватает, напишите пожалуйста.
Прошу подсказать направление для решения следующей проблемы.
Работаю с широко известным сдвиговым регистром 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);
}
Дорогой waw555 с ребёнком, если Вы пишете о том, что у вас проблема со сдвиговым регистром, то приводите код, в котором есть только сдвиговый регистр.
А коли у вас это всё замотано три раза в BLYNK, не пытайтесь искать кошку в тёмной комнате, обвиняя сдвиговый регистр в том, чего он не совершал.
Иными словами - учитесь описывать проблему правильно. Это и вам поможет и вашему ребёнку.
Хорошо, попробуем по другому.
Имею проблему с логической единицей, на выходе 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 не появляется.
В чем может быть проблема?
Иными словами, вот это:
void updateShiftRegister() { digitalWrite(LATCH, LOW); shiftOut(DATA, CLOCK, LSBFIRST, B11111111); digitalWrite(LATCH, HIGH); }Выставляет только 7 выходов в лог.1?
Да, все верно, поставил ваш код, и нет логической 1 на выходе QH
поставил на все выходы светодиоды, загорелись все кроме QH
Да, все верно, поставил ваш код, и нет логической 1 на выходе QH
поставил на все выходы светодиоды, загорелись все кроме QH
А вы случайно выход Qh(7я нога) с выходом SQh (9я нога) не перепутали? И если нет, то может просто микросхема битая?
Тогда, выходит, что проблема с железом - контакты, дохлая МС.
Для гарантии я бы, конечно, какую-нить нану ещё натравил на сдвиговый. Так скыть - контрольный эксперимент.
поставил на все выходы светодиоды, загорелись все кроме QH
Вопрос, на всякий, для ясности: не перепутали QH с QH' ?
Нет QH с QH' не перепутал, QH - 7 нога.
Подключил UNO, та же история.
Поехал за новой микросхемой.
Проблема решена, новая микросхема заработала как надо. Спасибо за уделенное время.