Port Çoğaltma İşlemi

Mikrodenetleyicilerde Port Çoğaltma İşlemi

   Bundan önce anlattığımız Pic programlama derslerinde kullandığımız PIC16F877 mikrodenetleyicisinin çoğu uygulamalar için yeterli sayıda giriş/çıkış pini sahip olsa da farklı mikrodenetlyiciler için bu mümkün olmaya bilir. Bazı durumlarda tasarladığımız sistemlerde basit kontrol işlemi için ihtiyacımız olmayan çevresel birimlerimleri içresinde barındıran pahalı mikrodenetleyici yerine bu birimleri içermeyen mikrodenetleyiciler tercih etmek ekonomiktir. Bu bölümde kontrol işlemini normalden daha az pin sayısı ile gerçekleşmesine olanak sağlayan entegrelerden biri üzerinde durulmuştur. 

74164 Entegresi

     Piyasada çok ekonomik fiyata bulabileceğiniz bir kaymalı kaydedici(shift reister) entegresidir. Bu entegre 8 bitlik bilgi taşır. 8 bitlik bilgiyi seri girişten alıp paralel çıkış hattına gönderir. Aşağıdaki resmi incelediğimiz zaman 

  • 2 adet bir bitlik seri veri giriş ucuna
  • Saat (clock) palsi ucuna 
  • Temizleme (clear) ucuna 
  • 8 bitlik paralel veri çıkış ucuna 

sahiptir. Saat frekansı 36Mhz olmasına rağmen daha yüksek frekanslarda çalışan entegrelerde mevcuttur.

Çalışma Prensibi

     Aşağıda bulunan tabloda 74164 entegresinin fonksiyon tablosu verilmiştir. Tabloda “H,h” harfi lojik-1 (High) “L,l” harfi lojik-0 (Low) “X” harfi ise girişin lojik-1 veya lojik-0 olmasının fark etmeyeceği anlamına gelmektedir. Tabloda bulunanyukarı yönlü ok işareti ise lojik-0 dan lojik-1 geçişi ifade etmektedir. Çıkışlar kısmında bulunan “q0 to q6” veri çıkışlarıdır.

  • GND: Toprak
  • MR:Reset
  • CP: Saat Pasi
  • DSA,DSB: Seri data girişleri
  • Q0…Q7: Paralel data çıkışları
74164 Bacakları

     7414 devresinin çalışma prensibini anlamak için aşağıda verilen resim incelendiğinde entegrenin iç yapısı görüntülenmektedir. 74164 entegresi 8 adet flip-flop içerir.  Seri girişten uygulanan ilk bilgi saat sinyalinin düşük seviyeden yüksek seviyeye geçişinde ilk flip-flop çıkışında (Q0) görünür. Saat sinyalinin ikini palsinde bu sefer seri girişteki bilgi yine Q0 flip-flop’una kaydedilir ve Q0 çıkışında görülür. Bu işlemler şekilde devam eder. Böylece seri girişten gelen bilgi her saat sinyali ile bir bit sağa kayarak çıkışında ilk girilen biti ise Q7 kaydedicisinde görülür.

74164 Shift Register Lojik Yapıs

74164 Entegrelerinin Birbiri ile Bağlantısı

     Kayan yazı uygulamasında birden fazla 74164 entegresi birbirine ilk entegrenin Q7 çıkışı(13 nolu pin), diğer entegrenin seri girişine (1,2 nolu pinlere) bağlanır. Aşağıda bu bağlantı resmi verilmiştir bağlantılar bu şekilde devam eder.

74164'lerin Bağlanısı

Pic Programlamada 74164 Entegresi ile Port Çoğaltma Uygulaması

Normalde displayi mikrodenetleyiciye bağladığımız zaman 7 adet çıkışını işgal etmiş durumdaydık aşağıdaki uygulamada 2 adet mikrodenetleyici çıkışı ve 74164 entegre yardımı ile display sürme işlerinini 2 adet çıkış portu ile gerçekleştirilmiştir. Daha önce bu uygulamanın benzerini 7 adet mikrodenetleyici çıkışı kullanarak gerçekleştirmiştik. (buradan ulaşabilirsiniz.)

Uygulamanın kodlarının satır satır incelenmesi aşağıda verilmiştir. Anlamadığınız bir kodu aram bölümüne yazarak o kod ile igili açıklama yazısına ulaşa bilirsiniz. Karakter dizisinin nasıl oluştuğunu öğrenmek için yukarıdaki linke gidebilirsiniz.
(Uygulamanın proteus çizimi ve kodlarına buradan ulaşabilirsiniz.)

  1. #include <16F877.h>
  2.  
  3. #FUSES NOWDT //Watch Dog Timer Kullanma
  4. #FUSES XT //Kristal Osilatör ile CLKOUT
  5. #FUSES NOPUT //Power Up Timer Kullanma
  6. #FUSES NOPROTECT //Rom'a Yazılan Veriler Okunabilir
  7. #FUSES NOBROWNOUT //Brownout Reset Kullanma
  8. #FUSES NOLVP //Düşük Gerilimler ile Programlamayı Kapt
  9. #FUSES NOCPD //Data EEPROM Korumasız
  10. #FUSES NOWRT //Program Belleği Yazmaya Açık
  11. #FUSES NODEBUG //ICD için Hata Ayıklama Modu Kapalı
  12.  
  13. #use delay(clock=4000000)
  14.  
  15. #use fast_io(b)
  16.  
  17. #define data pin_b0 // data sabiti pin_b0'a eşitlendi
  18. #define clock pin_b1 //clock sabiti pin_b1'e eşitlendi
  19.  
  20. int i,j;
  21. /* Ortak katot display için rakamlar dizisi*/
  22. int dizi[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x6F};
  23.  
  24. void main()
  25. {
  26. setup_psp(PSP_DISABLED); //Paralel Slave Port devre dışı
  27. setup_adc_ports(NO_ANALOGS); //Analog sinyal yok
  28. setup_adc(ADC_OFF); //Analog Dijital Converter devre dışı
  29. setup_timer_1(T1_DISABLED); //Timer1 devre dışı
  30. setup_timer_2(T2_DISABLED,0,1); //Timer2 devre dışı
  31. setup_CCP1(CCP_OFF); //Capture Compare 1 devre dışı
  32. setup_CCP2(CCP_OFF); //Capture Compare 2 devre dışı
  33.  
  34. set_tris_b(0x00); // B portu tümü ile çıkış yapıldı
  35. output_b(0x00); // B portu çıkışı program başında sıfırlanıyor
  36.  
  37. while(1)
  38. {
  39. for(i=0;i<10;i++) // 10 elemanlı dizinin bütün elamanların gezecektir.
  40. {
  41. for(j=0;j<8;j++) // 0 dan 8. bitine kadar kontrol edilmektedir.
  42. {
  43. //bit_test(dizi[i],j) ile dizinin i. elemanın j. biti öğrenilmiştir.
  44. output_bit(data,bit_test(dizi[i],j));
  45. output_high(clock); // clock 1
  46. output_low(clock); // clock 0 yapılmış ve 1 pulse verilmiştir.
  47.  
  48. /* i=0 da j=0,1,2,3,4,5,6,7 ye sayarken data=pin b0'a bit_test(diz[i],j) komutu ile her pulse'de j dizinin her elamanının her bitini gezecek ve 8. turun her sonunda 74164'e dizinin içinde bir elemanını tamamlamış olacaktır i=10 olduğunda bütün elamanlar yazılmış olur*/
  49. }
  50. delay_ms(500);
  51. }
  52. }
  53. }

Kimler Neler Demiş?

  Abone ol  
Bildir