Проблема с подключением 2 8-разрядных сдвиговых регистров 74HC595 в каскадном соединении

Теперь я успешно научился управлять одним 8-битным сдвиговым регистром 74HC595 с помощью Arduino UNO, но всякий раз, когда я пытался подключить другой к первому сдвиговому резистору через каскадное соединение, как показано на рисунке ниже (ну, я не использовал конденсатор 10 мкФ между положительным и отрицательным выводами), первый сдвиговый регистр только выводит по желанию, но второй регистр сдвига, подключенный к каскадному соединению, похоже, не работает ...

Вот этот код.

    int latchPin = 10;  // Контакт защелки 74HC595 подключен к цифровому контакту 5
int clockPin = 11;  // Вывод синхронизации 74HC595 подключен к цифровому контакту 6
int dataPin = 9;    // Вывод данных 74HC595 подключен к цифровому контакту 4

byte leds = 0;      // Переменная для хранения шаблона, для которого светодиоды в данный момент включены или выключены

/*
 * setup() - this function runs once when you turn your Arduino on
 * We initialize the serial connection with the computer
 */
void setup() 
{
  // Установите все контакты 74HC595 в качестве ВЫХОДНЫХ
  pinMode(latchPin, OUTPUT);
  pinMode(dataPin, OUTPUT);  
  pinMode(clockPin, OUTPUT);
  Serial.begin(9600);
}

/*
 * loop() - this function runs over and over again
 */
void loop() 
{
  leds = 0; // Первоначально выключает все светодиоды, присваивая переменной 'leds' значение 0
  updateShiftRegister();
  delay(500);
  for (int i = 0; i <= 16; i++) // Включите все светодиоды один за другим. 
  {
    bitSet(leds, i);        // Установите бит, который управляет этим светодиодом в переменной 'светодиоды'
    updateShiftRegister();
    delay(500);
  }
  
 /* The loop above should repeated 16 times as there are 2 shift resistors, each of them containing 8 and we need to lit up all 16 LEDs*/ 
  
}

/*
 * updateShiftRegister() - This function sets the latchPin to low, then calls the Arduino function 'shiftOut' to shift out contents of variable 'leds' in the shift register before putting the 'latchPin' high again.
 */
void updateShiftRegister()
{
   digitalWrite(latchPin, LOW);
   shiftOut(dataPin, clockPin, LSBFIRST, leds);
   digitalWrite(latchPin, HIGH);
}

так это мой код или проблема с проводкой?

Я прочитал много статей в Интернете, чтобы разобраться в этом, но, к сожалению, ни одна из статей меня не удовлетворила.

большое спасибо, что уделили мне немного своего драгоценного времени ...

, 👍1

Обсуждение

подключите выход микроконтроллера ко второму разъему 74HC595, чтобы протестировать его, @jsotola

добавьте второй сдвиг. один отправляет только 8 бит. https://www.arduino.cc/reference/en/language/functions/advanced-io/shiftout/, @Juraj

кто-нибудь, пожалуйста, опубликуйте код, я действительно не могу понять, что делать, даже после прочтения ссылки на статью @Juraj, у меня в голове новый беспорядок, @Subha Jeet Sikdar

добавьте leds2 и отправьте его перед светодиодами, @Juraj

Вы (по-прежнему) перемещаете только один байт (8 бит) данных, поэтому ваш второй HC595 никогда не получает никаких данных. Вы должны сделать то, что написал @Juraj: добавьте переменную leds2 в свой код и вставьте второй shiftOut (dataPin, clockPin, LSBFIRST, leds2); перед первым shiftOut () в функцию updateShiftRegister (). Вы также должны установить соответствующие биты в leds2, чтобы управлять тем, какой светодиод включен, а какой выключен., @StarCat

Как писал Юрай, добавьте еще одну строку shiftOut (dataPin, clockPin, LSBFIRST, светодиоды); в функцию updateShiftRegister (), прямо над или под другой. В настоящее время вы отправляете данные только для первого сдвигового регистра. Второму регистру также понадобятся данные, поэтому вам нужно переместить еще один байт данных., @chrisl

О, чтобы немного понять это, я должен создать еще один байтовый тип данных с именем 'led2' для второго сдвигового регистра, а затем повторить тот же процесс? Верно?, @Subha Jeet Sikdar


1 ответ


Лучший ответ:

0

Мне действительно очень жаль говорить , что после долгой проверки я обнаружил , что

очистить регистр сдвига (вывод 10) вывод второго регистра сдвига остался неактивным из-за неплотного подключения питания, после его исправления все регистры сдвига работают очень хорошо.

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

теперь все проблемы решены.

,