PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI Bazı pinler çevre birimleri ile çoklanmıştır. Peki bu ne demek? Mesela C portundaki RC6 ve RC7 pinleri seri iletişim için kullanılır. Eğer seri iletişimi kullanırsanız artık bu pinleri genel amaçlı giriş çıkış pini olarak kullanamazsınız. Bunun tersi de geçerlidir. Şimdi şekilde görüldüğü gibi A,B,C,D ve E olmak üzere 5 portu olan pic16f877a nın portlarını tek tek inceleyelim PORTA PortA 6 bit genişliğindedir ve hem giriş hem de çıkış olarak ayarlanabilir. Giriş veya çıkış olarak ayarlamayı TRISA registerından ayarlarız. Karşılık geldiği bite 0 yazılmış ise çıkış, 1 girilmiş ise giriş olarak ayarlanır. Örnekler üzerinden inceleyelim TRISA=0b111110; Yukarıdaki gibi bir kod yazdığımızı varsayalım. 0b ifadesi kendisinden sonra girilecek sayının binary yani sadece 0 ve 1 lerden oluşacağını söyler. PortA 6 bit genişliğinde demiştik. Yani 6 adet pini var ve ben bu 6 pinin giriş mi yoksa çıkış mı olacağını programa bildirmek istiyorum. 1
0b ifadesinden sonra 5 adet 1, 1 adet 0 yazılmış. En sağdaki bit 0.bittir ve sola doğru 1. bit 2.bit şeklinde devam eder. Sonuç olarak yazdığımız kodda Port Anın 0. biti çıkış olarak diğer pinler ise giriş olarak ayarlandı. Bu kodu farklı şekillerde de yazabiliriz. TRISA=0xFE; buradaki 0x ifadesi kendinden sonra gelecek sayının hex tabanda yani 16 lık sayı sisteminde yazılacağını söylemektedir. FE ifadesi ise yukarıdaki binary tabandaki sayının hex tabanına çevrilmiş halidir. Aslında xc8 dilinde bu ayarı yapmanın daha kolay ve kullanışlı bir yöntemi var. Örneğin sadece PortA nın 0. pini ile ilgileniyorsunuz. O halde TRISAbits.TRISA0=0; şeklinde bir kod yazarak sadece ilgili pini giriş veya çıkış olarak ayarlayabilirsiniz. İfade biraz uzun görünse de xc8 size bu konuda yardımcı oluyor. TRISAbits ifadesinden sonra. koyduğunuzda size şekildeki gibi yardımcı bir kutucuk çıkarıyor ve istediğiniz biti seçebiliyorsunuz Aslında bu özellik tüm registerlarda mevcuttur. Çıkış olarak ayarladığımız pinlere bilgi yazarken ve giriş olarak ayarladığımız pinlerden bilgi okurken PORT ifadesi kullanılır. Örneğin az önce çıkış olarak ayarladığımız A0 pinine 1 değerini girelim. Bunun için yine az önce kullandığımız metodu kullanalım PORTAbits.RA0=1; Bu koddan sonra RA0 pininde 5V bulunacaktır. Bir de giriş olarak ayarladığımız bir pinin okunmasına bakalım. static bit x=0; TRISAbits.TRISA0=1; // A0 biti giriş x=portabits.ra0; okuyacağımız datanın büyüklüğüne uygun bir data tipi tanımlamamız gerekmektedir. Yukarıdaki kodda sadece 1 bit büyüklüğünde data okuyacağımız için 1 bit büyüklüğünde olan 2
bit data tipi tanımlanmıştır. Daha büyük bir data tipi de tanımlayabilirdik ancak program hafızasından tasarruf etmek her zaman daha iyidir. Burada kural en azından eşit büyüklükte olmasıdır. Aşağıdaki tabloda data tiplerinin büyüklüğü verilmiştir. Ancak bit data tipinin kullanımında biraz cins bir durum vardır. eğer bit data tipini main fonksiyonun içinde tanımlamak isterseniz static bit olarak tanımlamanız gerekmektedir. Eğer global olarak tanımlarsanız yalnız bit yazmanız yeterli olacaktır. A Portunun kendine has özelliklerine gelelim RA4 pini Timer0 modülü için ayrılmıştır. ( timer konusunda anlatılacaktır ) RA4 pini open drain output özelliğine sahiptir. Peki nedir bu? Pinin çıkış bacağı, P-Mos ile N-Mos mosfetleri arasında bulunmaktadır. Eğer çıkışı open-drain ayarlarsanız, pin bacağı GND'ye bağlanır. VDD ile arasında sonsuz empedans oluşur. Bu durumda pini high olarak çıkış vermek için dışarıdan pull-up dirençleri eklemeniz gerekmektedir. Peki bu özellik bizim ne işimize yarayacak? Bu özellikle, çıkışa bağlanacak olan devre elemanının daha fazla akım çekmesi sağlanabilmektedir. Röle gibi akım gerektiren devre elemanlarını sürmek için kullanılır. Akım mikroişlemciden değil, pull-up direnci üzerinden çekilir. İyi güzel de pull-up nedir? Pull up yukarı çekmek demektir. Burada yukarı dediğimiz +V dir. Yani mikrodenetleyiciyi beslediğiniz gerilim seviyesidir. Bir girişe pull-up direnç bağla dediklerinde, girişten +V hattına bir direnç bağlayacaksın demektir. 4K7, 10K gibi bir direnç kullanılır genellikle. Şimdi amaca göre RA4 pini nasıl bağlanır ona bakalım. 3
RA4 pini hariç tüm PORTA pinlerinin analog giriş özelliği vardır. Pic Power-on Reset durumunda yani ilk açılışta bu pinler analog olarak ayarlıdır. Eğer analog bir işlem yapmayacak isek bu pinler ( analog konusunda da anlatılacağı gibi) ADCON0=0x00; ADCON1=0x07; kodları ile digital olarak ayarlanır. 4
Analog pinlerden okuma yapabilmek için bu pinler TRISA registerından mutlaka giriş olarak ayarlanmalıdır. PORTA da ayrıca comparator modülü vardır. ( ilk aşamada pek kullanmadığımız bir modül olduğundan kursta süre yeterse en son anlatılacaktır) PORTB PortB 8 bit genişliğinde ve hem giriş hem de çıkış olarak ayarlanabilir. PortB de giriş çıkış ayarı benzer şekilde TRISB register ı ile yapılır. Yine aynı şekilde okuma ve yazma işlemi de PORTB register ı ile yapılır. PortB nin kendine has özelliklerine bir göz atalım RB3,RB6 ve RB7 pinleri düşük güç programlama için kullanılabilir. PortB nin her pininde pull-up bağlantısı bulunmaktadır. Örneğin bir butondan veri almak istediğinizde pull-up veya pull-down bağlantısı kurmanız gerekmektedir. Bu tarz durumlarda PortB nin kendi içinde pull-up bağlantısı bulunmaktadır. Yazılım ile bu özelliği aktif etmeniz yeterli olacaktır. ( buton uygulamasında ayrıntıya girilecek) PortB nin son 4 pininde ( RB4,RB5,RB6,RB7) değişim kesmesi vardır (kesmeler konusunda işlenecek) RB0 pin girişinde external interrupt özelliği bulunmaktadır ( kesmeler konusunda anlatılacaktır) PORTC PortC 8 bit genişliğinde ve hem giriş hem de çıkış olarak ayarlanabilir. PortC de giriş çıkış ayarı benzer şekilde TRISC register ı ile yapılır. Yine aynı şekilde okuma ve yazma işlemi de PORTC register ı ile yapılır. PortB nin kendine has özelliklerine bir göz atalım. RC0 ve RC1 pini timer1 modülü için ayrılmıştır RC1 ve RC2 pinlerinde capture/compare/pwm modülü bulunmaktadır ( PWM konusunda değinilecektir RC3, RC4, RC5 pinleri I2C ve SPI modüllerinde kullanılır RC6 ve RC7 USART haberleşme modülünde kullanılır ( seri haberleşme konusunda anlatılacaktır) PORTD PortD 8 bit genişliğinde ve hem giriş hem de çıkış olarak ayarlanabilir. PortD de giriş çıkış ayarı benzer şekilde TRISD register ı ile yapılır. Yine aynı şekilde okuma ve yazma işlemi de PORTD register ı ile yapılır. PortD nin kendine has özelliklerine bir göz atalım. Bu port komple 8 bit genişliğinde olan Parallel Slave Port işlemi için kullanılabilir. Bu modu aktifleştirmek için TRISE register ının 4.biti olan PSPMODE biti aktif edilmelidir. 5
PORTE PortE 3 bit genişliğinde ve hem giriş hem de çıkış olarak ayarlanabilir. TRISE registerının ilk 3 biti bu pinleri giriş çıkış olarak ayarlamak için kullanılırken son 4 biti PSPMODE un ayar işlemleri için kullanılır. ( Kurs planında bu konu yoktur ancak zaman kalırsa işlenecektir) 6