74HC595, 74HC165, ULN2003 + nano
- Войдите на сайт для отправки комментариев
Вс, 06/03/2016 - 18:35
Доброго дня, пытаюсь совместить 595 и uln2003 , 74HC165 по следующим схемам, но в мониторе ком порта получаю постоянно разные значения, хотя на нулевой порт 74HC165 приходит постоянно HIGH, подскажите что не так сделал.
int indataPin = 2; // Вывод чтения данных из 74HC165 (9). int LOCKPin = 4; // Вывод CLK для 74HC165 (2). int inloadPin = 3; // Вывод выбора Параллельный ввод/последовательный вывод. Для 74HC165 (1). int temp = 0; // Переменная хранения приятых данных из 74HC165. int latchPin = 12; int clockPin = 11; int dataPin = 13; int Sbros = 10; void setup() { Serial.begin(9600); pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clockPin, OUTPUT); //Serial.begin(9600); // Выбираем скорость обмена по UART. pinMode(indataPin, INPUT); // Настраиваем на Ввод для приёма данных из 74HC165. pinMode(LOCKPin, OUTPUT); // Настраиваем на Вывод CLK на 74HC165. pinMode(inloadPin, OUTPUT); // Настраиваем на Вывод load на 74HC165. } void loop() { digitalWrite(inloadPin, 0); // считываем все данные со входов 74HC165 в регистр. digitalWrite(inloadPin, 1); // выводим данные на последовательный вывод "Q7" 74HC165. for (int i = 0; i <= 7; i++) { // В цикле считываем каждый из 8 входов (D0-D7) 74HC165. digitalWrite(LOCKPin, 0); // Устанавливаем CLK в лог "0". temp = digitalRead(indataPin); // Читаем текущее состояние выхода данных "Q7" 74HC165. digitalWrite(LOCKPin, 1); // Устанавливаем CLK в лог "1" и этем завершаем вывод данных. Serial.print (temp); // Отправляем данные из TEMP по UART } Serial.println (""); Serial.println ("--------"); delay(2000); ////////Пишем значение на sn74 595 byte c = B10000000; // формируем байт информации из 8 бит для 8 светодиодов //digitalWrite(Sbros, HIGH); digitalWrite(latchPin, LOW);// открываем защелку для ввода информации shiftOut(dataPin, clockPin, LSBFIRST, c );// побитово закружаем байт информации digitalWrite(latchPin, HIGH);// закрываем защелку delay(5000); c = B00000000; //digitalWrite(Sbros, LOW); digitalWrite(latchPin, LOW);// открываем защелку для ввода информации shiftOut(dataPin, clockPin, LSBFIRST, c );// побитово закружаем байт информации digitalWrite(latchPin, HIGH);// закрываем защелку delay(5000); }
все микрухи цепляю на arduino nano
Считать по одному пину невозможно, считывается весь байт разом в буфер, а потом переносится в регистр сдвига.
Изначально у вас inloadPin находится в LOW, надо в setup прописать его начальное состояние
Далее по даташиту CE в HIGH, PE puls LOW-HIGH (считываем данные с Q0-Q7 в буффер), CE переводится с небольшой задержкой в LOW (переносим в регистр сдвигв), CP(инверсный тактовый вход) puls HIGH-LOW 8 тактов (выводим в последовательном виде).
Вот теперь происходит вывод в последовательный порт 74hc165. В теле обработки чтения по последовательному порту вы каждый раз записываете в позицию bit0 значения принятого бита, а где сдвиг temp? Может так
Еще раз внимательно изучите эпюры сигналов управления данной микросхемы.
P.S. можно управляя этими двумя микросхемами считать иформацию в 74hc165 и минуя обработку в adrduine записать прямо в 74hc595 и вывести на индикаторы. Это конечно если нет необходимости выполнять еще какие то операции с полученной информацией.