Добрый день! Возникла проблема при взаимодействии дисплея на каскаде из 74HC595 и двух модулей P-FET. По отдельности, все работает перекрестно, однако стоит только подключить все вместе, на дисплее просто начинают загораться случайные светодиоды. Если не подключать феты в коде, все работает. На схеме из общего только пин MOSI. Спойлер: Код Код (C++): #define disp_pin 8 //CS пин экрана #define fet_pin 9 //CS пин мосфетов #define mosi_pin 11 //MOSI #define miso_pin 12 //MISO #define sck_pin 13 //SCK #include "AmperkaFET.h" //Библиотека мосфетов FET mosfet(fet_pin, 2); //CS пин мофсфета и количество модулей void setup() { pinMode(disp_pin, OUTPUT); pinMode(fet_pin, OUTPUT); pinMode(disp_pin, OUTPUT); pinMode(mosi_pin, OUTPUT); pinMode(miso_pin, OUTPUT); mosfet.begin(); //Стоит закоментить эту строку, и все работает перкрастно } void loop() { for (int i = 0; i <= 9999; i++) { displaySigns(i); delay (1); } while (true) { } } void displaySigns(int val) { byte sign [4]; sign[3] = val / 1000 % 10; sign[2] = val / 100 % 10; sign[1] = val / 10 % 10; sign[0] = val % 10; digitalWrite(disp_pin, LOW); for (int i = 0; i < 4; i++) { switch (sign[i]) { case 0: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11111100); break; case 1: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b01100000); break; case 2: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11011010); break; case 3: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11110010); break; case 4: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b01100110); break; case 5: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b10110110); break; case 6: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b10111110); break; case 7: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11100000); break; case 8: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11111110); break; case 9: shiftOut(mosi_pin, miso_pin, LSBFIRST, 0b11110110); break; } } digitalWrite(disp_pin, HIGH); } Кстати, та же проблема возникала у меня при работе p-fet и quad dispay'я. Но там экспериментальным путем удалось установить что внесение строки Код (C++): digitalWrite (display_pin, LOW); после каждого обращения к дисплею, решало эту проблему.
Этой командой вы отключали связь с дисплеем, так и тут Вы должны выбрать, с каким устройством вы работаете Вместе нельзя
Да, я читал про SPI, и вообще думал что отключением приема должна заниматься библиотека, к тому же, если я правильно понимаю то LOW наоборот должен был включать прием, но ок, предположим он не инверсный. Проблема в том, что я уже пробовал ставить и низкий и высокий сигнал и на фетах и на дисплее и пихать это в разные куски кода, и либо я не вижу какого то очевидного решения, либо это не работает.
у вас дисплей на сдвиговых регистрах, они не имеют никакого отношения к SPI. подключите дисплей к любым другим пинам, кроме MOSI MISO SCK и пользуйтесь на здоровье
Да, спасибо, в данном скетче действительно помогло, однако в основной программе пока что нет. Ушел думать дальше.