Shift registri 74HC595



Download 288,95 Kb.
bet2/2
Sana03.06.2022
Hajmi288,95 Kb.
#633187
1   2
Bog'liq
Shift registri 74HC595

bitWrite().

int dataPin = 9; // к выводу 14 регистра


int clockPin = 11; // к выводу 11 регистра (SH_CP)
int latchPin = 12; // к выводу 12 регистра (ST_CP)

void setup() {


pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}

void loop() {


byte byteToSend = 0; //Создаем пустой байт B00000000
for (int bitPos = 0; bitPos < 8; bitPos++) { // В переменной хранится позиция изменяемого бита
byteToSend = 0; // Обнуляем байт при каждом проходе
bitWrite(byteToSend, bitPos, HIGH); // При bitPos=0 получим B00000001, при bitPos=1 - B00000010, при bitPos=2 - B00000100 и т.д.

digitalWrite(latchPin, LOW);


shiftOut(dataPin, clockPin, MSBFIRST, byteToSend); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
digitalWrite(latchPin, HIGH);
delay(50);
}
}

Nima bo'layotganini yaxshiroq tushunish uchun kod oddiyroq.

int dataPin = 9; // к выводу 14 регистра
int clockPin = 11; // к выводу 11 регистра (SH_CP)
int latchPin = 12; // к выводу 12 регистра (ST_CP)

byte leds = 0;


int currendLed = 0;

void setup() {


pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);

leds = 0;


}

void loop() {


leds = 0;

if (currendLed == 7) {
currendLed = 0;
}
else {
currendLed++;
}

bitSet(leds, currendLed);


digitalWrite(latchPin, LOW);


shiftOut(dataPin, clockPin, LSBFIRST, leds);
digitalWrite(latchPin, HIGH);

delay(250);


}

Setup() usulida biz oddiygina pin rejimlarini va LED o'zgaruvchisini ishga tushiramiz.

Loop() usulida biz har bir iteratsiya boshida led o'zgaruvchisidagi bitlarni tozalaymiz, shunda barcha bitlar 0 ga o'rnatiladi, chunki biz bir vaqtning o'zida faqat bitta LEDni yoqishni xohlaymiz. Shundan so'ng biz to'g'ri LEDni qayta yoqishimiz uchun joriyLed o'zgaruvchisini oshiramiz yoki qayta o'rnatamiz.

Ushbu ikkita operatsiyadan so'ng biz bitni almashtirishga o'tamiz. Biz bitlarni saqlaydigan baytni va currentLed o'zgaruvchisini o'tkazadigan bitSet () usulini chaqirishdan boshlaymiz.


Bu usul baytning alohida bitlarini ularning joylashuvini belgilash orqali o'rnatishga imkon beradi. Misol uchun, agar biz baytni 10010 ga qo'lda o'rnatmoqchi bo'lsak, biz quyidagi qo'ng'iroqlardan foydalanishimiz mumkin, chunki biz 1 ga o'rnatishimiz kerak bo'lgan bitlar o'ngdan ikkinchisi (biz 0 pozitsiyasidan boshlaganimizda 1 pozitsiyasi) va 4-pozitsiyada joylashgan o'ngdan beshinchi:
bitSet(leds, 1);
bitSet(leds, 4);

Shunday qilib, biz har safar currentLed o'zgaruvchisini oshirganimizda va uni bitSet() usuliga o'tkazganimizda, biz har safar oldingisining chap tomonidagi bitni 1 ga o'rnatamiz va shu tariqa siljish registriga oldingisining chap tomonidagi chiqishni faollashtirishini aytamiz. bitta.

Bit o'rnatilgandan so'ng, biz mandal piniga siljish registriga ma'lumot jo'natishimiz haqida ko'rsatma yozamiz. Buni bajarganimizdan so'ng, biz shiftOut() usulini chaqiramiz. Usul bitta qo'ng'iroqda bitlarni almashtirish imkonini beradi. Buni amalga oshirish uchun biz dastlabki ikkita parametr sifatida ma'lumotlar va vaqtni o'tkazamiz, so'ngra birinchi bit eng kam ahamiyatli bit bo'lishi kerakligini ko'rsatadigan LSBFIRST konstantasini o'tkazamiz, so'ngra biz haqiqatda kerakli bitlarni o'z ichiga olgan baytni aylantiramiz. smenali registrga o'tkazish.

Bitlarni almashtirishni tugatganimizdan so'ng, biz barcha ma'lumotlarni jo'natganimizni ko'rsatish uchun yana mandal piniga kiramiz (bu safar HIGH tugmasidan foydalanib). Yozish jarayoni tugagandan so'ng, tegishli LED indikatori yonadi va keyin hamma narsa takrorlanishidan oldin 250 millisekundga kechiktiriladi.

