I2C ve SPI ile PIC Micronetler ile Giriş

Microchip'un PIC ailesinden gelen mikro kontroller, gömülü sistemlerde yaygın olarak kullanılır, basit sensör düğümlerinden karmaşık endüstriyel kontrolörlere bağlantı kurma yeteneğidir. Herhangi bir gömülü geliştirici için anahtar bir beceri, seri iletişim protokolleri kullanarak arayüz periferileri arayüze olanak sağlar.En yaygın iki bağlantı I2C (Süresel Perpheral Interface) ve SPI (Serial Peripheral Interface).

Bu makale, I2C ve SPI'yi PIC mikrokontrolörlere uygulamak için pratik, derinlemesine bir kılavuz sunar. Donanım kurulumunu, kayıt yapılandırmasını, tipik kod dizilerini ve ortak debugging tekniklerini kapsamak için bilginiz olacaktır.Sonunda bir sonraki projeye PICly ekle iletişim kuracaktır.

I2C ve SPI'ye Genel Bakış

Her iki protokol de senkronize seri otobüslerdir, ancak mimarlık, hız ve uygulamada farklıdır.

I2C (Integrated Circuit)

I2C sadece iki tel kullanır: 03.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.

Çünkü sadece iki tel gereklidir, I2C I/O pins kurtarır, küçük PICs için çekici hale getirir. Ancak, protokol adresi için SPI'den daha karmaşıktır, biraz kabul eder ve saat germe.

SPI (Serial Peripheral Interface)

SPI dört satır kullanır: [Ücretsiz Saat:0]MOSI[DÜDÜDÜDÜSÜDÜSÜDÜSÜDÜSÜDÜDÜSÜDÜDÜSÜDÜDÜDÜDÜDÜSÜDÜDÜDÜDÜDÜSÜSÜSÜDÜSÜŞÜNÜDÜSÜDÜSÜSÜŞÜNÜŞÜNÜSÜŞÜNÜŞÜNÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜN

SPI, donanımda uygulamak daha basit, ancak daha fazla pin gerektirir - köle başına özel bir SS hattı. Birçok PIC mikrokontrollüler, I2C veya SPI için yapılandırılabilecek özel bir Master Synchronous Seri Port (MSSP) modülü içerir.

I2C ve SPI için Donanımı Değerlendirmeleri

Koda girmeden önce, donanımı doğru almanız gerekir.

[FONT:0)Pull-up direnişçilere karşı: I2C hatları açık ve hıza bağlıdır; dış çekme dirençleri (tipik olarak 10 kULL) ile SDA ve SCL'yi V'ye çekmek için gerekli olabilirD).

[FONT=0]Voltage seviyeleri:[Dönetici:0)[Döneticileri ve çevreniz aynı mantık geriliminde (örneğin, 3.3 V veya 5 V) çalıştırılırsa, seviye değişimcileri kullanırlarsa, D-12009 [DışkanlıkDüzüğün) veya basit bir MOSFET devresinde çalışır.

[FONT:0)Bus uzunluğu ve kapasitif yükleme: Daha uzun teller için (birkaç inç), veri tablonuzdaki en yüksek belirtilenlerin altında kapasiteye devam edin ().PIC16F1xxx datasheet) Sık sık sık I2C için 400 pF, daha uzun hatlar için sinyal yansımalarına neden olabilir; gerektiğinde daha yavaş kablolar kullanın.

[FONT:0)Decoupling kapasitetörler: Her IC'nin güç pimlerine yakın 0.1 μF kapasiteliler verileri bozabilecek gürültüyü bastırmak için.

I2C'yi PIC Mikrokontrolörlere yapılandırın

Çoğu modern PICs, I2C ve SPI'yi destekleyen bir modüle sahip, tipik 8-bit için MSSP'ye odaklanacağız (örneğin, PIC16F188).

