7 seg LED kijelző meghajtása 74HC595N shift regiszterrel

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.

Mennyire volt hasznos amit olvastál?

Kattints egy csillagra az értékeléshez!

Sajnálom, hogy amit olvastál nem volt hasznos számodra!

Szeretném ha elégedett lennél!

Írd le kérlek, hogy mi nem tetszett!?