CCS C ve DS1990A İle 1-Wire (Tek Hat) İletişim Uygulaması

pr_01_37_max

1-wire tek hat Dallas firması tarafından geliştrilmiş tek sinyal hattı üzerinden çeşitli cihazların sinyal iletimi ve beslenmesini sağlayan iletişim sistemidir. Daha ayrıntılı bilgilere kitaptan ulaşabilirsiniz. Örnek kodlar ve proteus simülasyonu aşağıdadır.

/******************************************************
 PIC16F877 ile 1-Wire (Tek Hat) İletişim Uygulaması (DS1990A İle)
PIC PROG/DEKA : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <16f877.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#include <1_wire.c> // 1-Wire iletişim fonksiyonlarının kaydedildiği dosya programa ekleniyor

#define use_portb_lcd TRUE // LCD B portuna bağlı

#include <lcd.c> // lcd.c dosyası tanıtılıyor

int1 sonuc; // 1 bitlik değişken tanımlanıyor
int8 seri_no1=0,seri_no2=0,seri_no3=0,seri_no4=0,seri_no5=0,seri_no6=0,seri_no7=0,seri_no8=0; // 8 bitlik değişkenler tanımlanıyor
int32 seri_no=0; // 32 bitlik değişken tanımlanıyor

//********** ANA PROGRAM FONKSİYONU*******

void main ( )
{
 setup_psp(PSP_DISABLED); // PSP birimi devre dışı
 setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
 setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
 setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok
 setup_adc(ADC_OFF); // ADC birimi devre dışı
 setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
 setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı

 lcd_init(); // LCD hazırlanıyor

 ow_hiz(1); // 1-Wire iletişim hızı standart seçildi

 while(1) // Sonsuz döngü
 {
 sonuc=ow_reset(); // 1-Wire cihazına reset sinyalini gönder

 if (sonuc==0) // Eğer data hattında 1-wire cihazı var ve sağlam ise
 {
 printf(lcd_putc,"\fCihaz calisiyor"); // LCD'ye veri gönderiliyor.
 delay_ms(1500); // 1.5 sn gecikme veriliyor

 ow_yaz_byte(0x33); //ROM numarası okuma komutu cihaza gönderiliyor

 seri_no1=ow_oku_byte(); // ROM numarasının ilk byte değeri aile (family) kodu'dur.
 seri_no2=ow_oku_byte(); // ROM numarasının 2. byte ile 7.byte değerleri
 seri_no3=ow_oku_byte(); // cihazın 48 bitlik seri nosunu oluşturur
 seri_no4=ow_oku_byte();
 seri_no5=ow_oku_byte();
 seri_no6=ow_oku_byte();
 seri_no7=ow_oku_byte();
 seri_no8=ow_oku_byte(); // ROM numarasının 8. byte değeri cihazın CRC değeridir

 seri_no=make32(seri_no2,seri_no3,seri_no4,seri_no5); // 8 bitlik değerleri birleştirerek 32 bitlik değer oluşturur

 printf(lcd_putc,"\fCihaz Aile Kodu"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X",seri_no1); // Cihaz aile kodu LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor
 printf(lcd_putc,"\fCihaz Seri No"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X%X%X%X%X%X",seri_no2,seri_no3,seri_no4,seri_no5,seri_no6,seri_no7); // Cihaz seri no LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor
 printf(lcd_putc,"\fCihaz CRC Degeri"); // LCD'ye veri gönderiliyor.
 printf(lcd_putc,"\n%X",seri_no8); // Cihazın CRC değeri LCD'ye gönderiliyor
 delay_ms(2000); // 2 sn gecikme veriliyor

 if (seri_no==0x2CC5B800) // Eğer doğru cihaz sistemdeyse
 output_high(pin_c1); // RC1 pinine bağlı role çeker
 }
 else // Eğer data hattında 1-wire cihazı yok veya sağlam değilse
 printf(lcd_putc,"\fCihaz calismiyor");
 delay_ms(1500); // 1.5 sn gecikme veriliyor
 }
}

1-Wire (Tek Hat) İletişim Uygulaması (DS1990A İle)

Bu yazı CCS C Örnekleri kategorisine gönderilmiş ve , , , , ile etiketlenmiş. Kalıcı bağlantıyı yer imlerinize ekleyin.