Arduino uno - 4-значный 7-сегментный дисплей через 74HC595 продолжает мигать
Я пытаюсь перевести свой 4-разрядный дисплей (SH5461AS) в диапазон от 0 до 9 с помощью функции millis().
Проблема в том, что он продолжает мигать. Даже если я показываю только одно число, оно отображается, затем становится черным, а затем снова отображается вместо того, чтобы оставаться включенным. Также верхний сегмент (A) несколько задерживается. Иногда показывает, иногда нет. Я действительно не уверен, что происходит. Лучше всего это показано на видео: https://youtube.com/shorts/gmbNnvEYq2I
Я подключил Arduino UNO R3 к 8-битному регистру 74HC595, а оттуда к соответствующим контактам «данных» на дисплее. Это обычный катод, поэтому все они подключены к земле через резистор.
Приношу извинения за беспорядочную проводку:
От дисплея в основном все резисторы подключаются к земле, а все кабели данных к регистру (Q0-DP опущены, сегменты A-Q7, B-Q6, .., G-Q1 [десятичное число 1=A, 2=B , 3=АВ,..]).
В реестре я получил VCC, заземление, кабели данных, заземление EO, последовательные данные->arduino D4, часы хранения-> D5, сдвиг часов -> D6
#include <LiquidCrystal.h>
// ЖК-дисплей
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
//7SEG ДИСПЛЕЙ
int LATCH = 5;
int CLOCK = 6;
int SERIALPIN = 4;
const byte numbers[] = {
0b111111, 0b0000110, 0b1011011, 0b1001111, 0b1100110, 0b1101101, 0b1111101, 0b0000111, 0b1111111, 0b1101111
};
//ДРУГОЙ
void setup() {
// ЖК-дисплей
lcd.begin(16, 2);
lcd.print("Test!");
//7СЕГ
pinMode(SERIALPIN, OUTPUT);
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
//ДРУГОЙ
pinMode(13, OUTPUT); // выключаем бортовой диод
Serial.begin(9600);
}
void loop() {
countSeconds();
delay(1000);
}
void countSeconds(){
digitalWrite(LATCH, LOW);
// целое число = (millis()/1000%10);
// Serial.println(номер);
shiftOut(SERIALPIN, CLOCK, LSBFIRST, numbers[0]); //для демонстрации отображаем 0
digitalWrite(LATCH, HIGH);
}
Есть идеи, что не так?
@Ono Tosamo, 👍1
Обсуждение1 ответ
Лучший ответ:
Как указал @Mat, контакт сброса на сдвиговом регистре не был подключен. Я не понимал, что мне нужно закрепить его высоко. Решил все проблемы, я предполагаю, что это был непредсказуемый сброс..
- 74HC595 к 4 значному 7 сегменту с использованием библиотеки SevSegShift
- Подключение семисегментного дисплея с общим анодом к сдвиговому регистру
- Прочитать значение регистра в arduino
- 7-сегментный дисплей с потенциометром
- Как прочитать выходные данные с разъема SPI с помощью Arduino Uno?
- Как обнаружить нажатия кнопок с помощью сдвигового регистра 74HC595?
- 4-значный 7-сегментный дисплей неправильно отображает значение
- Проблема с подключением 2 8-разрядных сдвиговых регистров 74HC595 в каскадном соединении
что произойдет, если вы поменяете местами две строки программы digitalWrite()?, @jsotola
Трудно сказать, но похоже, что контакт сброса плавает. Убедитесь, что он привязан высоко (или контролируется вашим MCU)., @Mat