C18 Diliyle Robot Programlama – I²C (Inter-Integrated Circuit) Haberleşmesi

I²C seri iletişimi, mikrodenetleyicinin diğer entegre elemanlarıyla kolay iletişim kurmasını sağlayan entegreler arası bir haberleşme protololüdür. Kullanacağımız PIC18F4585  içerisinde hem I²C hem de SPI (Serial Peripheral Interface) birimini içinde barındıran MSSP (Master Synchronous Serial Port) modülü bulunmaktadır.

I²C protokolünde haberleşmek için iki uç kullanılır. Bunlar SDA (Seri veri giriş-çıkış) ve SCL (Seri saat sinyali – clock)’dir. SDA uçlarından bilgi aktarımı işlemleri SCL ucundaki  saat sinyali sayesinde senkronize olarak gerçekleştirilmektedir. Datasheet’e bakacak olursak PIC18F4585’de SDA ve SCL  için kullanılan uçların 18. ve 23. pinler olduğunu görebiliriz.

Bu protokolde entegreler master(ana-usta) ya da slave(uydu-köle) olabilir. Entegre master iken; saat sinyalini kendisi yönetir, iletişimin kontrolü master olan entegrededir. Slave konumunda olan entegre saat sinyali üretmez, sadece veri alışveriş işlemi yapar.

Bu bölümdeki amacımız elimizdeki 2 adet PIC18F4585 entegresinden birini master, birini slave olacak şekilde programlayarak master’dan slave‘e veri gönderip, yine master   aracılığıyla slave‘den veri okumak olacak. İki entegreyi de bu senaryo için programlamamız gerekiyor.

I²C iletişiminde her bir slave cihazının kendine özgü bir adresi vardır. Böylece master olan cihaz hangi slave cihazıyla işlem yapacağını belirtebilir (Bir master birden çok slave cihazıyla veya birden çok master kendi arasında I²C kullanarak haberleşebilir). Bu adres  7 bitlik veya 10 bitlik olabilir. Biz bu bölümde 7 bitlik adresleme kullanacağız. Veri iletişim hattı I²C protokolünde 8 bittir. Yani tek seferde 8 bitlik (1 byte) veri gönderip okuyabiliriz.

Genel olarak iletişim aşağıdaki şekilde sağlanır;

  • Başlama şartı (Start Condition)
  • Adres + Okuma/yazma bilgisi
  • Veri bitleri
  • Durma şartı (Stop Condition)

Not:  Start ve Stop şartları master cihaz tarafından oluşturulur. Master cihazın adres bilgisi olmaz. Veri bitlerinden önce mutlaka adres bilgisi gönderilmelidir ki o adrese sahip slave    cihaz seçilsin. Yoksa veri aktarımı -tek bir slave cihazla haberleşme yapılsa bile- gerçekleşmez. Okuma/yazma bilgisi denen şey iste master cihazın slave cihaza veri gönderme veya cihazdan veri alma durumunun belirlenmesinde kullanılır.

Okumaya devam et

C18 Diliyle Robot Programlama – Timer (Zamanlayıcı) Kullanımı

Zamanlayıcı kullanmak için mikroişlemcilerde belirli birimler bulunur. PIC18F4585‘te bununla ilgili 3 birim bulunmakta. Timer0, Timer1 ve Timer2.

Bu bölümde amacımız bu zamanlayıcı birimlerini kullanarak belirli zaman aralıklarında kesme oluşmasını sağlamak. Oluşan kesmelerin kontrolünü yine ledlerle yapacağız.

Timer0 ve Timer1 hem zamanlayıcı hem de sayıcı olarak kullanılabilir. Birimin zamanlayıcı olarak kullanılabilmesi için değer artışının düzenli (periyodik) olması gerekir (Ör: 3 saniyede bir butona basmak). Sayıcı olarak kullanımda ise değer artışı düzenli olmak zorunda değildir (Ör: 10 dakika boyunca 35 defa herhangi bir zamanda butona basmak). Timer2 birimi ise sadece sayıcı olarak kullanılır. Bu birimleri sırayla inceleyelim.

Okumaya devam et