Увеличить
Сдвиговый регистр 74HC165
ВВЕДЕНИЕ
Входной сдвиговый регистр 74HC165 — один из самых распространённых сдвиговых регистров. Он преобразует параллельный входной сигнал в последовательный выходной. Позволяет увеличивать количество входов микроконтроллера.
Используйте сдвиговый регистр для увеличения количества входов микроконтроллера. Например, для определения нажатий среди большого количества кнопок.
ПАРАМЕТРЫ
- Рабочее напряжение: 2 - 6 Вольт DC
- Рабочая температура: от -40°C до +85°C
- Корпус: DIP16
КОРПУС DIP16
Чип преобразовывает входящий параллельный сигнал на 8 пинах (Dx) в выходной последовательный сигнал на 1 пине (Q7).Передача синхронна: для такта используется дополнительный пин (CP). Также отдельным пином управляется регистр данных (PL), что позволяет загружать параллельный сигнал для последовательного считывания с 8 входов одновременно.
Таким образом из трёх пинов микроконтроллера, такого как Arduino, можно получить 8 цифровых входов. Из регистров 74HC165 можно делать каскады, подключая один за другим, и таким образом из всё тех же 3 входящих линий получать 16, 24, 32 и т.д. цифровых входов.
КАК ПОДКЛЮЧИТЬ
Подключаем микросхему с Arduino по рисунку ниже. В этом примере считываются нажатия с четырёх кнопок.
ПРИМЕР КОДА
int pinDataIC = 9; int pinClockIC = 10; int pinLanchIC = 1; int tempo = 60; byte button = 0; int show = 1; void setup() { //initialize the pin pinMode(pinDataIC, INPUT); pinMode(pinClockIC, OUTPUT); pinMode(pinLanchIC, OUTPUT); //iniciate serial comminication Serial.begin(9600); } void loop() { //some variables byte oldbutton; int pausenote; String notearray[] = {"Redonda", "Blanca", "Negra", "Corchea", "Tresillo", "Semicorchea", "Seisillo"}; int numarray[] = {0, 0, 0, 1, 2, 3, 5}; int index = 2; String note; int numero; int i = 0; //parallel load digitalWrite(pinLanchIC, HIGH); delayMicroseconds(20); //serial shift digitalWrite(pinLanchIC, LOW); //Read 74HC165 button = shiftIn(pinDataIC, pinClockIC, MSBFIRST); digitalWrite(pinLanchIC, HIGH); //Show the result Serial.println(button); if ((button - oldbutton) == 2) { tempo ++; show = 1; //beat = beat + 30; } else if ((oldbutton - button) == 4) { tempo --; show = 1; //beat = beat - 30; } else if ((oldbutton - button) == 8) { index ++; show = 1; } else if ((oldbutton - button) == 16) { index --; show = 1; } oldbutton = button; numero = numarray[index]; note = notearray[index]; if (show == 1) { Serial.print("TEMPO: "); Serial.print(tempo); Serial.print(" NOTE: "); Serial.println(note); show = 0; } delay (1000); }
КОМПЛЕКТ
- Сдвиговый регистр 74HC165 x1