PIC Mimarisi – Dijital Giriş/Çıkış ve Zamanlayıcı

Bu başlıkta 16F84A’nın çevre birimlerinden giriş ve çıkış portlarını ve zamanlayıcıyı inceleyeceğiz. Bazı giriş ve çıkış ayakları altenatif fonksiyonlara çoklayıcı ile bağlanmıştır. Yani bazı ayakları hem giriş ve çıkış olarak hem de başka özellikler için kullanabiliriz. Bu ayakların görevleri datasheetin başındaki tabloda ayrıntılı olarak yazmaktaydı. Alternatif fonksiyonlar kullanıldığında o ayak artık giriş ve çıkış ayağı olarak kullanılamaz.

PORT Birimi

PORTA ve PORTB olarak iki adet giriş ve çıkış portumuz bulunmaktadır. Bu portların ayarları TRISx yazmacından yapılır. PORTA için TRISA yazmacı ve PORTB için de TRISB yazmacını kullanırız. Bu yazmaçları özel fonksiyon yazmaçları tablosunda daha önceden görmüş olmalısınız. PORTA 5-bit genişliğinde çift yönlü giriş ve çıkış portudur. Bu portun giriş mi çıkış mı olduğunu TRISA yazmacına yazdığımız değerler ile belirleriz. TRISA yazmacında her ayağa karşılık gelen biri bir (1) yaptığımızda o ayak giriş olur. Eğer sıfır (0) yaparsak çıkış olarak ayarlanır. Reset durumunda bu ayakların hepsi giriş olarak önceden ayarlıdır. PORTA yazmacı hem dijital çıkışta hem de dijital girişte kullanılır. Eğer ayak giriş olarak tanımlandıysa PORTA yazmacındaki değeri okuyarak dijital giriş durumunu öğrenebiliriz. Eğer ayak çıkış olarak tanımlanırsa PORTA yazmacındaki bitlere veri yazarak dijital çıkış elde edebiliriz. RA4 ayağı Timer0 zamanlayıcı birimin girişi ile ortak kullanılmaktadır. O yüzden RA4/T0CKI olarak adlandırılmıştır. PORTA’nın blok diyagramı şu şekildedir.

Burada dikkatimizi çeken bir nokta ise datasheette örnek kodların verilmesidir. Örnek kodların olması programlamada bize yardımcı olacaktır.

Burada öncelikle STATUS yazmacındaki RP0 biti bir yapılmaktadır. Bunun banka seçme biti olduğunu biliyoruz. Böylelikle Bank 0 ve Bank 1 olmak üzere iki bölüme ayrılmış özel fonksiyon yazmaçları arasından istediğimiz bölümdeki yazmacı seçebiliriz. BCF yani bit clear (bit sıfırlama) komutu ile belli bir yazmaçtaki belli bir biti sıfırlıyoruz. BCF STATUS , RP0 komutu STATUS yazmacındaki RP0 bitini sıfır yap anlamına gelmektedir. Bundan sonra PORTA’nın bulunduğu bölüme erişim sağlayabiliriz. CLRF PORTA ile PORTA’nın tüm bitleri sıfır yapılmaktadır. CLRF “Sıfırla” anlamına gelen bir mikroişlemci komutudur.

Sonrasında tekrar banka seçim işlemi yapıldıktan sonra akümülatöre yani geçici veri yazmacına bir sabit değer eklenir. Bu da MOVLW 0x0F komutuyla yapılmaktadır. Bu komut işletildikten sonra W yazmacının değeri “00001111” olacaktır. MOVLW komutu W yazmacına veri yükleme komutudur. Sonraki satırda ise MOVWF TRISA komutunu görmekteyiz. MOVWF komutu W yazmacındaki veriyi belirlediğimiz yazmaca yüklemeye yarayan komuttur. W yazmacının burada aracı görevi üstlendiğini görmekteyiz. RISC mimarisinde doğrudan bellek erişimi olmadığı için bellek -> yazmaç -> bellek şeklinde bir sıra izlenir. Bunun hakkında ayrıntılı bilgiyi RISC ve CISC mimarisini anlattığımız makalede bulabilirsiniz. Bu kod parçacığında RA<3:0> bitlerinin giriş olarak tanımlandığını görmekteyiz.

PORTB portu da yukarıda bahsettiğimiz PORTA portu gibidir. Kısacası TRISA ve TRISB portlarının ayaklara karşılık gelen bitlerini bir yaptığımızda giriş, sıfır yaptığımızda çıkış olmaktadır. Çıkış yaptığımız ayakların değerini PORT yazmacına yazarak dijital çıkış alabiliriz. Eğer giriş yaptığımız ayakların durumunu okuyacaksak yine PORT yazmacından bunu okuruz. OPTION yazmacındaki RBPU biti ile de dahili pull-up dirençleri etkinleştirilir veya devre dışı bırakılır.

Zamanlayıcı Birimi

PIC 16F84A denetleyicisinde çok basit bir 8-bit zamanlayıcı bulunmaktadır. Bu zamanlayıcı sadece dışarıdan asenkron sinyal ile beslenebilme ve kesmeye götürme özelliğine sahiptir. Yani frekans okuyabilsek de zamanlayıcı üzerinden frekans veya PWM üretme imkanımız yoktur. Bu zamanlayıcının diğer özelliklerini OPTION yazmacını anlatırken anlatmıştık. Timer0 zamanlayıcısı sistem saatinden beslenirken zamanlayıcı, dışarıdan saat sinyali verilirse sayıcı olarak çalışır. Yani girişteki sinyalleri yükselen veya düşen kenarda saymaktadır. Zamanlayıcıya bağlı bir ön derecelendirici bulunur. Bu sinyali bölerek sayacın kaç sinyalde bir artacağını belirler. 1 ve 256 arasında sıralanan bu bölüm değerleri zamanlayıcıyı yavaşlatmak için kullanılır. Zamanlayıcının blok diyagramı aşağıdaki gibidir.

Zamanlayıcı hakkında anlatılacak çok fazla bir şey yoktur. Zamanlayıcılar hakkında daha ayrıntılı bilgi edinmek için AVR derslerimize bakabilirsiniz. Bir sonraki makalede mikrodenetleyicinin özel fonksiyonlarını ele alacağız.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.