Tartalom:
- A shift regiszter működése, kivezetése funkciója, felhasználási példák
- két shiftregiszter sorba kötése, kimentek bővítése
- Példaprogram a használathoz (7 szegmenses LED kijelző meghajtása)
——————————————————————————————-
A 74HC595 egy 8 bites soros bemenetű és párhuzamos kimenetű IC. Soros adat párhuzamos adattá való átalakítására találták ki. A beírt 8 bitnyi adatot sorban kilépteti a kimenetére és a latch láb felfutó élére azok fizikailag meg is jelennek a kimeneten.
A chip műszaki adatai:
Kivezetések funkciója:
GND: földvezeték.
Q0..Q7: kimenetek. Ezekre közvetlenül ráköthető egy-egy LED egy soros áramkorlátozó ellenállással. Amennyiben a kijelző szegmensenként egy LED-et tartalmaz, kb. 220ohm. Amennyiben a kijelző szegmensben 2 LED került beépítésre, tapasztalatom szerint piros LED esetén egy 47ohm-os soros ellenállás megfelelő lehet. Ekkor az LED árama kb 15-20mA 5V tápfeszültség esetén.
DS: Adatbemenet. Amikor az SH_CT órajel bemeneten egy felfutó él jelenik meg (0-ról 1-re vált), a DS bemeneten abban a pillanatban található értéket beolvassa és tárolja az IC.
SH_CP: Órajel bemenet. Amikor az órajel bemeneten egy felfutó él jelenik meg (0-ról 1-re vált), akkor a DS bemeneten éppen meglévő értéket belépteti az IC a tárolójába. A beléptetett érték a Q0 kimeneten fog megjelenni amikor az ST_CP bemeneten felfutó él jelenik meg (LATCH bemenet). A következő órajel felfutó él egy újabb adatot olvas be a DS bemenetről. Az előzőleg beolvasott adat ilyenkor tovább lép a soron következő kimenetre (Q2). Az adatok beolvasása folyamatos, a nyolcadik órajelet követően az elsőként beolvasott adat megjelenik a Q7’ kimeneten, ami egy bővítő kimenet, és lehetővé teszi több IC sorba kötését.
ST_CP: Latch bemenet. Amikor ezen a bemeneten felfutó él jelenik meg (0-ról 1-re vált) az IC-be beléptetett adatok kiíródnak a Q0-Q7 kimenetekre. Az ST_CP bemenet tetszőleges időpillanatban visszaválthat 1-ről 0-ra (lefutó él), ezt az IC figyelmen kívül hagyja. A felfutó él tetszőleges pillanatban bekövetkezhet, tehát nem kell megvárni, hogy minden adatot beléptessünk az IC-be.
OE (negált): Output Enable (kimenet engedélyezés) bemenet. A negált (adatlapokban felülvonás jelzés) azt jelenti, hogy a bemenet alacsony szinten aktív, azaz engedélyezi a kimeneteken az adtok megjelenését. A kimenetek három állapotot vehetnek fel (tri-state kimenet), ami azt jelenti, hogy a szokásos HIGH és LOW kimeneti állapotok mellett van egy harmadik, amikor a kimenet, nem vezető állapotba kerül. Ez azt jelenti, hogy bármilyen LED-et is kötünk a kimenetre (0-ra világít vagy 1-re világít), a led ebben az állapotban biztosan nem fog világítani. Ezt a harmadik állapotot érhetjük el, ha erre a bemenetre LOW szintet kapcsolunk. Ez a bemenet remekül használható PWM fényerő szabályozásra, vagy a teljes kijelző kikapcsolására.
MR (negált): Master reset bemenet. A negált felirat (adatlapokban felülvonás jelölés) azt jelenti, hogy ez a bemenet 0 bemenő szintnél aktív. Ekkor az IC nem fogad adatot mindaddig, amíg a bemeneten 0 szint található. A 0 megszűnését követően minden kimenet tárolója 0 értékbe kerül, és ezt követően fogadja az órajelenként és adatokat.
Az alábbi ábrán végig követhető a bemenetek és kimenetek működése. Az ábrán látható példában csak az első órajel olvas be 1 értéket a DS bemeneten, és az ezt követő órajelek ezt léptetik végig a kimeneteken. Az ST_CP latch bemenet a példában minden léptetést követően kiírja a kimenetre a belső tárolók tartalmát. Lehetséges olyan felhasználás is, amikor beléptetjük mind a nyolc kimenet értékét, és csak ekkor írjuk a kimenetre a tárolókat. Ez utóbbi kifejezetten a 7 segmenses LED kijelzők meghajtásának esetén szükséges.
Az áramköri bekötés a következő (a kimeneteken ledek vannak a példa rajzon, ezek lehetnek a 7 segment kijelző ledjei):
Mindez Arduino bekötéssel:
Több IC sorba köthető. Ekkor a következő IC bemenetére a megelőző IC adat kimenetét kell kötni. Sok IC sorba kötése esetén a teljes bitsorozat egyben beléptethető, mintha egyetlen sokszor nyolcbites léptetőregiszter lenne az egész. A bekötés ekkor két IC-re így néz ki:
Egy IC használatának bemutatásához a következő program szolgál:
int latchPin = 5; int clkPin = 6; int dataPin = 4; byte LED = 0; void setup() { Serial.begin(9600); pinMode(latchPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(clkPin, OUTPUT); } void loop() { int i=0; LED = 0; shiftLED(); delay(500); for (i = 0; i < 8; i++) { bitSet(LED, i); Serial.println(LED); shiftLED(); delay(500); } } void shiftLED() { digitalWrite(latchPin, LOW); //Latc kimenet 0 (lefutó él), //nem történik semmi shiftOut(dataPin, clkPin, MSBFIRST, LED); //adatok beléptetése //(led vált.bitjei) digitalWrite(latchPin, HIGH); //Latc felfutó él, beléptetett //bitek kikerülnek kimenetre }
Amikor a programjaimban adatokat kellett kiírnom egy 7 segmenses kijelzőre, sokkal átláthatóbb volt számomra (főleg kezdetben), ha láttam, hogy mely biteknek kell világítaniuk. Ezért a shiftOut függvényben a “LED” változó helyett bináris alakban adtam meg az értékeket. pl.:
shiftOut(4, 3, MSBFIRST, B00111110);
Magyarázatra szorul még a harmadik paraméter, az “MSBFIRST” jelentése. Ide írhattunk volna LSBFIRST paramétert is. A kettő között az akülönbség, hogy milyen sorrendben léptesse a regiszter a negyedik paraméterben megadott bitsorozatot. Ha MSBFIRST-et írsz, akkor a 10000000 bitsorozat kezdő egyese a Q7 kimeneten fog landolni,míg ha LSBFIRST-et használsz, akkor ugyanez a bitsorozat egyese a Q0-ra érkezik.