Sonuçlar 1 to 1 of 1

Konu: Arduino ile 74HC595 Kullanımı-Shift Register Mantığı

  1. #1

    Default Arduino ile 74HC595 Kullanımı-Shift Register Mantığı

    Arduino Uno Kartı tek başına bazı işlerin yapılmasında yardımcı elemanlara ihtiyaç duymaktadır.
    Örneğin 7 adet hatta noktayı da sayarsak 8 adet mini LED in bir araya gelmesi ile oluşan 7 segment display elemanları.
    Aşağıda iç yapısını gösteren şemayı, parça ledlerin isimlerini görebilirsiniz. dp noktayı temsil etmektedir.



    Bu elemanlardan bir tanesini kullanabilmek için Arduino' nun en az 7 bacağının işgal edilmesi gerekiyor.
    Bundan dolayı fazladan bir tane daha 7 Parçalı Gösterge eklemek için, örneğin 0-99 sayıcı yapmak için bir adet daha Arduino Uno kullanmak gibi pek de mantıklı olmayan bir sorun ortaya çıkmaktadır.

    Bu sorunu halletmek için Shift Register (Kaydırmalı Kayıt) mantığı ile tek bir çıkıştan sıralı olarak verileri göndermemizi sağlayacak 74HC595 tümdevresini (entegre) kullanabiliriz. Aşağıda 74HC595' in bacak yapısı görülmektedir.





    Kaydırmalı kayıt yapılmasını sağlayan 74HC595 entegresi, peş peşe eklenmiş flip flop olarak isimlendirilen hafıza birimlerinden oluşmaktadır. Kaydırmalı Kaydediciler (Shift Register), türlerine göre ikiye ayrılmaktadır. Bir seri çıkışı paralel hatlara dönüştürebildiği gibi (serial-in, parallel-out, SIPO), paralel çıkışı seri tek bir hatta da (parallel-in, serial-out, PISO) dönüştürebilmektedir. 74HC595 entegresi, 8 bit bir entegredir. Entegrenin 3 adet bacağı Arduino Uno ya bağlanacaktır.
    Bunlar:
    Seri data girişi (DS, pin 14),
    latch (ST_CP, pin 12),
    clock pini (SH_CP, pin 11).

    Veri girişi yapılacaksa latch pini lojik 0 (0V) seviyesine çekilir, veri girişi yapılır (lojik 1 veya 0) ve saat darbesi (clock pulse) clock pinine uygulanır. Bu şekilde 8 adet 1 veya 0 dan oluşan 8 bitlik veri, DATA bacağından girilmiş olur. Çıkıştan ise aynı anda farklı bacaklardan her bir bit ayrı ayrı alınabilecektir. Bu şekilde Arduino Uno' nun sadece 3 bacağını işgal ederek bir 7 Segment Display' in sürülmesi gerçekleştirilmiş olur.

    Bu işi her bir ver için tek tek kodlamak yerine Arduino programında tanımlanmış olan shiftOut fonksiyonunu kullanımına bakmamız gerekir.

    Örnek Uygulama: Multi Function Shield örnekleri forumumuzda yer almaktadır. Aşağıdaki uygulamada Multi Function Shield' da pot değeri okunarak, 4 adet 7 segmentli display e aktarılmaktadır.


    Kod:
    #define LATCH_DIO 4 //veri girişini aktifleştirme bacağı 4 olarak ayarlandı.
    #define CLK_DIO 7 //Saat darbeleri 7 nolu bacaktan gönderilecek.
    #define DATA_DIO 8 //Veriler ise 8 nolu bacaktan gönderilecek.
    
    #define Pot1 A0 //
    
    
    
    const byte SEGMENT_MAP[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90}; //Segmentlere rakamları yazacak değerler.
    
    
    const byte SEGMENT_SELECT[] = {0xF1,0xF2,0xF4,0xF8}; // 7 parçalı göstergeleri aktif veya pasif etmek için kullanılacak veri dizisi.
    
    void setup ()
    {
    Serial.begin(9600); //Seri haberleşme başlatıldı.
    
    
    pinMode(LATCH_DIO,OUTPUT); //veri gönderecek bacaklar çıkış olarak ayarlandı.
    pinMode(CLK_DIO,OUTPUT);
    pinMode(DATA_DIO,OUTPUT);
    }
    
    
    
    void loop()
    {
    int PotValue = analogRead(Pot1);
    Serial.print("Potentiometer: ");
    Serial.println(PotValue);
    /* Segmentleri güncel değerle doldur. */
    Yaz(0 , PotValue / 1000);
    Yaz(1 , (PotValue / 100) % 10);
    Yaz(2 , (PotValue / 10) % 10);
    Yaz(3 , PotValue % 10);
    }
    
    /* Rakamların 4 adet 7li göstergeye aktarılması */
    void Yaz(byte Segment, byte Value)
    {
    digitalWrite(LATCH_DIO,LOW);
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_MAP[Value]); //burada shiftOut fonksiyonu kullanılmıştır. MSBFirst: Most Significant Bit Öncelikle gönderilecektir.
    shiftOut(DATA_DIO, CLK_DIO, MSBFIRST, SEGMENT_SELECT[Segment] );
    digitalWrite(LATCH_DIO,HIGH);
    }




    Last edited by Elektronik; 14-12-17 at 21:33.

Tags for this Thread

Bookmarks

Gönderme izinleri

  • Yeni Konu açamazsınız
  • Konulara cevap yazamazsınız.
  • Eklenti gönderemezsiniz.
  • Mesajlarınızı düzenleme izniniz yok.
  •