Shift registrlarini ketma-ket ulash
Ko'p sonli siljish registrlarini ketma-ket ulash uchun Q7 registridan foydalaniladi - ma'lumotlar kelishi bilan u orqali suriladi. 11 (SH_CP, soat) va 10 (ST_CP, "latch") chiqishlari parallel ravishda ulanadi va sinxron tarzda boshqariladi.

Codius veb-saytida o'qing

PWM
PWM-dan qanday foydalanish kerak, chunki biz ko'pincha LEDlarni registr yordamida boshqaramiz va registr chiqishi faqat 3 ta holatga ega bo'lishi mumkin - LOW mantiqiy nol, YUQORI mantiqiy birlik va yuqori empedans holati (pinning elektr pallasida jismoniy aloqasi yo'q). Va haqiqatan ham, PWM o'zgartirish registri qo'llab-quvvatlanmaydi, lekin bitta kichik hiyla bor - biz OE (Output Enable input) registrining chiqishidan foydalanishimiz mumkin - u yuqori holatdan nolga o'tish uchun javobgardir. Chiqish OE - barcha chiqishlar uchun mantiqiy nol deb atash mumkin. Shunday qilib, agar biz ushbu pinni Arduino-ning PWM chiqishiga ulasak, biz mantiqiy nolga o'tishimiz mumkin va shu bilan LEDlarda PWM ni simulyatsiya qilamiz.
Codius veb-saytida o'qing
int dataPin = 9; //Пин подключен к DS входу 74HC595
int latchPin = 10; //Пин подключен к ST_CP входу 74HC595
int clockPin = 11; //Пин подключен к SH_CP входу 74HC595
int pwmPin = 6; //Пин подключен к OE входу 74HC595 для управления ШИМ

void setup() {


//устанавливаем режим OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(pwmPin, OUTPUT);

digitalWrite(latchPin, LOW); // устанавливаем синхронизацию "защелки" на LOW


shiftOut(dataPin, clockPin, LSBFIRST, B11110001);
digitalWrite(latchPin, HIGH); //"защелкиваем" регистр, тем самым устанавливая значения на выходах
}

void loop() {


for (int i=0; i<256; i++) {
analogWrite(pwmPin,i); // Назначаем выходу ШИМ разные значения
delay(2); // Делаем паузу, чтобы не мигало слишком быстро
}
}

Ushbu yondashuvning nochorligi shundaki, bu holda bir smenali registrga ulangan barcha LEDlarning yorqinligi tartibga solinadi. Ammo bir xil siljish registriga ulangan LEDlarning turli yorqinligini ko'rsatishimiz kerak bo'lsa-chi. Bu erda siz yana hiyla-nayrangga o'tishingiz kerak bo'ladi - LEDlarning yorqinligi xaritasini yarating va har bir guruhni o'z yorqinligi bilan o'z navbatida yoqing, shunda doimiy porlash hissi paydo bo'ladi:


int dataPin = 9; //Пин подключен к DS входу 74HC595
int latchPin = 10; //Пин подключен к ST_CP входу 74HC595
int clockPin = 11; //Пин подключен к SH_CP входу 74HC595
int pwmPin = 6; //Пин подключен к OE входу 74HC595 для управления ШИМ
byte _map[2]= {
B01010101,
B10101010
};

void setup() {


//устанавливаем режим OUTPUT
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);

pinMode(pwmPin, OUTPUT);


digitalWrite(pwmPin, LOW);
}

void loop() {


for (int i=0; i<=255; i++) {
showLed(_map[0],i);
showLed(_map[1],255-i);
}
for (int i=255; i>=0; i--) {
showLed(_map[0],i);
showLed(_map[1],255-i);
}
}

void showLed(byte mapLed, int brightness) {


digitalWrite(pwmPin, LOW);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, mapLed); // Инвертируем сигнал при помощи MSBFIRST, грузим с первого бита
digitalWrite(latchPin, HIGH);
analogWrite(pwmPin, brightness);
delay(5);
}

Ammo, agar siz kechikishlar va ko'p sonli yorqinlik xaritalari bilan tajriba qilishni boshlasangiz, siz juda yoqimsiz miltillovchi effektga duch kelasiz - bu Arduino tilini o'rashning standart funktsiyalari, masalan, digitalWrite, digitalRead, analogWrite, analogRead va boshqalarning uzoq bajarilishi bilan bog'liq.



STP16C596 kabi boshqa registrlar qo'shimcha rezistorlarsiz bir vaqtning o'zida 16 tagacha LEDni boshqarishi mumkin.
Qo'shimcha materiallar
Biz 74HC595 smenali registr (rasmiy hujjatlar tarjimasi) yordamida natijalarni ko'paytiramiz.

74hc595 arduino: shift registri, foydalanish asoslaris
Download 288,95 Kb.

Do'stlaringiz bilan baham:
1   2




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish