Elektronik Devreler Projeler Elektronik ve biraz daha fazlası İletişim - Araçlar - Dikkat - Topluluk
Elektronik / Elektronik Kaynakları/

MikroC Dersleri 7

Sponsorlu Bağlantılar

Merhaba elektronik Severler…

Bir önceki dersimizde 2×16 LDC göstergeler kullanarak programcılığımızı biraz daha geliştirdik.

Dersimize başlamadan önce işimize yarayabilecek kısa ip uçları vereyim.

• Kaydedicileri kullanmak pıc portlarını kullanmaksızın port genişletmeye yarar

• Step motor kontrolü led animasyon kartları kayan yazılar grafik ekranlar gibi bir çok uygulamada kaydediciler kullanılmaktadır.

• Bu uygulamanın bir ileri aşaması kaydedici bilgilerini tarama yöntemi ile yineleyip göz yanılgısı sayesinde görüntü oluşturmadır.

Arkadaşlar bu dersimizdekaydedici entegrelerle tarama yöntemi Port genişletme ve bu kaydedicilerin kullanımı hakkında bilgiler vermeye çalışacağım.

Bildiğiniz üzere PIC portları hafızası yeterli olmasına karşın port sayıları yetersiz kalmaktadır. Bunlara örnek vermek gerekirse Kayan yazılar led grafik ekranlar kaydedicilerin kullanımına güzel örneklerdir. Bu örneklerde metrelerce uzunluğunda led matrisler üzerinde binlerce harf akıp gitmekte peki nasıl oluyor da PİC ile 3 4 pin kullanılarak bu yazılar oluşturuluyor.

Bu işlemi yapabilmek sadece kaydedicilerle mümkün olmaktadır. Bu tasarımları yapabilmek için ise Programcılığımızın haricinde elektronik devre tasarım bilgilerine ve dijital elektronik bilgilerine ihtiyaç duyulmaktadır.

Alışıla gelmiş bazı kaydediciler piyasada yaygındır. Bunlardan en yoğun tercih edilen 74hc595kaydedicisidir.Diğer bir kaçı ise 74hc154 -164 138dir. 74hc595in tercih edilmesinin sebebi ise uygun kullanıma sahip donanım özellikleridir. Bunlara değinecek olursak 3 pin ile kontrol edilebilir. PWM kontrolü mümkündür. Gösterge işlemi devam ederken gizliden yeni bilgiyi yükleyebiliriz.

20mhz sinyalleri işleyebilir. Bu da demek oluyor ki metrelerce uzunluğunda ekran , kayan yazı yada bina süslemesi yapmak mümkün oluyor.

74hc595 entegresi 5 volt ile çalışır reset, clk, latch output, enable, data, sinyal aktarım pinleri mevcuttur.