I2C için Anahtar Kayıtlar

  • [FONT=0]SSPxADD[DÜDÜDÜDÜDÜDÜDÜSÜDÜSÜSÜŞÜNÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ
  • [FONT=0]SSPxSTAT[Dönetici: 1 ) – Durum kaydı. Bits, otobüs çarpışmasını gösterir ve bir başlangıç / durdurma koşulu tespit edilir.
  • [FONT=0]SSPxCON1[Dönetici: 1 ) - Kontrol kaydı 1. I2C modu (master, köle) ve modülü etkinleştirir.
  • [FONT=0]SSPxCON2[Dönetici: Master mode control. Komutlar Başlangıç, Yeniden Başlayın, Dur ve acknowledging.
  • [FONT=0)SSPxBUF) - Data tampon. göndermek için yazın, almak için okuyun.

I2C Master İlkization Sequence

  1. MSSP modülü, İLMİNŞİLERİNİN (SSPUMCON1<5>)
  2. I2C master modu (tipik olarak 0x08 SSPxCON1 bits <3:0>).
  3. SSPxADD'yi uygun değerle yüklemeyle vaftiz oranını yapılandırın.
  4. SDA ve SCL, zayıf çekmelerle giriş olarak ayarlar (veya dış dirençleri kullanır).
  5. SSPEN'i ayarlayarak modüle uygulanabilir.
  6. Seçmeli olarak MSSP için kesintiler sağlar.

Örnek: LM75 Sıcaklık Sensörinden Okuma

LM75, A0-A2 pins için 7-bit adresine sahiptir. Sıcaklık kaydı (pointer 0x00), ilk önce puan yazmanız gerekir, sonra tekrarlanan bir başlangıç ve okuma.

[FONT:0]Yazar sıra: |D|D|D|D|D|D|D|D|D|D|D|D|D|D|D|Dönt|D|D|D|D|Döncü|D|Döncük|D|Döncük|Düz|Döncük|Düzücük|Dış) [Düzücükler için → [Düzücükler için) → [Düzücükler için) → [Düzücükler için)

Her bir borsa, BF (Buffer Full) için kayıt yaptırmayı gerektirir ve SSPxIF bayrağını kesmek için ortak bir hata ACK/NACK'yı veri aldıktan sonra göndermeyi unutur.

Common I2C Pitfalls

  • [FONT:0)Clock germe:[Dönetici:[Dönetici: 2 ) Bazı köleler, yüksek lisansa kadar yavaş yavaş yavaş yavaş yavaş yavaş yavaşlayacak kadar SCL'i tutar.
  • [FONT:0]Bus çarpışması:[Dönetici:[Dönetici] Başka bir usta otobüsü kullanmaya çalışırsa, MSSP, bu işlemi yeniden denemeyi kullanır.
  • [FONT:0]Stuck otobüsleri:[Dönetici:[Dönetici] Bir köle bir iletiden sonra SDA serbest bırakılmazsa, otobüs 9 saat pul puls gönderir.

SPI'yi PIC Microdenetler üzerinde yapılandırın

MSSP ayrıca SPI master veya köle modunda da çalışabilir. En yaygın olan master modu ele alacağız.

SPI için Anahtar Kayıtlar

  • [FONT=0)SPIxBRG[[Dönetici: 1) [FONT=0) [FONT=0))[FONT=0))))
  • [FONT=0)SPIxSTAT[Dönetici: 1 ) – Durum kaydı. BF bit, çarpışma yazmak, aşırı akış bayrakları almak.
  • [FONT:0)SPIxCON1[[Dönetici: 1 ) Kontrol kayıt 1. Üst seviye (CKP), saat fazı (CKE), ve örnek nokta (SMP).
  • [FONT=0)SPIxCON2[Dönetici: 1 ) – Ek kontrol (e.g., çerçeve modu, SS2 etkinleştir).
  • [FONT=0)SPIxBUF) - İletilen ve alınan veri tamponu (buffered).

SPI Master İlkization Sequence

  1. SPI modülü (eski SSPEN) devre dışı bırakılabilir.
  2. İstenen saat kutupluluğu ve fazı ayarlayın.ARD:0)Mode 0[DÜT:1) (CKP=0, CKE=1) en yaygın olanıdır: veriler, kenarda yukarı doğru yukarı doğru kaybolup, düşen kenarda kaybolup kaybolup kaybolup duruyor.
  3. SPIxBRG'de vaftiz oranına ek olarak, 16 MHz saat ile 1 MHz için SPIxBRG = 7.
  4. master modu seçin (SSPM bitleri = 0b0000 for SPI master, saat = FOSC/4).
  5. SS pin yönünü ayarlayın. Birçok PICs'te SS pin, usta modunda özel bir giriştir. köle seçimi için kölenin çipine bağlı ayrı bir GPIO pin'i seçmelisiniz.
  6. Modüle enable.

Örnek: Bir MCP3008 8 kanal ADC ile Interface

MCP3008, SPI aracılığıyla 0. Bir kanal okumak için 10 bit ADC'dir (örneğin, kanal 0), usta üç tane çeviri gönderir: biraz başlangıç, tek bir uç / farklı bir miktar ve kanal adresi.

[FONT:0])Transaction dizisi: ) [DDD:2|Dört|Dört|Dört|Dört|Dört|D|Dönetici|Dört|D|D|Dönetici|D|Dönetici|D|D|Düz|Düz|Dönetici|Düz|Düzg|Düzgöpürüm) # 0x00 Yaz 0x00 Yaz (dummy) SPIxBUF için - yüksek 8 bit dönüştürme sonucu okuyun.

SPIxBUF'ye her yazının bir eş zamanlı olarak askıya alınması gerektiğini unutmayın. Her bir yazının aşırı akıştan kaçınmak için tamponu okumanız gerekir.

