20 Ocak 2018 Cumartesi

DS1990a iBUTTON (AKBİL) KONTROLLÜ ERİŞİM ve GÜVENLİK SİSTEMİ

Merhaba arkadaşlar,
Blog yayınlarıma uzun bir süre ara vermiştim. Şimdi farklı bir çalışma ile yayınlarımıza devam ediyoruz. Bu çalışmamızda AKBİL olarak bilinen DS1990a iButtonu PIC16F883 mikrodenetleyicisi ile kullanacağız. Tasarladığım devre asansörlerde kullanılmak için yapılmıştır. Kapı veya turnikelerde kontrollü geçiş işlemleri içinde kullanılabilir. Bu çalışmada, bizim amacımız asansöre çağrı verme işlemini akbil ile kontrol etmek olmuştur. Devre üzerindeki DS9092 iButton Probe kullanıcılardaki AKBİL (DS1990a iButton) anahtarları okur ve sisteme tanıtılmış olanlara kullanım izni verir.



DS1990a maxim-dallas firmasına ait bir üründür. DS1990a iButton mikrodenetleyicilerle OneWire iletişim tekniğiyle haberleşir. Herbir akbilin (DS1990a ) kendisine özel üzerinde yazılı 64 bitlik bir kayıt numarası vardır. Bu kayıt numarası OneWire iletişim aracılığla mikrodenetleyici tarafından öğrenilir. 
OneWire, Master / Slave protokolüdür ve gereken tüm iletişim kabloları tek bir kablodur. OneWire özellikli aygıtların ortak veri hattında   pull-up direncinin olması gerekir. 
Her bir OneWire aygıtı aynı kanalda eşzamanlı 64 bitlik kayıt numarası (8 bitlik cihaz tipi, 48 bitlik seri numarası ve 8 bitlik CRC) içerir, bu nedenle birden fazla slave cihaz aynı veri yolunda bir arada bulunması mümkündür.
OneWire haberleşmede 3 temel fonksiyon vardır. Bunlar OneWire hattını resetleme, veri yazma ve veri okuma fonksiyonlarıdır. OneWire protokolünde yer alan bu fonksiyonları ve iButton ile kullanımını vermiş olduğum linkden öğrenebilirsiniz. Ben programı mikroC derleyicisinde yazdığım için mikroC'nin kendi OneWire kütüphanesini kullandım. Bu kütüphane, zamana dayalı etkinlikleri uygular; bu nedenle, OneWire kütüphanesini kullanırken kesmelerin devre dışı bırakılması gerekir.
MikroC derleyicisinin OneWire kütüphanesi şu fonksiyonları içermektedir;
  • Ow_Reset
  • Ow_Read
  • Ow_Write
Şimdi sırası ile bu fonksiyonların kullanımını kısaca anlatalım.

Ow_Reset Fonksiyonu:
Bu fonksiyon OneWire hattını resetler ve hatta cihaz bulunup bulunmadığını belirtmek için değer döndürür. Fonksiyonun prototipi aşağıdaki gibidir.
unsigned short Ow_Reset(unsigned short *port, unsigned short pin);
Prototipden de göreceğimiz üzere fonksiyon iki adet parametre almaktadır. Bunlardan biri OneWire veri yolu portu, diğeri ise OneWire veri yolu pinidir. Ayrıca fonksiyon geriye unsigned short tipinde bir değer döndürmektedir. Eğer hatta cihaz bulunuyorsa geriye 0 değerini, bulunmuyorsa 1 değerini döndürür. Fonksiyonun kullanımına bir örnek verecek olursak;
Ow_Reset(&PORTE, 2);

Ow_Read Fonksiyonu:
Bu fonksiyon OneWire veri yolu üzerinden bir bayt veri okur. Fonksiyonun prototipi aşağıdaki gibidir.
unsigned short Ow_Read(unsigned short *port, unsigned short pin);
Görüldüğü gibi fonksiyon yine port ve pin parametrelerini almaktadır. Geriye ise okuduğu veriyi döndürür. Fonksiyonun kullanımına bir örnek verecek olursak;
unsigned short tmp; 
...
tmp = Ow_Read( &PORTE, 2);

Ow_Write Fonksiyonu:
Bu fonksiyon OneWire veri yolu üzerinden bir bayt veri yazar. Fonksiyonun prototipi aşağıdaki gibidir.
void Ow_Write(unsigned short *port, unsigned short pin, unsigned short par);
Fonksiyon port, pin ve yazılacak veri olmak üzere üç adet parametre almaktadır. Geriye herhangi bir değer döndürmez. Fonksiyonun kullanımına bir örnek verecek olursak;
Ow_Write( &PORTE, 2, 0xCC);


