Это старая версия документа!


Эксперимент 18. Люксметр на сдвиговом регистре 74HC595

В 12 эксперименте мы собирали устройство Люксметр. Это устройство также можно собрать используя сдвиговый регистр 74НС595.
Сразу возникает вопрос: «Зачем переделывать устройство, если оно и так работает?».
Все дело в том, что пока мы делаем простые проекты, нам вполне хватает количества цифровых вводов\выводов, но со временем может наступить ситуация когда пинов станет не хватать. Вот здесь и может пригодиться сдвиговый регистр 74НС595, поскольку используя всего три пина контроллера и одну микросхему можно получить 8 выходов. А подключая микросхемы одну за другой можно используя все те же 3 пина контроллера получать 16,24,32 и тд. цифровых выходов.

Схема эксперимента

Рисунок 1. Электрическая принципиальная схема эксперимента

Рисунок 2. Монтажная схема эксперимента

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

Программный код эксперимента

Exp18
  1. const int NbrLEDs = 5;
  2. int latchPin = 5;
  3. int clockPin = 6;
  4. int dataPin = 4;
  5. const int photocellPin = A0;
  6. int ledLevel = 0;
  7. int states[8] = {128,192,224,240,248,252,254,255};
  8. int sensorValue = 0;
  9.  
  10. void updateShiftRegister(byte leds)
  11. {
  12. digitalWrite(latchPin, LOW);
  13. shiftOut(dataPin, clockPin, LSBFIRST, leds);
  14. digitalWrite(latchPin, HIGH);
  15. }
  16.  
  17. void setup() {
  18. pinMode(clockPin, OUTPUT);
  19. pinMode(dataPin, OUTPUT);
  20. pinMode(latchPin, OUTPUT);
  21. digitalWrite(latchPin, HIGH);
  22. }
  23.  
  24. void loop() {
  25. sensorValue = analogRead(photocellPin);
  26. ledLevel = map(sensorValue, 0, 1023, 0, NbrLEDs);
  27. updateShiftRegister(states[ledLevel]);
  28. }

Дополнительное задание

Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F