Teknomerkez
TR EN ES
Konular

P18F2550 ile 4X7-Parçalı LED Göstergeyi PIC Assembly İle Sürme (MULTIPLEXING)

Yazar: İsmail Sahillioğlu
Tarih: 20.02.2017
Türkçe

Ön Açıklama: Üye olduğum forumları gezdiğimde Assembly ile PIC programlama konusunda özellikle PIC18XXXX serisi ile ilgili yeteri kadar Türkçe kaynak bulamadım. Bu yüzden ben de yeterli İngilizcem olduğu için İngilizce kaynaklara yöneldim. Şu an hala Assembly programlamada ilerliyorum. Bunu yaparken de Türkçe kaynak sıkıntısından dolayı deneyimlerimi yardımcı kaynak olması adına, özellikle PIC18 serisini Assembly ile programlamayı öğrenmek isteyenler için paylaşmak istiyorum. Çünkü bilenler bilir PIC18 serisinde veri belleği bloklarının yönetimi yazılımsal ve donanımsal olarak klasik PIC16 serisinin bellek yapısından biraz farklıdır. PIC16 serisinde Assembly ile programlamayı bilenler, PIC18 serisinde Assembly ile programlama yaparken özellikle BANK blokları ve yazılımda nasıl yönetilmesi gerektiği konusunda afallayacaklardır. Ancak düşünülenin aksine PIC18 serisinde bank yönetimine gerek yoktur, eğer RAM de çok büyük miktarlarda veri saklanması gerekmiyorsa BANK sistemini kullanmaya hiç gerek yoktur. Örnek programlarda bu ve buna benzer mimari ve yazılımsal farklılıklar ve ne yapılması gerektiği hakkında anlaşılır Türkçe içerikli açıklamalar olacaktır.

A. Donanım:

  • 8-Bitlik B portunun tamamı 4 x 7-Parçalı göstergenin veri sürme işlevini geçekler(yerine getirir).

  • 4-Bitlik A portunun <3:0> bacakları her bir hanenin akımını batırmak (sink) için kullanılan harici batırma (sink) transistörlerini ya da mosfetlerini sürme işlevini gerçekler(yerine getirir). Bunun için diğer bir seçenek de açık-kollektörlü batırma(sink) akım sürücüsü ULN2003 16 bacaklı DIP paket entegresini kullanmaktır. ULN2003'ün dizi transistörlerinden her biri en fazla 500mA'e kadar yükleri sürebilir ve Beyz uçları doğrudan PORTA bacaklarından sürülebilir.

B. Yazılım:

  • Göstergeyi sürme işlemi (multiplexing); her bir hane göstergesini her 20mS'de 5mS boyunca çalıştırarak gerçeklenmiştir. Bu 50hz'lik bir güncelleme oranı verir ki, kararlı bir gösterge olarak insan gözü için oldukça kabul edilebilir bir orandır.

  • 5mS süre tabanı, 4,096MHz'lik osilatör saatini bölerek üretilmektedir. Timer0 8 bitlik sayıcı/zamanlayıcı olarak düzenlenmiştir.

  • Dahili önölçekçi(prescaler) bir 32'ye (1/32) bölücü olarak düzenlenmiş ve Timer0'a atanmıştır.

  • TMR0L; 96 desimal değeriyle önyüklenmiştir. TMR0L 96'dan itibaren saymaya başlayıp 256'ya dek artacak, ardından, (256-96)x(32x4/4096000) = 5mS'lik bir süreden sonra 0' a yuvarlanacaktır. TMR0L 0'a her yuvarlandığında, T0IF (Tİmer0 kesme bayrağı) biti donanım tarafından kurulur, GIE (Global Interrupt Enable/Küresel Kesme Etkinleştirme) biti ve T0IE kesme bitleri etkinleştirildiğinden, bir kesme üretilir.

  • Yazılım 1-saniye oranında artan bir sürevci(zamanlayıcı) gerçekler.

  • Her saniyede gereken hanenin 4nibble (4x4-bitlik veri birimi yada 2 byte); HANE12 ve HANE34 dosyalarında BCD(Binary Coded Decimal/İkilik Kodlanmış Onluk) biçiminde artırılır ve saklanır. Programda; HANE34 dosyası En Yüksek Değerli haneleri, HANE12 dosyası da En Düşük Değerli haneleri saklar.

  • 4-bitlik BCD değer; hangi göstergenin çalıştığına bağlı olarak ya HANE34 ya da HANE12 dosyalarından alınır ve 7-parçalı göstergeyi sürecek karşılık gelen kodlara çevrilir.

  • Timer0 kesmesi 5 milisaniyelik kararlı bir oranda üretilir ve 1us'lik bir komut süresi verilir.

  • Bütün gösterge güncelleme programı; kesme içinde başka bir kesme şansının olmamasıyla birlikte Kesme Servis Rutininin içine oturtulabilir.


EKLER:

  1. 4x7SegSurucuMPLAB.zip
  2. 4x7SegSurucuProteus.zip

NOT: Yararlandığım kaynakçada bu program PIC16C71 denetleyicisine göre yazılmıştır. Program benim tarafımdan PIC18F2550 denetleyicisinin donanım ve yazılım düzenine göre yeniden yazılmış ve hemen hemen her komut ve işlemin Türkçe açıklaması ilgili bölgede yapılmıştır ve olabildiğince Türkçeleştirilmiştir. Derleyicilerin karakter kodlama ve tanıma farklarından dolayı açıklamalarda İngilizce olan karakterlerin dışına çıkılmamıştır. Umarım kaynak arayan herkes için yararlı olur.

Kaynak (İngilizce): AN557 Four Channel Digital Voltmeter with Display and Keyboard


Yorumlarınız

Hiç yorum yapılmamış.

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>