I2CREAD Nedir – PBP Türkçe Açıklaması

'Elektronik Genel Bilgi' forumunda SeLeN tarafından 19 Kasım 2010 tarihinde açılan konu

  1. SeLeN

    SeLeN Site Yetkilisi Editör

    Sponsorlu Bağlantılar
    I2CREAD Nedir – PBP Türkçe Açıklaması konusu I2CREAD Nedir – PBP Türkçe Açıklaması - PBP Konu Anlatım



    I2CREAD DataPin,ClockPin,Control,{Address,}[Var{,Var...}]{,Label}

    “Byte” büyüklüğündeki Control ve opsiyonel olarak Address bilgilerini ClockPin ve DataPin üzerinden gönderir ve alınan “byte” büyüklüğündeki bilgileri Var ile belirtilmiş değişkenlere kaydeder. ClockPin ve DataPin, 0-15 arası sabit bir değer, 0-15 arası bir değer içeren (Örneğin: B0) bir değişken ya da pin adı (Örneğin: PORTA.0) olabilir.

    I2CREAD ve I2CWRITE komutları, Microchip tarafından üretilen 24LC01B gibi 2-hat I2C arayüzü kullanarak iletişim kuran harici seri EEPROMlara bilgi yazmak ve okumak için kullanılabilir. Bu cihazlar, enerji kesildiklerinde dahi üzerilerine yazılmış bilgileri koruduklarından birçok uygulamada veri kaydetmek için kullanılmaktadır.

    Bu komutlar çalışırken PIC, I2C “master” modunda çalışmaktadır. I2C protokolü ile haberleşen sıcaklık sensörleri, A/D çeviriciler gibi başka cihazlarla da bu komutlar kullanılarak iletişim kurulabilir.

    12-bit çekirdeğe sahip PICler için, DataPin ve ClockPin parametereleri derleme sırasında DEFINE kullanarak derleyiciye bildirilmelidir. Derleyici tarafından ihmal edilmesine rağmen I2CREAD fonksiyonu kullanımı sırasında da yine belirtilmelidirler. Gerekli tanımlamalar aşağıdaki gibi programın başında yapılmalıdır.

    1 DEFINE I2C_SCL PORTA,1 'Sadece 12-bit çekirdeğe sahip PICler için, ClockPin tanımlaması
    2 DEFINE I2C_SDA PORTA,0 'Sadece 12-bit çekirdeğe sahip PICler için, DataPin tanımlaması

    Control parametresi ile verilen bir “byte”lık bilginin üst 7 biti, haberleşilecek cihaza bağlı olarak, cihaz seçimi için kontrol kodu veya esktra adres bilgisi içermektedir. En düşük bit ise gönderilecek komutun okuma veya yazma komutu olduğunu ayırmak için kullanılan bir bittir ve doğru ayarlanmasına dikkat edilmelidir.

    Örneğin, Microchip tarafından üretilen ve I2C protokolü ile haberleşen bir harici EEPROM olan 24LC01B adlı entegrenin kontrol kodu %1010′dır. Çip seçim bitleri de kullanılmamaktadır. Dolayısıyla, Control parametresine %10100000 yani $A0 bilgisi yazılmalıdır. Bu protokol ile haberleşen bazı harici EEPROMların özellikleri ve kullanılması gereken Control bilgileri aşağıdaki tabloda verilmiştir.

    Cihaz Kapasite Control Parametresi Address Bilgisi Büyüklüğü
    24LC01B 128 byte %1010xxx0 1 byte
    24LC02B 256 byte %1010xxx0 1 byte
    24LC04B 512 byte %1010xxb0 1 byte
    24LC08B 1K byte %1010xbb0 1 byte
    24LC16B 2K byte %1010bbb0 1 byte
    24LC32B 4K byte %1010ddd0 2 byte
    24LC65 8K byte %1010ddd0 2 byte

    bbb = blok seçim bitleri
    ddd = cihaz seçim bitleri
    xxx = önemsiz

    Address parametresi ile belirlenip, gönderilecek bilginin boyutu (“byte”,”word”) yine bu parametreye verilmiş değişkenin tipine bakılarak belirlenir. Eğer “byte” büyüklüğündeki bir değişken Address parametresi yerine yazılmışsa 8 bitlik bir bilgi; eğer “word” büyüklüğünde bir değişken yazılmışsa 16 bitlik bir bilgi gönderilir. Bundan dolayı yazılımcının, iletişim kuracağı cihazın özelliğine göre uygun bir değişken tipi kullanması önemlidir. Sabit ifadelerin boyutu ifadenin içeriğine göre değişebileceğinden sabit ifadelerin Address bilgisi olarak kullanılmaması gerekir. Buna ek olarak çeşitli yazılım ifadeleri de yanlış bilgi gönderilmesine neden olabileceğinden parametre olarak kullanılmamalıdır.

    Var parametresine “word” tipinde bir değişken yazıldıysa, okunan 2 “byte”lık bilginin ilk önce en yüksek biti yazılacaktır. En son ise gelen bilginin en düşük biti yazılır. Değişkenlerin saklanmasında öncelikle en düşük bit kaydedilirken burada durum tam tersidir.

    STR manipülatörü değişken isminin önüne yazılarak kullanılabilir. Bu şekilde gelen bilgi tek seferde dizi (“array”) yapısı kullanılarak kaydedilebilir. Eğer STR ifadesi kullanılıyorsa, önün konulduğu değişkenin tipinin “word” veya “byte array” olması gerekmektedir. Değişkenin isminin sonuna da \ (ters taksim) işareti ve devamına da bir sayı yazılmalıdır. Örneğin:

    1 a VAR byte[8]
    2 I2CREAD PORTC.4,PORTC.3,$a0,0,[STR a\8]

    Bu kod ile gelen bilginin ilk 8 “byte”ı, a adlı diziye (“array”) kaydedilir.

    Eğer “word array” kullanılıyorsa, okunan her iki “byte” büyüklüğünde bilgi, dizinin bir elemanını oluşturur. Okuma işlemi sırasında gelen ilk bilgi, düşük “byte”a (“low byte”) yazılır. İkinci gelen bilgi ise yüksek “byte”a (“high byte”) yazılır. Değişkenlerin saklanmasında da derleyici tarafından aynı yol seyredilmektedir. Bu sıranın, üst kısımlarda bahsedilen, “array” olarak tanımlanmamış “word” tipi değişkenlerde farklı olduğuna dikkat ediniz.

    Eğer opsiyonel olarak Label parametresi belirtilir ise, I2C protokolü ile haberleşilen cihazdan onay biti (“acknowledge bit”) alınmaması durumunda program, belirtilen etiketten devam edecektir.

    I2CREAD komutu, 12CExxx ve 16CExxx serisi cihazlar gibi bazı PIClerde dahili olarak bulunan ve I2C protokolü ile haberleşen EEPROM üzerinden veri okumak için kullanılabilir. Bunun için I2CREAD komutu sırasında uygun pin isimleri belirtilmeli ve aşağıdaki DEFINE ifadesi programın başına eklenmelidir.

    1 DEFINE I2C_INTERNAL 1

    12CE67x serisi cihazlar için DataPin parametresinin değeri GPIO.6, ClockPin parametresinin değeri GPIO.7 olmalı iken; 16CE62x serisi cihazlar için DataPin parametresinin değeri EEINTF.1 ve ClockPin parametresinin değeri ise EEINTF.2 olmalıdır. Detaylı bilgi için cihazların, üretici firma Microchip tarafından hazırlanan teknik bilgi kılavuzlarına (“datasheet”) bakılabilir.

    I2CREAD komutunun kullandığı I2C protokolünün hızı PBP tarafından ayarlanmaktadır. Haberleşme hızının standart hızda (100 KHz) olması isteniyor ise PIC saat hızı makismum 8 MHz olmalıdır. Eğer saat hızı 8 MHz’den fazla ve 20 MHz’den az ise haberleşme hızlı modda (400 KHz) yapılacaktır. Eğer 8 MHz fazşa saat hızında da standart hızda (100 KHz) haberleşme yapılması isteniyorsa, aşağıdaki DEFINE ifadesi programın başına eklenmelidir:

    1 DEFINE I2C_SLOW 1

    Hafıza ve yığın (“stack”) limitlerinden dolayı yukarıdaki DEFINE ifadesi 12-bit çekildeğe sahip PIClerde işlevsizdir. Bu tip PIClerde I2C haberleşme hızını düşük (100 KHz) tutmak için saat hızı 4 MHz’den düşük olmalıdır. Eğer saat hızı 4 MHz’den yüksek ise haberleşme yüksek (400 KHz) hızda yapılacaktır. Bu durumda haberleşilen cihazların bu hızı desteklemesine dikkat edilmelidir.

    I2C protokolünde haberleşme, haberleşilen diğer cihazın saat hattını – SCL hattı yani ClockPin parametresiyle belirtilen pinin bağlı olduğu hattı – lojik 0 konumunda tutmasıyla duraksatılabilir. Bu özelliği aktif etmek için aşağıdaki DEFINE ifadesi programın başına eklenmelidir. Bu özellik 12-bit çekirdeğe sahip olan PICler tarafından desteklenmemektdir.

    1 DEFINE I2C_HOLD 1

    I2C protokolünde veri ve saat hattı yani DataPin ve ClockPin parametreleri ile belirtilen pinlerin bağlı olduğu hatların 4.7 KOhm dirençler ile (“pull up” direnci) Vcc, lojik 1, seviyesine çekilmesi gerekir. Aşağıdaki örnek bağlantı şemasında her iki hat da iki yönlü (“bi-directional”) ve açık-kollektör (“open-collector”) olarak çalışmaktadır.

    Eğer I2C saat hattının yani ClockPin parametresi ile belirtilmiş pinin bağlı olduğu hatın açık-kollektör (“open-collector”) yerine çift kutuplu (“bipolar”) olması gerekiyorsa aşağıdaki DEFINE ifadesi programın başına eklenmelidir.

    1 DEFINE I2C_SCLOUT 1

    Örnek

    Aşağıdaki devrede PIC 16F84′e bağlı I2C protokolü ile haberleşen harici bir EEPROM bulunmaktadır. Verilen kod parçası da EEPROM’un 17 nolu adresinden veri okumaktadır.

    [​IMG]

    1 addr var byte
    2 cont con %10100000
    3 addr = 17 ' EEPROM'un 17 nolu adresindeki veriyi okumak için addr değişenin değeri 17 yapıldı.
    4 ' EEPROM'un 17 nolu adresindeki veriyi oku, B2 adlı değişkene bu değeri yaz.
    5 I2CREAD PORTA.0,PORTA.1,cont,addr,[B2]

    EEPROM ile ilgili daha detaylı bilgiye, üreticileri tarafında sağlanan teknik bilgi kılavuzuna (“datasheet”) bakılabilir.

    Bunlara da Bakın

    * I2CWRITE

    Tüm fonksiyonların listesine Buradan bakabilirsiniz.



    Kaynak: Bu yazı, “İzoelektronik – Atölye” grubu tarafından, 90alper90 ve Hazar kullanıcı adlı grup üyelerinin ortak, aktif çalışması ile hazırlanmıştır.
     

Bu Sayfayı Paylaş