Devremizde birde ATMEL 24C16 eeprom entegresi bulunmaktadır. Kaydedilen akbil anahtarların 64 bitlik kayıt numaraları bu eepromda saklanır. 24C16 harici eeprom 16K bit hafızaya sahiptir. Eeprom, mikrodenetleyici ile I2C haberleşme tekniğiyle veri alışverişi sağlar.

    Projemizin devre şeması aşağıdadır.

    MikroC derleyicisinin I2C kütüphanesi şu fonksiyonları içermektedir;
  • I2Cn_Init
  • I2Cn_Start
  • I2Cn_Repeated_Start
  • I2Cn_Is_Idle
  • I2Cn_Rd
  • I2Cn_Wr
  • I2Cn_Stop
Şimdi de I2C kütüphanesine ait fonksiyonları kısaca açıklayalım.

I2Cn_Init Fonksiyonu:
Bu fonksiyon belirlenen I2C modülünü yapılandırır. Fonksiyonun prototipi:
void I2C1_Init(const unsigned long clock);
Görüldüğü üzere fonksiyon bir clock parametresi almaktadır. Bu parametre I2C nin çalışma              hızını      belirtir.Fonksiyonun kullanımına bir örnek verecek olursak;
I2C1_Init(100000);
Bu örnekde I2C1 modülünün 100KHz hızında çalışması için yapılandırılmıştır.

I2Cn_Start Fonksiyonu: 
Bu fonksiyon belirlenen I2C modülünün çalışmasını başlatır. I2C veriyolunun boş olduğunu belirledikten sonra start sinyali gönderir. Fonksiyonun prototipi:
unsigned short I2C1_Start(void);
Bir hata yoksa fonksiyon geriye "0" değerini döndürür. Örnek kullanımı:
I2C1_Start();

I2Cn_Repetead_Start Fonksiyonu:
Bu fonksiyon belirlenen I2C modülünün durdurulmadan tekrar start almasını sağlar. Harici eepromdan veri okurken, eepromun adresi ve veri adresi eeproma gönderildikten sonra, stop sinyali gönderilmeden tekrar start sinyali gönderilir. Fonksiyon prototipi:
void I2C1_Repetead_Start(void);
Örnek kullanımı:
I2C1_Repetead_Start( );

I2Cn_Is_Idle Fonksiyonu:
Bu fonksiyon I2C veri hattının kullanımda olup olmadığını test eder. eğer kullanımda ise geriye "0", değilse "1" değerini döndürür. Fonksiyon prototipi:
unsigned short I2C1_Is_Idle(void);
Örnek kullanımı:
if(I2C1_Is_Idle( ) ) {....}

I2Cn_Rd Fonksiyonu:
Bu fonksiyon slave cihazdan bir bayt veri okur. eğer kullanımda ise geriye "0", değilse "1" değerini döndürür. Fonksiyon prototipi:
unsigned short I2C1_Rd(unsigned short ack);
Görüldüğü üzere fonksiyon ack adında bir parametre almaktadır. Bu parametre "0" değilse ise okuma yapıldıktan sonra onay biti gönderilir, eğer "0" ise okuma yapıldıktan sonra onay biti gönderilmez.
Örnek kullanımı:
unsigned short take;
.....
take = I2C1_Rd(0); 

I2Cn_Wr Fonksiyonu:
Bu fonksiyon I2C veri yolu üzerinden 1 bayt veri gönderir. Fonksiyon prototipi:
unsigned short I2C1_Wr(unsigned short data_);
Slave cihaza gönderilecek değer fonksiyona parametre olarak yazılır. Yazma işleminde bir hata ile karşılaşılmaz ise fonksiyon "0" değerini geriye döndürür.
Örnek kullanımı:
I2C1_Wr(0xA3); 

I2Cn_Stop Fonksiyonu:
Bu fonksiyon I2C iletişimini durdurur. Fonksiyon prototipi:
void I2C1_Stop(void);
Örnek kullanımı:
I2C1_Stop( );



MikroC PRO for PIC derleyicisinin I2C kütüphanesinde eeproma veri yazma ve okuma için örnek bir program bulunmaktadır. Oradaki programı inceleyebilirsiniz. Ayrıca verdiğim linkden harici eepromlar hakkında detaylı bilgi edinebilirsiniz.

Devremize ait fotoğraflar ve çalışma videosu aşağıda yer almaktadır. Projenin yazılımını vermiyorum fakat yapmak isteyen arkadaşlar verdiğim linklerden yaralanabilir. Ayrıca takıldığınız yer olursa yorum olarak yazarsanız yardımcı olurum. Başarılar dilerim...




Hiç yorum yok:

Yorum Gönder