===== Эксперимент 18. Люксметр на сдвиговом регистре 74HC595 ===== В 12 эксперименте мы собирали устройство Люксметр. Это устройство также можно собрать используя [[theory:74HC595|сдвиговый регистр 74НС595.]]\\ Сразу возникает вопрос: "Зачем переделывать устройство, если оно и так работает?".\\ Все дело в том, что пока мы делаем простые проекты, нам вполне хватает количества цифровых вводов\выводов, но со временем может наступить ситуация когда пинов станет не хватать. Вот здесь и может пригодиться сдвиговый регистр 74НС595, поскольку используя всего три пина контроллера и одну микросхему можно получить 8 выходов. А подключая микросхемы одну за другой можно используя все те же 3 пина контроллера получать 16,24,32 и тд. цифровых выходов. ==== Схема эксперимента ==== {{ :products:ardu:exp18_sch.png?nolink&400 |}} //Рисунок 1. Электрическая принципиальная схема эксперимента// {{ :products:ardu:exp18.png?direct&600 |}} //Рисунок 2. Монтажная схема эксперимента// В соответствии с [[theory:74HC595|распиновкой]], подключаем выводы микросхемы в следующем порядке: * выводы 8 и 13 микросхемы на GND контроллера * выводы 10 и 16 микросхемы на 5v котроллера * выводы 11(SH_CP), 12(ST_CP) и 14(DS) микросхемы на цифровые входы\выходы контроллера (в нашем эксперементе это пины 6,5 и 4 соответственно) * выводы 15(Q0), 1(Q1), 2(Q2), 3(Q3), 4(Q4), 5(Q5), 6(Q6), 7(Q7) микросхемы подключаем к светодиодам ==== Программный код эксперимента ==== const int NbrLEDs = 8; int latchPin = 5; int clockPin = 6; int dataPin = 4; const int photocellPin = A0; int ledLevel = 0; byte states[8] = {B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111}; int sensorValue = 0; void updateShiftRegister(byte leds){ digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); } void setup() { pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(latchPin, OUTPUT); digitalWrite(latchPin, HIGH); } void loop() { sensorValue = analogRead(photocellPin); ledLevel = map(sensorValue, 0, 1023, 0, NbrLEDs); updateShiftRegister(states[ledLevel]); } В программе эксперимента используем массив с данными, для наглядности, в форме битовой маски. ==== Дополнительное задание ====