I2C ve SPI Haberleşme: Hangisini Ne Zaman Kullanmalı?

# I2C ve SPI Haberleşme: Hangisini Ne Zaman Kullanmalı?

Mikrodenemeler ve sensörler arasında veri aktarmanın iki ana yolu vardır: I2C (Inter-Integrated Circuit) ve SPI (Serial Peripheral Interface). İkisi de senkron (saatli) protokoller olsa da çalışma mantıkları ve kullanım alanları farklıdır.

I2C iki hat kullanır: SDA (veri) ve SCL (saat). Birden fazla cihaz aynı hatlara bağlanabilir; her cihazın benzersiz bir adresi vardır. Daha az kabloya ihtiyaç duyar, ama veri hızı daha düşüktür (100 kbit/s ila 400 kbit/s tipik).

Avantajları: Az kablolama, çok cihaz desteği, basit.
Dezavantajları: Yavaş, uzun mesafelerde sorunlu.

SPI dört hat kullanır: MOSI (master to slave), MISO (slave to master), SCK (saat) ve CS (chip select). Her cihaz için ayrı CS hattı gerekir. Hızlı (1 Mbit/s ila 50+ Mbit/s) ve güvenilirdir.

Avantajları: Hızlı, güvenilir, uzun mesafe uygun.
Dezavantajları: Daha fazla kablolama, tek master.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

- I2C seçin: Sensör okuma (sıcaklık, nem), EEPROM, RTC gibi yavaş cihazlarda.
- SPI seçin: SD kart, LCD ekran, hızlı ADC gibi yüksek hızlı uygulamalarda.

Bir DHT22 sensörü (I2C) okumak:

1 <Wire.h>
2 "DHT.h"
3
4 DHTPIN 2
5 DHTTYPE DHT22
6DHT dht(DHTPIN, DHTTYPE);
7
8void setup() {
9Serial.begin(9600);
10Wire.begin();
11dht.begin();
12}
13
14void loop() {
15float temp = dht.readTemperature();
16float humidity = dht.readHumidity();
17
18Serial.print("Sıcaklık: ");
19Serial.print(temp);
20Serial.print(" °C, Nem: ");
21Serial.println(humidity);
22
23delay(2000);
24}

Beklenen çıktı:

1Sıcaklık: 24.5 °C, Nem: 65.3
2Sıcaklık: 24.6 °C, Nem: 65.1
1 <SPI.h>
2 <SD.h>
3
4const int chipSelect = 10;
5File dataFile;
6
7void setup() {
8Serial.begin(9600);
9SPI.begin();
10
11if (!SD.begin(chipSelect)) {
12Serial.println("SD kart başlatılamadı!");
13return;
14}
15
16dataFile = SD.open("veri.txt", FILE_WRITE);
17if (dataFile) {
18dataFile.println("I2C vs SPI test");
19dataFile.close();
20Serial.println("Veri yazıldı.");
21}
22}
23
24void loop() {}

Beklenen çıktı:

1Veri yazıldı.

Özet: Yavaş, basit uygulamalar için I2C; hızlı ve hassas veri aktarımı için SPI. Prototip aşamasında hangisinin rahat olacağını test ederek karar ver.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz