Kirish
Ushbu o'quv qo'llanma siz 7 segmentli LED displeylar bilan biroz tanish ekanligingizni taxmin qiladi va 7
segmentli LED displeylar 101 -- Bitta ishni qanday qilish bo'yicha o'quv qo'llanmasiga asoslanadi. Ushbu
qo'llanmani bajarish uchun siz foydalanayotgan 7 segmentli LED displey uchun pinout kerak bo'ladi. Agar
sizda bu ma'lumot bo'lmasa, avvalgi qo'llanmani ko'ring.
Loyihangizga bir yoki bir nechta siljish registrlarini qo'shish 7 segmentli LED displeylarni boshqarish
uchun zarur bo'lgan Arduino-ga mos keladigan kiritish/chiqarish pinlari sonini tejaydi va bir nechta
raqamli displeylar uchun zarur bo'lgan quvvatni sezilarli darajada kamaytiradi.
Loyiha qurilishi
Quyidagi Frizing diagrammasida ko'rsatilganidek, bitta non taxtasini ikkinchisining ustiga qo'ying. Ba'zi
non taxtalarida ularni bir-biriga yopish uchun ishlatilishi mumkin bo'lgan mos keladigan uyalar va
yorliqlar mavjud, ammo bu muhim emas.
MAVZU: 7 SEGMENT USTIDA AMALLAR BAJARISH
REJA:
1- Arduino Uno yoki Nano taraqqiyot kengashi.
2- 74HC595 Shift registry haqida
3- Arduino bilan mos keladigan ishlab chiqish platasini 74HC595 ga ulashish tartibi.
Arduino Uno yoki Nano taraqqiyot kengashi
ATMega328 mikroprotsessoriga ega 5VDC Arduino Uno yoki Nano ushbu qo'llanmani ishlab chiqishda
foydalanilgan 74HC595 Shift Register va Toplite 5161BS 7 segmentli LED displeyni boshqarib, ushbu
loyihani xavfsiz quvvatlantirishi mumkin. Boshqa har qanday bitta raqamli 7 segmentli LED displey, agar
umumiy oqim 200 mA dan oshmasa, xavfsiz bo'lishi kerak. Loyihani qurish jarayonida ishlab chiqish
panelini o'chirilgan holda qoldiring.
Rivojlanish platasining 5V pinini yuqori non panelining yuqori quvvat relslariga ulang. Keyin o'sha quvvat
rayidan o'tish moslamasini pastki non panelining pastki quvvat rayiga ulang. Quvvat relslariga ulangan
simlar qizil rangda ko'rsatilgan. Endi zaminlarni ishlab chiqish taxtasidan yuqori non taxtasining yuqori va
pastki relslarigacha ulang. Tuproqli relslarga ulangan simlar qora rangda.
74HC595 Shift registri
74HC595 Shift Register integral mikrosxema (IC) komponenti boʻlib, bir uchida aniq tirqish yoki
chuqurchaga ega. 74HC595-ni cho'qqisini chap tomonga qo'ying, shunda ikkita qator pinlar o'rta
gorizontal bo'linishning qarama-qarshi tomonidagi non paneliga ulanadi. IC yuqoridagi Fritzing
diagrammasida ko'rsatilganidek, non paneliga ulanganda 74HC595 ustki qismidagi har qanday chop etish
tik holatda ko'rinishi kerak.
IC pinlari odatda soat miliga teskari yo'nalishda raqamlanadi, u 1-pindan boshlab, chapda yoki bir uchida
nuqta yoki tirqish ostida joylashgan. 74HC595 ushbu konventsiyaga amal qiladi. O'tish moslamalarini
(qizil rangda ko'rsatilgan) yuqori panelning yuqori quvvat rayidan 74HC595 ning 10 (MR) va 16 (Vcc)
pinlariga ulang. 16-pin Shift registrini 5VDC quvvat bilan ta'minlaydi va 10 (MR) YUQORI pinini 5V bilan
ushlab turish registrni tozalashni oldini oladi.
O'tish moslamalarini (qora rangda ko'rsatilgan) 8 (GND) va 13 (OE) pinlaridan yuqori panelning pastki va
yuqori tuproqli relslariga ulang. 8-pin 74HC595 tuproq pinidir va yerga ulash pin 13 orqali Shift
registridan chiqishni yoqish uchun LOW ushlab turiladi.
Biz Arduino-ga mos keluvchi Uno yoki Nano mikroprotsessorlarini ishlab chiqish platasida 4, 7 va 8-
pinlardan foydalanamiz, ammo agar xohlasangiz, boshqa mavjud I/U pinlaridan har qanday foydalanish
mumkin. Shift registrlari uchun 4, 7 va 8 pinlaridan foydalanishimning sababi shundaki, bu pinlar Raqamli
kiritish-chiqarishdan boshqa hech qanday xususiyatga ega emas, shuning uchun ularni tanlash orqali
men ko'p qirrali pinlarni uzilishlar, PWM yoki boshqa maqsadlar uchun zahiralashim mumkin. turli
seriyali va shinali aloqa protokollari.
Arduino bilan mos keladigan ishlab chiqish platasini 74HC595 ga quyidagicha ulang:
Arduino pin 4 dan 74HC595 pin 14 (DS) ko'k sim bilan ketma-ket ma'lumotlarni kiritish
Arduino pin 7 dan 74HC595 pin 12 (ST_CP) Yashil simli mandal pin
Arduino pin 8 dan 74HC595 pin 11 (SH_CP) sariq simli soat pin
7 segmentli LED displey (bitta raqamli)
Ushbu qo'llanmada ishlatiladigan maxsus displey umumiy anodli TopLite 5161BS. Ushbu qo'llanmani iloji
boricha umumiy qilish uchun men alohida segmentlar (A-G va Dp) bo'yicha Displey pinlariga murojaat
qilaman. Ba'zi displeylar 5161BS bilan bir xil tarzda mahkamlangan, ammo ko'plari bunday emas,
boshqalari Common Cathode xilma-xil bo'lishi mumkin. Displeyingizni 74HC595 siljish registriga ulashda
Fritzing loyihasi diagrammasiga amal qilmang. Agar siz qaysi displey pinlari qaysi segmentlarga o'tishini
bilmasangiz, endi mening oldingi qo'llanmani ko'rib chiqish uchun yaxshi vaqt bo'ladi.
Displey pinlarini yuqoridagi segment xaritasi bilan taqqoslaganingizdan so'ng, quyidagi ulanishlarni
amalga oshiring:
74HC595 pin 15 (Q0) 74HC595 pin 1 yonidagi foydalanilmagan panel ustuniga (to'q sariq sim)
Siz o'rnatgan o'tkazgich simidan 330 Ohm rezistor yordamida A segmentiga mos keladigan Displey piniga
ulang. 180 Ohm dan 1000 Ohm gacha bo'lgan har qanday qarshilik qiymati ishlashi kerak, chunki g'oya
oqimni cheklash orqali Displey segmentini himoya qilishdir.
330 Ohm rezistorlar va jumperlardan foydalanib, qolgan displey segmentlarini ulang:
74HC595 pin 1 (Q1) rezistorga, keyin B segmenti uchun displey piniga o'tish
74HC595 pin 2(Q2) rezistorga, keyin C segmenti uchun displey piniga o'tish
74HC595 pin 3(Q3) rezistorga, keyin D segmenti uchun displey piniga o'tish
74HC595 pin 4(Q4) rezistorga, keyin E segmenti uchun displey piniga o'tish
74HC595 pin 5(Q5) rezistorga, so'ngra F segmenti uchun displey piniga o'tish
74HC595 pin 6(Q6) rezistorga, keyin esa G segmenti uchun displey piniga o'tish
74HC595 pin 7(Q7) rezistorga, keyin Dp segmenti uchun Displey piniga o'tish
Ushbu loyihaning qurilish bosqichining so'nggi bosqichi displeydagi umumiy pinni non taxtasidagi quvvat
yoki tuproqli relsga ulashdir. Agar sizda umumiy anodli displey bo'lsa, elektr tarmog'iga qizil o'tish
moslamasidan foydalaning, aks holda umumiy katodli displeyni qora o'tish moslamasi yordamida erga
ulang. Ishingizni ikki marta tekshiring va ishlab chiqish panelini o'chirilgan holda qoldiring.
Arduino IDE eskizini dasturlash
Eskiz to'rtta asosiy bo'limga bo'lingan; Global deklaratsiyalar, o'rnatish va asosiy tsikl, undan keyin
foydalanuvchi tomonidan belgilangan ikkita funksiya.
Global deklaratsiyalar
Doimiy butun sonlarga dataPin, latchPin va clockPin tavsiflovchi teglar beriladi va mos ravishda 4, 7 va 8
qiymatlari beriladi. Agar siz loyihani ishlab chiqish taxtasida turli xil pin topshiriqlaridan foydalansangiz,
qiymatlarni mos ravishda o'zgartiring.
Umumiy yorliqli doimiy belgi (bitta belgi)ga umumiy anodli displeylar uchun "a" yoki umumiy katod
uchun "c" qiymati beriladi. Yozilganidek, Sketch umumiy anodli displeylar uchun sozlangan. Agar sizning
displeyingiz umumiy katod turiga tegishli bo'lsa, umumiy anod deklaratsiyasi qatoriga izoh bering yoki
o'chiring va umumiy katod qatorini izohlang. Ko'pgina hollarda, bu Sketch to'g'ri ishlashi uchun zarur
bo'lgan yagona o'zgarish bo'ladi.
Mantiqiy o'zgaruvchi, decPt, rost deb ishga tushiriladi. Bu o'zgaruvchi o'nlik nuqta segmenti (Dp)
yoqilishi kerakligini ko'rsatish uchun ishlatiladi.
Sozlash; o'rnatish
O'rnatish kodi bloki faqat OUTPUT uchun dataPin, latchPin va clockPin doimiy qiymatlari bilan bog'liq
bo'lgan ishlab chiqish loyihasi taxtasi pinlarini ishga tushiradi.
Loop
Loop kod bloki quvvat o'chirilgunga qadar yoki loyiha komponenti ishlamay qolguncha yoki uzilib
qolguncha cheksiz takrorlanadi.
Har safar Loop boshlanganda Global o'zgaruvchining qiymati, decPt, rost yoki noto'g'ri bo'ladi. Qiymat
qanday bo'lishidan qat'iy nazar, u "to'g'ri" dan "false" ga yoki aksincha o'zgartiriladi, shunda Displeyning
o'nlik nuqta segmenti faqat Loop orqali boshqa har bir o'tishda yonadi.
A for loop kod bloki keyin 16 marta ishlaydi va mahalliy tamsayı o'zgaruvchisi qiymatini 0 dan 15 gacha
oshiradi. i ning har bir qiymati Foydalanuvchi tomonidan belgilangan funktsiyaga o'tkaziladi,
myfnNumToBits mahalliy bayt qiymatini, bitlarni, anni qaytaradi. i o'zgaruvchisining O'n oltilik qiymatini
ko'rsatish uchun zarur bo'lgan barcha Displey segmentlarining sakkiz bitli tasviri.
Agar decPt rost bo'lsa, bitlar qiymati Bitwise OR operatoridan foydalangan holda Least Significant Bit
(LSB) ni 1 ga o'rnatish orqali o'zgartiriladi.
Foydalanuvchi tomonidan belgilangan funktsiya, myfnUpdateDisplay argument sifatida o'zgaruvchi, bit
bilan chaqiriladi. Displey myfnUpdateDisplay funksiyasi tomonidan yangilanganda, dastur i qiymatini
oshirishdan va i qiymati 15 dan katta bo'lguncha for tsiklini takrorlashdan oldin 1/2 soniya kutadi; keyin
butun Loop kod bloki qaytadan boshlanadi.
Foydalanuvchi tomonidan belgilangan funksiya
myfnUpdateDisplay bayt argumenti bilan Loop kod blokidagi for tsiklidan chaqiriladi. Baytdagi 8 bitning
har biri A dan Dp gacha bo'lgan Displey segmentlaridan birini ifodalaydi.
Umumiy katodli displeylar uchun, agar bit qiymati 1 bo'lsa, tegishli segment yonishi kerak, aks holda bit
0 bo'ladi va segment o'chiriladi. Bitlarni Common Anode displeylari uchun teskari aylantirish kerak,
shuning uchun agar Global o'zgaruvchi, umumiy "a" ga teng bo'lsa, BitWise XOR (^) operatori yordamida
1s ni 0 ga va 0 ni 1 ga o'zgartirsa, baytdagi barcha 8 bit qiymatlar aylantiriladi. B11111111 bitli niqob.
Bitlar 74HC595 registrlariga yuborilishidan oldin Arduino bilan mos keladigan ishlab chiqish platasi
latchPin LOW o'rnatiladi. Keyin bitlarni uzatish uchun shiftOut(dataPin, clockPin, LSBFIRST, bayt)
funksiyasi chaqiriladi. Nihoyat, latchPin YUQORI o'rnatiladi va Displey tegishli harf-raqamli belgini
ko'rsatishi kerak.
Keyin dastur boshqaruvi Loop kod blokidagi for sikliga qaytariladi.
myfnNumToBits
Ushbu foydalanuvchi tomonidan aniqlangan funktsiya 0 dan 15 gacha bo'lgan raqamlarni qabul qilib,
qidirish jadvali vazifasini bajaradi va bitlar ko'rsatiladigan o'n oltilik alfanumerik belgilar uchun xarita
bo'lgan baytni qaytaradi. Agar kutilmagan raqam olinsa, uchta vertikal chiziq ko'rsatiladi.
myfnNumToBits haqida batafsilroq tushuntirishni oldingi qo'llanmada topish mumkin, 7 segmentli LED
displeylar 101 -- Qanday qilib ishlash kerak.
Tutun sinovi
Arduino-ga mos keladigan ishlab chiqish platasini yoqishdan va ushbu qo'llanmaning Kod bo'limidan
eskizni yuklashdan oldin oxirgi marta loyiha simlarini tekshiring.
ARDUINOGA SHU DASTURNI O`RNATAMIZ
/* SevenSegmentLEDdisplay102a.ino
* 2017-02-20
* Mel Lester Jr.
* Simple example of using Shift Register with a
* Single Digit Seven Segment LED Display
*/
// Globals
const
int
dataPin
=
4
;
// blue wire to 74HC595 pin 14
const
int
latchPin
=
7
;
// green to 74HC595 pin 12
const
int
clockPin
=
8
;
// yellow to 74HC595 pin 11
/* uncomment one of the following lines that describes your display
* and comment out the line that does not describe your display */
const
char
common
=
'a'
;
// common anode
//const char common = 'c'; // common cathode
bool
decPt
=
true
;
// decimal point display flag
void
setup
() {
// initialize I/O pins
pinMode
(
dataPin
,
OUTPUT
);
pinMode
(
latchPin
,
OUTPUT
);
pinMode
(
clockPin
,
OUTPUT
);
}
void
loop
() {
decPt
=
!decPt
;
// display decimal point every other pass through
loop
// generate characters to display for hexidecimal numbers 0 to F
for
(
int
i
=
0
;
i
<=
15
;
i++
) {
byte
bits
=
myfnNumToBits
(
i
) ;
if
(
decPt
) {
bits
=
bits
|
B00000001
;
// add decimal point if needed
}
myfnUpdateDisplay
(
bits
);
// display alphanumeric digit
delay
(
500
);
// pause for 1/2 second
}
}
void
myfnUpdateDisplay
(
byte
eightBits
) {
if
(
common
==
'a'
) {
// using a common anonde
display?
eightBits
=
eightBits
^
B11111111
;
// then flip all bits using XOR
}
digitalWrite
(
latchPin
,
LOW
);
// prepare shift register for data
shiftOut
(
dataPin
,
clockPin
,
LSBFIRST
,
eightBits
);
// send data
digitalWrite
(
latchPin
,
HIGH
);
// update display
}
byte
myfnNumToBits
(
int
someNumber
) {
switch
(
someNumber
) {
case
0:
return
B11111100
;
break
;
case
1:
return
B01100000
;
break
;
case
2:
return
B11011010
;
break
;
case
3:
return
B11110010
;
break
;
case
4:
return
B01100110
;
break
;
case
5:
return
B10110110
;
break
;
case
6:
return
B10111110
;
break
;
case
7:
return
B11100000
;
break
;
case
8:
return
B11111110
;
break
;
case
9:
return
B11110110
;
break
;
case
10:
return
B11101110
;
// Hexidecimal A
break
;
case
11:
return
B00111110
;
// Hexidecimal B
break
;
case
12:
return
B10011100
;
// Hexidecimal C or use for Centigrade
break
;
case
13:
return
B01111010
;
// Hexidecimal D
break
;
case
14:
return
B10011110
;
// Hexidecimal E
break
;
case
15:
return
B10001110
;
// Hexidecimal F or use for Fahrenheit
break
;
default
:
return
B10010010
;
// Error condition, displays three vertical
bars
break
;
}
}
SHU BUYRUQLARNI AMALDA SINAB KURAMAN?
|