Проблема с подключением 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 ответ
Лучший ответ:
Мне действительно очень жаль говорить , что после долгой проверки я обнаружил , что
очистить регистр сдвига (вывод 10) вывод второго регистра сдвига остался неактивным из-за неплотного подключения питания, после его исправления все регистры сдвига работают очень хорошо.
Я действительно приношу извинения всем тем друзьям, которые пришли мне на помощь, за то, что потратили свое время впустую, я действительно очень сожалею об этом ...
теперь все проблемы решены.
- Как Peggy2 управляет строками с помощью декодера 74HC154?
- Почему светодиоды заметно мерцают?
- Работа с мультиплексорами для получения постоянного напряжения на выходе
- Светодиоды не загораются, даже если через них идет ток. Проблема с землей?
- я не могу работать над своим небольшим проектом
- Несколько условий оператора if
- Светодиоды: разница между общим анодом и общим катодом
- Остановить мигание светодиодов
подключите выход микроконтроллера ко второму разъему 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