Доброго дня! Собрал такую схему! что в ней не так, постоянно открыты ключи на BC557 транзисторе, в матрице столбец постоянно светится, digitalWrite(номер пина, HIGH); или digitalWrite(номер пина, LOW); ничего не дают. Может я не так что то подключаю? что сдесь не правильно? пример скетча: Код (Text): #include <SPI.h> enum { REG = 8 }; // пин, управляющий защёлкой (SS в терминах SPI) int col_1 = 2; int col_2 = 3; int col_3 = 4; int col_4 = 5; int col_5 = 6; int col_6 = 7; int col_7 = 9; /* Теперь шлём по 16 бит. Важный момент: так как по умолчанию * данные передаются, начиная со старшего бита, сначала нужно * послать старший байт, затем - младший - тогда всё 16 бит * передадутся в правильном порядке. */ void writeShiftRegister16(int ss_pin, uint16_t value) { digitalWrite(ss_pin, LOW); /* Фокус вот в чём: сначала шлём старший байт */ SPI.transfer(highByte(value)); /* А потом младший */ SPI.transfer(lowByte(value)); digitalWrite(ss_pin, HIGH); } /* Слегка изменим функцию для работы с 16-битными значениями */ void rotateLeft(uint16_t &bits) { uint16_t high_bit = bits & (1 << 15) ? 1 : 0; bits = (bits << 1) | high_bit; } void setup() { pinMode(col_1, OUTPUT); pinMode(col_2, OUTPUT); pinMode(col_3, OUTPUT); pinMode(col_4, OUTPUT); pinMode(col_5, OUTPUT); pinMode(col_6, OUTPUT); pinMode(col_7, OUTPUT); digitalWrite(col_1, HIGH); digitalWrite(col_2, HIGH); digitalWrite(col_3, HIGH); digitalWrite(col_4, HIGH); digitalWrite(col_5, HIGH); digitalWrite(col_6, HIGH); digitalWrite(col_7, HIGH); SPI.begin(); pinMode(REG, OUTPUT); writeShiftRegister16(REG, 0); } // the loop routine runs over and over again forever: void loop() { uint16_t nomad = 1; for(int i = 0; i < 10; i++){ // в данный момент матрица на 10 столбиков! // writeShiftRegister16(REG, 0); // digitalWrite(col_1, HIGH); // delay(300); // digitalWrite(col_1, LOW); // writeShiftRegister16(REG, 0); // delay(300); // digitalWrite(col_2, HIGH); // delay(300); // digitalWrite(col_2, LOW); // writeShiftRegister16(REG, 0); // delay(300); writeShiftRegister16(REG, nomad); rotateLeft(nomad); delay(250); } }
да в матрице стоят на 300 ом. Щас взял просто транзистор BC557C - на эмиттер подал 5 вольт. проверяю напряжение - на эмиттере = 5.11, на базе = 5.19 (через резистор на 8.2 кОм так само 5.18?) , коллектор = 0. Подключаю пин ардуино ( который с задержкой в несколько секунд меняет состояние HIGH на LOW) через резистор на 8.2 кОм. замеряю. эмиттер = 5.11, база на транзисторе = 4.44 , коллектор = 5 вольт - постоянно в независимости от состояния пина!!! даже когда пин не подключен и касаешся базы - на коллекторе появляется напряжение! что за фигня?! что не так делаю?
так - поставил между базой и эмиттером резик на 10 кОм - вроде заработало. теперь надо как то расчитать правильность номиналов этих резисторов. Может кто подскажет как вообще правильно делать ключ на p-n-p транзисторе и можно ли его в данной схеме чем то заменить - вроде про мосфеты с каким то n канолом ????
http://wiki.amperka.ru/конспект-arduino:биполярный-транзистор Далее - почему с LM7805 питание кидаете на Vin а не на 5V? На регуляторе ардуины в итоге падает напряжение ниже 5 вольт, и у вас на ардуине в итоге те самые 4,44 вольта. Разницы напряжения между эмиттером и базой в итоге хватает на то, чтоб открыть транзистор, и получаете то что имеете. Подайте с 7805 сразу на вход 5V, должно помочь.