PIC Programlayalım mı?
Pic'in içine dalmadan son bir kez dışarıdan bakmakta yarar var.
Bilmeniz gereken önemli özellikler bu yazıda! Merhaba 'Sanal uzayın bu köşesinde manevi olarak sizle tekrar
buluşmak mutluluk verici.
Geçen ay sevgili PIC'imizin mimarisine kuşbakışı bir göz atmıştık.
Aynı zamanda ta2cba'nın hangi eski yazılarını okuyarak bir
PIC programlayıcısı yapabileceğinize de değinmiştik.
Bu ay ve önümüzdeki ay PIC'in mimarisine daha derinlemesine
bakacağız. Geçen yazıda assembly öğrenmeye
başlayacağımızı söylemiştik. Ama sonradan farkettim ki PIC'in iç yapısı
hakkındaki bilgimizi olgunlaştırmadan assembly'e geçemeyeceğiz.
PIC'e Dıştan Son Bakış
PIC'imizi dış dünyaya bağlayan bacakların tanımlarını bir tablo haline
getirelim. Bu uygulamalarımızı geliştirirken bize yardımcı olacak önemli
tablolardan biri. Özellikle de bacaklara bağlı tampon (buffer)
çeşitlerine dikkat etmek gerekir.
Bacak Adı | Bacak# | G/Ç/Güç | Tampon Tipi | Açıklama |
OSC1/CLKIN | 16 | G | ST/CMOS(3) | Kristal titreştirici (oscillator) girişi / dış saat kaynağı girişi |
OSC2/CLKOUT | 15 | Ç | – | Kristal titreştirici çıkışı. RC bağlanması durumunda(4) bu bacak OSC1'e bağlanan kaynağın dörtte biri frekansında, yani komut işleme hızında, saat çıktısı üretir. |
MCLR' | 4 | G/Güç | ST | Sıfırlama girişi / Programlama voltaj girişi. Bu bacağa düşük mantık sevıyesi uygulandığında aygıtı 'reset'ler. |
RA0 RA1 RA2 RA3 RA4/T0CKI | 17 18 1 2 3 | G/Ç G/Ç G/Ç G/Ç G/Ç | TTL TTL TTL TTL ST | PORTA iki yönlü bir giriş çıkış bağlacıdır. Bu bacak TMR0 zamanlayıcı (timer) / |
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 | 6 7 8 9 10 11 12 13 | G/Ç G/Ç G/Ç G/Ç G/Ç G/Ç G/Ç G/Ç | TTL/ST(1) TTL TTL TTL TTL TTL TTL/ST(2) TTL/ST(2) | PORTB iki yönlü bir giriş çıkış bağlacıdır. Yazılım aracılığıyla bütün girişlerdeki 'weak pull-up'lar devreye sokulabilir. Bu bacak dış kesme girişi olarak Değişimle kesme yaratma özelliği Değişimle kesme yaratma özelliği Değişimle kesme yaratma özelliği Değişimle kesme yaratma özelliği |
VSS | 5 | Güç | – | Mantık ve G/Ç bacakları için toprak referansı girişi. |
VDD | 14 | Güç | – | Mantık ve G/Ç bacakları için pozitif voltaj kaynağı girişi. |
G=Giriş – = Kullanılmıyor
Ç=Çıkış TTL = TTL tipi giriş ST=Schmitt Trigger giriş
(1)Bu tampon dış kesme girişi olarak ayarlandığında Schmitt Trigger tipi çalışır.
(2)Bu tampon seri programlama modunda Schmitt Trigger tipi çalışır.
(3)Bu tampon RC titreştirici modunda Schmitt Trigger, diğer durumlarda CMOS tipi çalışır.
(4)RC modu ve saat üreteci olarak kullanılabilecek devreler için geçen sayıda söz ettiğimiz
veri kitapçığına başvurun.
Saat Kullanma Biçimi ve Komut Döngüsü
PIC, saat girişinden gelen her dört dalgada bir komut işler.
Buna bir komut çevrimi denir. Bu dört dalgayı Q1, Q2, Q3 ve Q4
olarak adlandıralım. Aslında bir komutun işlenmesi sekiz dalga,
yani iki komut çevrimi alır. Ama akıllı PIC'imiz bir komutu
çalıştırırken bir sonraki komutu da hafızadan komut yazmacına
getirdiğinden bize her dört dalgada bir komut işliyormuş
gibi gözükür. Aşağıdaki çizimde bunu görebilirsiniz.
Daha ayrıntılı görmek için mouse un sağ tuşundan "view image" i seçin.
İlk komut çevriminde işlenecek olan komut program hafızasından komut
yazmacına alınır. Bu komut çevriminin sonunda program sayacı bir
arttırılmıştır ve hafızadaki işlenecek bir sonraki komutu göstermektedır.
İkinci komut çevriminde ise bir öncceki komut çevriminde komut
yazmacına aktarılmış olan komut 'decode' edilir (Q1), işlenecek veri
hafızadan alınır (Q2), komut çalıştırılır (Q3) ve çıktı yerine yazılır (Q4).
Böylece komutun işlenmesi tamamlanmış
olur.
Geçen ayki yazıyı dikkatli okumuş olanlar hatırlayacaklardır:
Dallanmaya neden olan komutlar iki komut çevriminde işlenirler demiştik.
Şimdi bunun nedenini açıklayabiliriz. İlk komut çevriminde dallanma
komutumuz diğer komutlar gibi hafızadan alınacaktır. Bu arada bir onceki
komut da çalıstırılmaktadır. İkinci komut çevriminde dallanma komutu
işlenecek ve bir sonraki komut çevrimine geçilirken program saya
cı
dallanma komutundan hemen sonra gelen komutu değil başka bir
komutu gösterecektir. Ama PIC'imiz bu komutun nasıl bir sonuç yarattığını
ancak ikinci komut çevriminin sonunda anlayabildiğinden ve bütün ikinci
komut çevrimi boyunca da saf saf bir sonraki işlenacek komutun
dallanma komutumuzdan hemen sonraki adreste olan komut olduğunu
düşündüğünden dallanma komutunun ardındaki komutu alıp
komut yazmacına yazmıştır bile. İşlemlerin doğru sırada gitmesi
için yazmaçtaki bu değerin bir kenara atılması ve yeniden komut
yakalanması gerekmektedir. Böylece PIC'imiz bir komut
çevrimi kaybeder ve dallanma komutları ' eğer dallanma
gerçekleşirse- iki komut çevriminde çalışıyormuş gibi olur.
Daha ayrıntılı görmek için mouse un sağ tuşundan "view image" i seçin.
Gelecek aya tatilde olabilirim, yazım biraz gecikebilir ve yetişmeyebilir.
Hoşgörüyle karşılayacağınızı umuyorum.
Havanız dilediğiniz sıcaklıkta olsun '
(PIC kullanarak iklim kontrol sistemi yapabilen olursa bana da
haber versin ':)
Sevgiler '
' erekyus ' ta2og '