Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
products:aruno:exp19 [2020/06/19 11:26] – создано alexnikproducts:aruno:exp19 [2020/06/26 13:19] (текущий) alexnik
Строка 1: Строка 1:
 ===== Эксперимент 19. Счетчик (Версия 4.0) ===== ===== Эксперимент 19. Счетчик (Версия 4.0) =====
  
-В 12 эксперименте мы собирали устройство Люксметр. Это устройство также можно собрать используя [[theory:74HC595|сдвиговый регистр 74НС595.]]\\ +Используя сдвиговый регистр 74НС595 усовершенствуем проект счетчика нажатий на кнопку.
-Сразу возникает вопрос: "Зачем переделывать устройство, если оно и так работает?".\\ +
-Все дело в том, что пока мы делаем простые проекты, нам вполне хватает количества цифровых вводов\выводов, но со временем может наступить ситуация когда пинов станет не хватать. Вот здесь и может пригодиться сдвиговый регистр 74НС595, поскольку используя всего три пина контроллера и одну микросхему можно получить 8 выходов. А подключая микросхемы одну за другой можно используя все те же 3 пина контроллера получать 16,24,32 и тд. цифровых выходов.+
  
 ==== Схема эксперимента ==== ==== Схема эксперимента ====
  
-{{ :products:ardu:exp18_sch.png?nolink&400 |}}+{{ :products:ardu:exp19_sch.png?nolink&400 |}}
 //Рисунок 1. Электрическая принципиальная схема эксперимента// //Рисунок 1. Электрическая принципиальная схема эксперимента//
  
-{{ :products:ardu:exp18.png?direct&600 |}}+{{ :products:ardu:exp19.png?direct&600 |}}
 //Рисунок 2. Монтажная схема эксперимента// //Рисунок 2. Монтажная схема эксперимента//
  
-В соответствии с [[theory:74HC595|распиновкой]], подключаем выводы микросхемы в следующем порядке: +Как и в предыдущем эксперименте контроллер передает последовательный сигнал на вывод DS микросхемыкоторый преобразуется в параллельный сигнал на выводах Q0...Q7. К этим выводам через токоограничительные резисторы подключаем LED - индикатор.
-  * выводы 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микросхемы подключаем к светодиодам +
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file cpp Exp18[enable_line_numbers="2", start_line_numbers_at="1"]> +<file cpp Exp19[enable_line_numbers="2", start_line_numbers_at="1"]> 
-const int NbrLEDs = 8; +const int latchPin = 5; 
-int latchPin = 5; +const int clockPin = 6; 
-int clockPin = 6; +const int dataPin = 4;  
-int dataPin = 4; +int keyPin 13
-const int photocellPin A0+int data[16] = {254176237249179219223240, 255, 243, 247, 159, 206, 189, 199}; 
-int ledLevel = 0; +void Displ(int num);
-byte states[8] = {B10000000,B11000000,B11100000,B11110000,B11111000,B11111100,B11111110,B11111111}; +
-int sensorValue = 0;+
  
- void updateShiftRegister(byte leds){ +void setup () { 
-   digitalWrite(latchPin, LOW); +  pinMode(latchPin,OUTPUT); 
-   shiftOut(dataPin, clockPin, LSBFIRST, leds); +  pinMode(clockPin,OUTPUT); 
-   digitalWrite(latchPinHIGH); +  pinMode(dataPin,OUTPUT); 
-}+  Displ(0); 
 + }
  
-void setup() { +int x = -1;   
-  pinMode(clockPin, OUTPUT); +int button_old = 1; 
-  pinMode(dataPin, OUTPUT); +void loop() { 
-  pinMode(latchPin, OUTPUT); +   if((digitalRead(keyPin== LOW)&&(button_old == 1)) { 
-  digitalWrite(latchPin, HIGH); +      x = x + 1
-}+    } 
 +   Displ(0); 
 +   Displ(x); 
 +   if (x > 15) {x = 0;} 
 +  
 +   button_old = digitalRead(keyPin); 
 +   delay(20); 
 + }
  
-void loop() { +void Displ(int num) { 
-   sensorValue = analogRead(photocellPin); +    digitalWrite(latchPin,LOW); 
-   ledLevel = map(sensorValue010230, NbrLEDs); +    shiftOut(dataPin,clockPin,LSBFIRST,data[num]); 
-   updateShiftRegister(states[ledLevel]); +    digitalWrite(latchPin,HIGH); 
-}+ }
 </file> </file>
  
-В программе эксперимента +В отличие от предыдущей версии "Счетчика" у нас изменилась схема подключения LED -индикатора к контроллеру, теперь для передачи сигналов достаточно только трех пинов, более того, используя соединение микросхем 74HC595 каскадомможно используя все те же три пина подключать дополнительные LED - индикаторы для создания более сложных и интересных проектов.\\ 
 +В программе мы обрабатываем нажатие кнопки и передаем в функцию ''Displ()'' номер закодированного символа в массиве ''data[]''. Для краткости записи кодировку символов записываем не в двоичной системе а в десятичной. 
  
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-Добавь к цифрам 0..9 еще буквы A, b, C d E F, чтобы секундомер переключал символы от 0 до F+Попробуйте добавить еще одну кнопку в проект.
 </WRAP> </WRAP>