Multi SPI Köleleri Yönetin

Her köle, köle başına bir GPIO kullanın. SS pin'i değiştirmek ve kölenin zaman gerekliliklerini karşılamak için saat boyunca küçük bir gecikme olduğundan emin olun. Birçok PICs otomatik köle-select nesli sadece köle modunda kullanmak için donanım SS pin kullanmanıza izin verir; master modunda bunu manuel olarak yapmalısınız.

Debugging I2C ve SPI İletişim

İşler işe yaramıyorsa, bir metodolojik bir yaklaşım takip edin:

  • [FONT:0]Bir mantık analizci veya oscilloskopu kullanın.[[Dönetici:0) Bu, saatin mevcut olduğunu kontrol edin, veri geçişleri meydana gelir ve adresler doğrulanır. I2C için, doğrulama başlangıç / durak koşulları ve birazları kabul eder.
  • [FONT:0)Check, dirençleri çekmektedir.[[DÜT:1] Eğer SDA veya SCL düşük kalırsa, otobüsleri tutan bir cihaza sahip olabilirsiniz.Bir ve tekrar deneyin dışında tüm köleleri bir araya getirin.
  • [FONT=0) Şaşkın oranına işaret eder.[[Dönetici:0) Bir kapsam ile saat sinyalini ölçür.For I2C, saat frekansı kölenin özellikleri içinde olmalıdır.
  • Examine adresi ve komutları. Ortak bir hata, bir tane tarafından terk etmeden 7 bit adresi gönderir ( R/W bit LSB'de gider).
  • [FONT:0) SPI için, saat kutupluluğu ve fazı kontrol edin.[DÜT:1] Birçok köle tam modda hassastır. Kölenin veri tablosuna da başvurun.

Donanım silme doğru dalgaformları ortaya çıkarırsa, konu sizin bilgisayarınızda olabilir.Debug LEDs veya baskı statüsü kaydı için bir seri konsolu kullanın. Birçok PIC geliştirme kurulu, bir on-board programcı /debugger (e.g., MPLAB PICkit 4) kod üzerinden adım adım atmanıza yardımcı olabilir.

Yazılım BitBanging bir Backup olarak

Donanım periferisi mevcut değilse veya MSSP'yi eksik olan bir PIC kullanıyorsanız, GPIO pins kullanarak yazılımda I2C veya SPI'yi kullanabilirsiniz.Çünkü I2C biraz daha iyi bir şekilde, SDA ve SCL'i doğrudan takip etmek için, bir GPIO'dan biraz uzaklaşırsınız ve aynı anda giriş pin.- Bitbanging esnektir ve CPU döngüleri kullanırsınız.

Gelişmiş Topics

I2C Multi-Master ve Saat Hız Tuning

Birden çok usta otobüsü paylaştığında, tahkimi dikkatle idare etmeniz gerekir. PIC'deki MSSP çok usta modu destekler; otobüsü izler ve başka bir master veri gönderirse yeniden kontrol eder.Bus çarpışma kesintisini kullanın (BCLIF) rastgele bir gecikmeden sonra tekrarlatma.

Daha hızlı I2C (örneğin, 400 kHz), ön ölçekli bir yük kullanarak daha küçük değerlere ayarlandığında (örneğin, 2.2 kULL) bazı PICs'in özel birFLT'si vardır.

SPI DaisyChaining ve DMA

Bazı SPI cihazları, bir cihazın girişini (MOSI) bir sonraki tek bir çip-select hattı ile birden çok köleye olanak sağlar. MSSP, destekle ilgili olarak daisy-chaining'i idare edebilir.

Yüksek hızlı SPI için, PIC'nin Doğrudan Memory Access (DMA) kontrolörünü kullanmayı düşünün ( birçok yenileyici PICs'te kullanılabilir). DMA, verileri CPU müdahalesi olmadan veya diğer görevlerin temellerini ücretsiz olarak gönderebilir. DMA periferik kaynakla yapılandırılır ve SPI'nin kesintiye uğraması.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

I2C ve SPI, herhangi bir gömülü tasarımcının kitinde temel araçlardır. Çoğu PIC mikrodenetleyicide bulunan esnek MSSP modülü ile bu protokolleri uygulamak, kayıt ve zaman zaman parametrelerini anladığınızda basit bir kez basittir.Her zaman basit bir testle başlayın - donanım ve yazılım temelinizi doğrulamak için.

Datasheets en iyi arkadaşınızdır: Microchip'sETHFLT:0) Resmi veri tabloları) tam kayıt haritaları ve zamanlama diyagramları sağlar. Başvuru notları, [[ENFLT:2)AN734 (I2C ipuçları) ve SPI periferik olarak sizin için değerli projelere ek olarak.