74HC595, 74HC165, ULN2003 + nano

Grigory
Offline
Зарегистрирован: 29.03.2014

 Доброго дня, пытаюсь совместить 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);
}

 

Grigory
Offline
Зарегистрирован: 29.03.2014

все микрухи цепляю на arduino nano

diger67
Offline
Зарегистрирован: 25.07.2015

Считать по одному пину невозможно, считывается весь байт разом в буфер, а потом  переносится в регистр сдвига.

Изначально у вас inloadPin находится в LOW, надо в setup прописать его начальное состояние

digitalWrite(inloadPin, HIGH);
digitalWrite(LOCKPin, LOW)

 

Далее по даташиту  CE в HIGH, PE puls LOW-HIGH (считываем данные с Q0-Q7 в буффер), CE переводится с небольшой задержкой в LOW (переносим в регистр сдвигв), CP(инверсный тактовый вход) puls HIGH-LOW 8 тактов (выводим в последовательном виде).

Вот теперь происходит вывод в последовательный порт 74hc165. В теле обработки чтения по последовательному порту вы каждый раз записываете в позицию bit0 значения принятого бита, а где сдвиг temp? Может так


for (int i = 0; i < 8; i++) { // В цикле считываем каждый из 8 входов (D0-D7) 74HC165.    digitalWrite(LOCKPin, HIGH);   // Устанавливаем CLK в лог "0". 
temp |= digitalRead(indataPin); // Читаем текущее состояние выхода данных "Q7" 74HC165 логическое или с temp.
temp=temp<<1;                   // Сдвигаем байт на одну позицию влево подгоьавливаем место для приема следующего бита
digitalWrite(LOCKPin, LOW);   // Устанавливаем CLK в лог "1" и этем завершаем вывод данных.
​} 
Serial.print (temp);           // Отправляем данные из TEMP по UART 
 

Еще раз внимательно изучите эпюры сигналов управления данной микросхемы.

P.S. можно управляя этими двумя микросхемами считать иформацию в 74hc165 и минуя обработку в adrduine записать прямо в 74hc595 и вывести на индикаторы. Это конечно если нет необходимости выполнять еще какие то операции с полученной информацией.