Сдвиговый регистр 74hc595
- Войдите на сайт для отправки комментариев
Пнд, 18/05/2020 - 20:45
В самодельной схеме

есть два последовательно подключенных регистра к которым через резисторы в 300Ом подсоединены SMD светодиоды, т.о. что они (светодиоды) образуют семисегментный индикатор. Все в принципе работает, но при некоторых комбинациях цифр (одних и тех же) два светодиода питаемые со со второго регистра начинают светиться чуть видно. Я в начале подумал, что не хватает питания, но опять же число 88 выводит в полную яркость. В чем может быть причина?
Причем проблема со светодиодами на 3 и 4 выводе считая от точки против часовой стрелки первого (я ошибся, на самом деле не второго, а первого) регистра. Но в целом эти выводы работают, светодиоды горят при проверках.
const byte ST = A0; //ST_CP 74HC595 const byte SH = A1; //SH_CP 74HC595 const byte DS = 13; //DS 74HC595 byte first[] = { B00001110 , B00001110 , //0 B00001000 , B00000010 , //1 B01001010 , B00001100 , //2 B01001010 , B00001010 , B01001100 , B00000010 , B01000110 , B00001010 , B01000110 , B00001110 , B00001010 , B00000010 , B01001110 , B00001110 , B01001110 , B00001010 }; byte second[] = { B00110001 , B01110000 , //0 B00010000 , B00010000 , //1 B00010001 , B01100001 , //2 B00010001 , B01010001 , B00110000 , B00010001 , B00100001 , B01010001 , B00100001 , B01110001 , B00010001 , B00010000 , B00110001 , B01110001 , B00110001 , B01010001 }; byte dot[] = { B00000000 , B10000000 , B00000000 , B00000000 }; byte a = 0; //левый индикатор, Х byte b = 0; //правый индикатор, Y byte c = 0; //enter void displaySMD(); void setup() { pinMode(ST, OUTPUT); pinMode(SH, OUTPUT); pinMode(DS, OUTPUT); pinMode(A2, INPUT_PULLUP); pinMode(A3, INPUT_PULLUP); pinMode(A4, INPUT_PULLUP); displaySMD(a, b, c); } void loop() { if (digitalRead(A2) == 0) { delay(1000); a++; if (a>9) a=0; displaySMD(a, b, c); } if (digitalRead(A3) == 0) { delay(1000); b++; if (b>9) b=0; displaySMD(a, b, c); } } void displaySMD(byte a, byte b, byte c) { digitalWrite(ST, LOW); //начало передачи shiftOut(DS, SH, LSBFIRST, first[2*a]|second[2*b]); //1 разряд shiftOut(DS, SH, LSBFIRST, first[2*a+1]|second[2*b+1]); //2 разряд digitalWrite(ST, HIGH); //передача окончена }Удалось понять, что если один из них гаснет, то гаснет и второй.
Проблема века решена, КЗ между диодами на второй верхней плате.