Bu kaydediciye bilgi yazmak için öncelikle MR(reset ucu vcc(+) 5v a bağlanmalıdır.
Şimdi şekildeki devreyi oluşturunuz ve basit bir şekilde bilgi yazma işlemini uygulayalım.
Şekildeki lojik 1 0 seviye anahtarını logicstate yazıp çağırabilirsiniz.

Gelelim 595 e bilgi yazmaya. 0B11001110 değerini 595 e yazalım.

Değerimiz 8 bitlik bir değerdir ve 595 portlarının tümünde görüntülenecektir. Öncelikle değerimizi MSB 7.bitten okumamız gerekir(0B1…)

7.bit 1 olduğundan şekildeki devrede öncelikle datapini 1 yapılır. Ve bir tane clockpalsi yollanır.(1 yapılıp tekrar sıfır yapılır.)sonra 6.bite geçilir.6.bit 1 olduğundan 1 clockpalsi daha yollanır 5.bit 0 dır data sıfır yapılır ve clockpalsi yollanır 0.bite kadar bu işlem tekrarlanır. Ve ardından 1 de bekletilen latch ucu 0 yapılıp tekrar 1 e çevrilir.

Peki bunu neden bu şekilde öğreniyoruz? Bu işlemi PIC e yaptırabilmek için öncelikle entegrenin donanım bilgilerini iyi anlamak gerekir. Bizim birkaç dakikada yaptığımız işlemi pıc birkaç mikro saniyede yapacaktır. Bu sebeple yazılım aşamasına geçmeden bu şekilde birkaç uygulama yapmanızı öneririm.

Bir adet 595 işimizi görmeyebilir belki yüzlerce bitlik veri görüntülememiz gerekebilir bu durumda 595ler peşi sıra bağlanabilir ve bilgi yazması değişmez. Her 595 8 bitlik eklenti olduğu için bilgileri 8er bitlik gruplar halinde göndermek daha uygundur.

Peşi sıra bağlantı için bir önceki 595 in 7’ Taşma biti(9.bacağı) sonra gelen 595in data pinine (14.bacak) bağlanır. Böylece istenilen uzunlukta port elde edilebilir.

microc-dersleri-kaydedici-entegreler-clk-data-latch

İkili bağlı 595 devresi aşağıdadır.

microc-dersleri-kaydedici-entegreler-clk-data-latch-595-devresi-ikili

Uygulamalara ait proteus isis dosyaları: mikroc-dersleri-7-dosyalar.ZIP

Devrenin çıkışlarına 7 seğmentdisplay bağlayıp çeşitli mantıkları öğrenebilirsiniz. Bir önceki dersimizde LCD ekran uygulamalarına devam edeceğimizi söylemiştim. Çeşitli uygulamaları ilerlememiz için programcılığımızı bir üst seviyeye taşımak gerekmektedir.

Bunun için LCD uygulamalarını İNTERRUPT (KESME) konusunu işledikten sonra örneklendireceğiz. İNTERRUPT konusunu gelecek dersimizde işlemeyi planlıyorum. Sonrasında bugün anlatmış olduğum kaydedicileri PIC ile kontrol konusunu ele alacağız.

Uğraşanlara kolay gelsin İyi çalışmalar.

http://www.facebook.com/#!/tarsus.led

Aytaç Dürgen

  • ozgun ekin dagarslan

    hocam sağ olun dersler çok güzel ama konuyla ilgili bir kaç kod örneği verebilirmisiniz ?

  • aytacdurgen

    Yazının içeriğinde de belirttiğim üzere bazı uygulamarı yazılım olarak kontrol edebilmek için Öncelikler Donanımının iyi kavranması ve biliniyor olması gerek. O sebeple bu dersimde 595 entegresinin donanımını anlatma gereği duydum.
    Donanım bilindikten sonra gerisi 5 10 tane koddan ibaret.
    gelecek dersimizde KESME yapılarını anlatıp kesmeyide kullanacağımız bu tür bir uygulamaya yer vereceğim.
    İlgilenen arkadaşlara kolaylıklar diliyorum.

  • ozgun ekin dagarslan

    tesekkur ederm

  • ozgun ekin dagarslan

    peki bu 595 de çalışabilecek bir kodlama mıdır hocam

    void main (){
    for (;;){
    portb.b3=0b100001 / /son bit 1 gerisi 0
    delay_ms(10000)
    portb.b3=0b111110 //hepsi 1son0
    }
    }

    not: düzensiz ise benim suçum değil telden giriyorm

  • ruzgar

    @ozgun ekin dagarslan arkadaşım yazmış olduğun kodun düşündüğün gibi işleyeceğini sanmyorum. Bunun yerine b3 biti için bir dizi hazırlayıp 1ms gibi kısa aralıklarda for döngüsünde kullanabilirsin. Daha önceki derslerde de gosterilmişti. Bu display uygulaması dizi ile yaptıgımız gibi. tabi farklı algoritmalar ile de yapılabilir. Benim kendimce isiste rastgele yazdıgım kodlarıda denersen c diline çabuk alışır çabuk kavrarsın hem göz aşinalığı da kazanmış olursun :)

  • aytaç dürgen

    @ozgun ekin dagarslan öncelikle birşeyler yapabilmek için denemeler yapıyoor olmanız çok güzel. ama bir iki yerde yanlışınız var. 1.si PORTB.B0 1 7 arası yazdığınızda bitsel kontrol yapmış olursunuz o yüzden portb.b3=0b100001 gibi bir yapıda kod kullanımınız yanlış.
    2.si PORTB 8bitlik bir port olduğu içiin =0b100001 gibi 6bitlik kullanımda yanlış olur.

    595 in kullanımını tekrar özettleyim 595 tri state(3konum) bir çıkıış yapısına sahiptir. logic 1 logic 0 ve pasif olmak üzere 3 konumu vardır 1 0 bitsel olurken pasif durumu 8bit içn aynı anda geçerlidir yani 1 bit logic 1 bir bit 0 2 bit pasif gibi bir durum olmaz pasif modunda 8bitde pasiftir.

    595 datasındaki bilgiyi clock palsleri ile bir sıra ya dizer ve kaç pals içersinde data değişimini latch (ram e yazdığı veriyi çıkışa itme) edilinceyekadar her clockda öteler.

    yani 10011011 verisini 595 yazmak için data hattı 1 yapılır clokc 1 0 1 0 şeklinde 2kez aktif yapılır(b0 b1 ram eyazıldı) sonra data 0a çekilir clk 1 0 yapılır data 1 yapılır 2 clk data 0 yapılır 2 clk daha data 1 ve 1clk toplam 8bit veri ram e yazıldı.
    en son latch 1 yapılır hemen 0a çekilir . latch 1 yapıldığı anda ramdeki 1byte veri çıkışlara itilir.

    ha eğer nasıl bir program direk içine yazılan veriyi otomatik olarak 595e yazar dersenir ou bende bilmiyorum nasıl bilmiyorsunda bu dersleri yazıyorsun demeyin haa… :D Yok yok tabiki biliyorum ve bir kod parçası yazıyorum hemen şimdi

    #define data PORTA.B1// 595 data bağlanacak
    #define sinyal PORTA.B0// 595 clk bağlanacak
    #define cikis PORTA.B2//595 latch e bağlanacak

    void spi (unsigned char veri)
    {
    unsigned int i;
    unsigned char temp;
    temp = veri;
    i=8;
    while (i>0)
    {
    if (temp.F7==0) data = 0;
    else data = 1;
    temp = temp<<1;
    sinyal = 1;
    Delay_us(2);
    sinyal = 0;
    i–;
    }
    }

    void goruntule()
    { cikis = 1;
    Delay_us(2);
    cikis = 0;}

    bu program fonksiyon olarak projenize eklenmeli main altında
    spi(gönderilecek veri 0xfa; 0b01101110; yada 255 gibi yada char tipinde bir değişken olmalı)
    yazılmalı
    char veri=124;
    spi(veri);
    gorüntule();

    bu şekilde spi içindeki veri 595 de sağa yaslı olarak yazılıp görüntülenecektir. Bu en temel mantıkla seri iletişim kod parçasıdır. Geriside uygulamanıza ve sizin programcılık deneyinize göre şekillenecektir.

    Kolay gelsin İyi çalışmalar.