1-Wire, 1980'lerin sonunda Dallas Semiconductor (günümüzde Analog Devices / Maxim Integrated) tarafından geliştirilmiş, senkron olmayan (yarı çift yönlü - half-duplex), tek veri hattı üzerinden hem besleme hem de haberleşme sağlayan özel bir seri veriyolu protokolüdür. En popüler kullanım alanı DS18B20 sıcaklık sensörleri, iButton kimlik doğrulama anahtarları ve EEPROM bellek entegreleridir.

1-Wire protokolü donanım seviyesinde sadece tek bir dijital veri hattı (DQ) ve ortak bir GND hattı gerektirir:
1-Wire veriyoluna teorik olarak sınırsız sayıda ikincil (Slave) cihaz bağlanabilir. Master cihazın hedef elemanı ayırt edebilmesi için fabrika çıkışlı olarak her 1-Wire çipine kazınmış (laser-etched) 64-bit benzersiz bir ROM adresi bulunur:
| Bölüm | Uzunluk | Açıklama |
|---|---|---|
| Family Code (Aile Kodu) | 8-Bit | Cihaz tipini belirtir (Örn: DS18B20 için 0x28). |
| Serial Number (Seri Numarası) | 48-Bit | Dünyada eşi benzeri olmayan benzersiz seri numarası. |
| CRC Checksum | 8-Bit | Adres doğrulama için hesaplanan kontrol baytı. |
1-Wire'da saat (SCLK) hattı olmadığı için zamanlama son derece kritiktir. Tüm haberleşme mikrosaniye (µs) seviyesindeki darbe (pulse) uzunluklarıyla yürütülür:
Aşağıdaki örnekte OneWire ve DallasTemperature kütüphaneleri kullanılarak hattaki DS18B20 sensöründen sıcaklık verisi okuma işlemi gösterilmektedir:
#include <OneWire.h>
#include <DallasTemperature.h>
// 1-Wire Veri Pini (DQ)
#define ONE_WIRE_BUS 4
// OneWire ve DallasTemperature Nesnelerini Başlat
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(115200);
Serial.println("1-Wire DS18B20 Tarama Başlatılıyor...");
sensors.begin(); // 1-Wire Veriyolunu Başlat
// Hatta Bağlı Cihaz Sayısını Bul
int deviceCount = sensors.getDeviceCount();
Serial.printf("Veriyolunda Bulunan Cihaz Sayısı: %d\n", deviceCount);
}
void loop() {
// Sıcaklık Dönüştürme İsteği Gönder (Convert T Command - 0x44)
sensors.requestTemperatures();
// 0 İndeksli İlk Sensörün Sıcaklığını Oku
float tempC = sensors.getTempCByIndex(0);
if (tempC != DEVICE_DISCONNECTED_C) {
Serial.printf("Sıcaklık: %.2f °C\n", tempC);
} else {
Serial.println("Hata: DS18B20 Sensörü Okunamadı!");
}
delay(2000);
}
| Özellik | 1-Wire | I2C | SPI |
|---|---|---|---|
| Veri Pin Sayısı | 1 Pin (DQ) | 2 Pin (SDA, SCL) | 4+ Pin (MOSI, MISO, SCK, CS) |
| Maksimum Hız | Düşük (16.3 kbit/s - Overdrive: 142 kbit/s) | Orta (100 kHz - 3.4 MHz) | Çok Hızlı (10 MHz - 80 MHz+) |
| Maksimum Mesafe | 100+ Metreye Kadar (Uygun kablolama ile) | 1 - 2 Metre | < 1 Metre (PCB İçi) |
| Adresleme Yapısı | Donanımsal 64-bit Unik ROM ID | 7-bit / 10-bit Adresleme | Donanımsal Chip Select (CS) |
| Parazitik Besleme | Var (Veri hattından beslenme) | Yok | Yok |
Henüz yorum yapılmamış. İlk yorumu siz yapın!