- I2C İletişim Protokolü nedir?
- I2C İletişim nasıl çalışır?
- I2C iletişimi nerede kullanılır?
- MSP430'da I2C: AD5171 Dijital Potansiyometreyi Kontrol Etme
MSP430, Texas Instruments tarafından gömülü projeler için sağlanan güçlü bir platformdur, çok yönlü yapısı birçok uygulama için yollar bulmasını sağlamıştır ve aşama hala devam etmektedir. Eğer MSP430 eğitimlerimizi takip ediyor olsaydınız, bu mikro denetleyici hakkında temel bilgilerden başlayarak geniş bir yelpazede öğretici anlattığımızı fark etmişsinizdir. Şu andan beri, iletişim portalı gibi daha ilginç şeylere girebileceğimiz temel bilgileri ele aldık.
Geniş gömülü uygulamalar sisteminde, hiçbir mikrodenetleyici tüm faaliyetleri tek başına gerçekleştiremez. Bir aşamada, bilgi paylaşmak için diğer cihazlarla iletişim kurması gerekir, bu bilgileri paylaşmak için birçok farklı iletişim protokolü vardır, ancak en çok kullanılanlar USART, IIC, SPI ve CAN'dır. Her iletişim protokolünün kendi avantajı ve dezavantajı vardır. Şimdilik I2C kısmına odaklanalım, çünkü bu eğitimde öğreneceğimiz şey bu.
I2C İletişim Protokolü nedir?
IIC terimi, " Inter Integrated Circuits " anlamına gelir. Normalde I2C veya I kare C olarak veya hatta bazı yerlerde 2 telli arayüz protokolü (TWI) olarak belirtilir, ancak hepsi aynı anlama gelir. I2C, senkronize bir iletişim protokolüdür, yani bilgiyi paylaşan her iki cihaz da ortak bir saat sinyalini paylaşmalıdır. Biri horoz sinyali için, diğeri ise veri göndermek ve almak için kullanılan bilgileri paylaşmak için yalnızca iki tele sahiptir.
I2C İletişim nasıl çalışır?
I2C iletişimi ilk olarak Phillips tarafından tanıtıldı. Daha önce de belirtildiği gibi, iki tele sahip, bu iki tel iki cihaza bağlanacak. Burada bir cihaz ana cihaz olarak adlandırılır ve diğer cihaz köle olarak adlandırılır. İletişim her zaman iki Master ve bir Slave arasında olmalıdır ve olacaktır. I2C iletişiminin avantajı, bir Master'a birden fazla slave'in bağlanabilmesidir.
Tam iletişim, Seri Saat (SCL) ve Seri Veri (SDA) olmak üzere bu iki kablo üzerinden gerçekleşir.
Seri Saat (SCL): Master tarafından üretilen saat sinyalini slave ile paylaşır
Seri Veri (SDA): Verileri Master ve slave arasında ve arasında gönderir.
Herhangi bir zamanda yalnızca kaptan iletişimi başlatabilecektir. Veriyolunda birden fazla slave olduğundan, ana birimin her bir slave'e farklı bir adres kullanarak başvurması gerekir. Adreslendiğinde, yalnızca bu belirli adrese sahip olan bağımlı kişi bilgilerle yanıt verirken diğerleri çıkmaya devam eder. Bu şekilde, birden fazla cihazla iletişim kurmak için aynı veri yolunu kullanabiliriz.
I2C gerilim seviyeleri önceden tanımlanmış değildir. I2C iletişimi esnektir, yani 5v volt ile çalışan cihaz I2C için 5v kullanabilir ve 3.3v cihazlar I2C iletişimi için 3v kullanabilir. Peki ya farklı voltajlarda çalışan iki cihazın I2C kullanarak iletişim kurması gerekiyorsa? Bir 5V I2C veri yolu 3.3V cihazla bağlanamaz. Bu durumda voltaj değiştiriciler, iki I2C veri yolu arasındaki voltaj seviyelerini eşleştirmek için kullanılır.
Bir işlemi çerçeveleyen bazı koşullar vardır. İletimin başlatılması, SDA'yı düşük ayarlarken master'ın SCL'yi yüksek bıraktığı aşağıdaki diyagramda 'BAŞLAT' durumu olarak tanımlanan SDA'nın düşen kenarı ile başlar.
Aşağıdaki diyagramda gösterildiği gibi, SDA'nın düşen kenarı, BAŞLAT koşulu için donanım tetikleyicisidir. Bundan sonra aynı veri yolundaki tüm cihazlar dinleme moduna geçer.
Aynı şekilde, SDA'nın yükselen kenarı yukarıdaki diyagramda 'STOP' durumu olarak gösterilen iletimi durdurur, burada master SCL'yi yüksek bırakır ve ayrıca YÜKSEK gitmek için SDA'yı serbest bırakır. Böylece SDA'nın yükselen kenarı iletimi durdurur.
R / W biti takip eden baytların iletim yönünü gösterir, YÜKSEK ise slave'in iletim yapacağı ve düşük olması master'ın iletim yapacağı anlamına gelir.
Her bit, her saat döngüsünde iletilir, bu nedenle bir bayt iletmek için 8 saat döngüsü gerekir. Gönderilen veya alınan her bayttan sonra, ACK / NACK için dokuzuncu saat döngüsü tutulur (onaylandı / onaylanmadı). Bu ACK biti duruma bağlı olarak slave veya master tarafından üretilir. ACK bit için SDA 9'da ana ya da yan tarafından düşük olarak ayarlandığında inci saat çevrimi. Dolayısıyla düşük, ACK, aksi takdirde NACK olarak kabul edilir.
I2C iletişimi nerede kullanılır?
I2C iletişimi yalnızca kısa mesafeli iletişim için kullanılır. Akıllı hale getirmek için senkronize bir saat darbesine sahip olduğu için kesinlikle güvenilirdir. Bu protokol, esas olarak bir ana bilgisayara bilgi göndermesi gereken sensör veya diğer cihazlarla iletişim kurmak için kullanılır. Bir mikrodenetleyicinin diğer birçok slave modülle minimum yalnızca kablo kullanarak iletişim kurması gerektiğinde çok kullanışlıdır. Uzun menzilli bir iletişim arıyorsanız RS232'yi denemelisiniz ve daha güvenilir bir iletişim arıyorsanız SPI protokolünü denemelisiniz.
MSP430'da I2C: AD5171 Dijital Potansiyometreyi Kontrol Etme
Energia IDE, MSP430'umuzu programlamak için en kolay yazılımlardan biridir. Arduino IDE ile aynıdır. Energia IDE'yi kullanarak MSP430'u kullanmaya başlama hakkında buradan daha fazla bilgi edinebilirsiniz.
Dolayısıyla, Energia IDE'de I2C'yi kullanmak için sadece wire.h başlık dosyasını eklememiz gerekir. Pin bildirimi (SDA ve SCL) tel kitaplığının içindedir , bu nedenle kurulum işlevinde bildirmemize gerek yoktur.
Örnek örnekler IDE'nin Örnek menüsünde bulunabilir. Örneklerden biri aşağıda açıklanmıştır:
Bu örnek, I2C senkron seri protokolü aracılığıyla iletişim kuran bir Analog Devices AD5171 Dijital Potansiyometrenin nasıl kontrol edileceğini gösterir. MSP'nin I2C Tel Kitaplığını kullanarak, dijital pot 64 direnç seviyesinden geçerek bir LED'i soldurur.
İlk olarak, i2c iletişiminden sorumlu kitaplığı, yani kablo kitaplığını dahil edeceğiz
#Dahil etmek
In kurulum fonksiyonu, biz tarafından tel kütüphanesini başlatacaktır .begin () fonksiyonu.
geçersiz kurulum () { Wire.begin (); }
Ardından potansiyometrenin değerlerini saklamak için değişken bir val başlatın
bayt değeri = 0;
Olarak döngü fonksiyonu, biz olacak I2C yardımcı aygıta iletimi başlatmak IC veri sayfası verilmektedir cihaz adresi belirterek (bu durumda dijital potansiyometre, IC).
geçersiz döngü () { Wire.beginTransmission (44); // 44 numaralı cihaza ilet (0x2c)
Daha sonra sıra baytları, yani write () işlevi ile iletilmek üzere IC'ye göndermek istediğiniz veriler.
Wire.write (bayt (0x00)); // talimat baytı gönderir Wire.write (val); // potansiyometre değeri baytı gönderir
Daha sonra endTransmission () çağırarak bunları iletin .
Wire.endTransmission (); // val göndermeyi durdurun ++; // değeri artır if (val == 64) {// 64. konuma ulaşılırsa (maks.) val = 0; // en düşük değerden baştan başla } delay (500); }