SD KART ÜZERİNDE HAVA BASINCI VERİLERİNİ SAKLAYAN PIC MİKROKONTROLÖR PROJESİ
Prof. Dr. Doğan İbrahim
Yakın Doğu Üniversitesi, Mühendislik Fakültesi, Bilgisayar Mühendisliği Bölümü, Lefkoşa, KKTC E-mail: dogan@neu.edu.tr
1. GİRİŞ
SD Memory Card (Secure Digital Memory Card), Türkçesi ‘Güvenli Sayısal Hafıza Kartı’ anlamına gelmektedir. İlk olarak SanDisk [1] tarafından 2001’li yıllarda ortaya çıkan bu kartlar MMC (Multimedya Kart) kartların bir gelişmiş şekli olarak da düşünülebilir.
SD kartlar günümüzde birçok elektronik cihazlarda kullanılmaktadırlar. Örneğin, cep telefonlarında, sayısal kameralarda, MP3 çalanlarda, GPS alıcılarında, PDAlar- da, ve daha bunlar gibi birçok elektronik cihazlarda SD hafıza kartlarını görmemiz mümkündür. Hafıza kartı olarak kullanılan diğer kartlar şunlardır: SM (“Smart Media”), CF (“Compact Flash”), MMC (“Multi Media”), ve MS (“Memory Stick”).
Bu yazımızda PIC18F452 modeli bir mikrokontrolöre SD kart bağlantısının nasıl yapılacağı açıklanmaktadır.
Projede PIC mikrokontrolör bir hava basıncı sensörü sayesinde basıncı algılayıp okumuş olduğu basınç ver- ilerini her saniye bir SD kart üzerinde saklamaktadır.
Projede mikrokontrolör yazılımı MikroElektronika firmasının [2] geliştirmiş olduğu mikroBasic derleyici kullanılarak yapılmıştır.
2. SD KARTLAR
Şekil 1 de resmi gösterilen standart SD kartlar içerisinde mikroişlemci, hafıza, ve giriş-çıkış devreleri bulunmaktadır. 32mm x 24mm x 2.1mm ebatlarında olan SD kartların 16MB, 32MB, 64MB, 128MB, 256MB, 512MB, 1GB, 2GB ve 4GB kapasiteli çeşitleri bulunmaktadır.
Sonraları, daha küçük cihazlarda kullanılmak için miniSD kartlar geliştirilmiştir. Bu kartların boyutları standard SD kartın yarısı kadar olup 20mm x 21.5mm x 1.4mm ölçülerindedirler. miniSD kartlar genellikle 32MB ce 2GB arasında bir kapasitede üretilmektedirler. MiniSD kartları adapterler sayesinde standart SD soketlerinde kullanmak mümkündür.
2005 yıllarında teknolojinin gelişmesiyle daha küçük boyutlu hafıza kartlarına olan ilgi artmıştır. Bu yıllarda mikroSD kartlar üretilmiştir. Boyutları sadece 11mm x 15mm x 1mm olan mikroSD kartlar 32MB ve 2GB arasında bir kapasitede üretilmektedirler. mikroSD kartları adapterler
sayesinde miniSD ve standart SD soketlerinde kullanmak mümkündür.
SD kartlar yaklaşık 2MB/s veri aktarımı yapabilmektedirler. Veri transfer hızı genellikle standard CDROM okuma hızı baz alınarak verilmektedir. 1x olarak da bilinen standart CDROM hızı yaklaşık 150kB/s dir. Bu durumda, 32x diye satılan bir SD kartın hızı 32x150 = 4,8MB/s kadardır.SD kartlar 9 bacaklıdır.
Şekil 2 de standart bir SD kartın bacak bağlantıları gösterilmiştir. Şekilden de görüleceği gibi kolay tanınması için 9 nolu bacak diğerlerinden daha aşağıdadır.
Tablo 1 de SD kartın bacak bağlantıları açıklanmıştır. SD kartlar iki modda çalışmaktadır: SD kart modu, ve SPI (Seri Arayüz Bus modu). Genellikle daha kolay olduğu için birçok projelerde kart SPI modunda kullanılmaktadır. Bu modda kullanıldığında sadece aşağıdaki 7 bacağa gerek olmaktadır:
Tablo 1 SD kart bacak bağlantıları
Bacak İsim SPI Modu
1 CD/DAT3/CS Çip seç
2 CMD/Datain Dışarıdan karta
veri
3 VSS Toprak
4 VDD Güç Kaynağı
5 CLK Saat
6 VSS2 Toprak
7 DAT0 Kartdan dışarı-
ya verir
8 DAT1 Kullanılmaz
9 DAT2 Kullanılmaz
1 2 3 4 5 6 7 8 9
Önsöz Duyurular Makale PIC Mikrokontrolör
Projesi Sempozyum EMO Hakkında Eğlence Seminer Gezi Yeni Üyeler
• 2 tane toprak (bacak 3 ve 6)
• Güç kaynağı (bacak 4)
• Çipi seç (bacak 1)
• Çıkış (bacak 7)
• Giriş (bacak 2)
• Saat (bacak 5)
Burada 3 tane bacağın güç kaynağı ve toprak için kullanıldığı göz önünde bulundurulursa veri alış-verişi için sadece aşağıdaki 4 bacağın kullanıldığını görürüz:
• Çipi seç (bacak 1)
• Çıkış (bacak 7)
• Giriş (bacak 2)
• Saat (bacak 5)
Karta güç kaynağı bağlandığında ilk olarak kart SD modunda çalışmaktadır. Daha sonra karta gönderilen komutlar sayesinde kart SPI moduna geçirilmektedir. mikroC derleyici kartı SD moduna koyup çalıştırmaktadır.
Tablo 2 de bazı SD kartların kapasiteleri verilmiştir:
Tablo 2 SD kart kapasiteleri
Model Kapasite
SDSDB-16 16Mb
SDSB-32 32Mb
SDSJ-64 64Mb
SDSDJ-128 128Mb
SDSDJ-256 256Mb
SDSDJ-512 512Mb
SDSDJ-1024 1024Mb
Kart üzerinde bir bölüm güvenli veri saklamak için ayrılmıştır. Bu bölüm göz önünde bulundurulursa, kullanıcının yazıp okuyabileceği bölüm Tablo 3 de gösterildiği gibidir. Örneğin, 1GB SD kart üzerinde 20,480 güvenli sektör ve kullanıcının yazıp okuyabileceği 1,983,744 sektör bulunmaktadır. Kullanıcı bu sektörlerin herhangi birine veri yazıp okuyabilir (1 sektör = 512 bayt).
Tablo 3 SD kart sektör alanları
Model Güvenli Alan
(Sektör) Kullanıcı Alanı (Sektör)
SDSDB-16 352 28.800
SDSDB-32 736 59,776
SDSDJ-64 1,376 121,856
SDSDJ-128 2,624 246,016
SDSDJ-256 5,376 494,080
SDSDJ-512 10,240 940,864
SDSDJ-1024 20,480 1,983,744
SD kartlar tipik olarak 2.7V gerilim ile çalışmaktadırlar. Karta verebileceğimiz maksimum gerilim 3.6V geçmemelidir. Eğer kart mevcut 5V ile çalıştırılacaksa gerilimi 5V dan 2.7V – 3.6V düşüren regülatör devresi kullanmamız gerekmektedir.
3. SD KART MIKROBASIC KOMUTLARI
MikroBasic PIC derleyicisinin SD kartlara yazıp okumak için birçok özel fonksiyonları bulunmaktadır.
Bu fonksiyonlar sayesinde SD kartlar üzerinde dosyalar yaratabilir ve veri saklayabiliriz. SD kart fonksiyonları sadece PIC18 serisi mikrokontrolörler için yazılmıştır (PIC16 serisi için bu fonksiyonları kullanamayız)
Önemli olan mikroBasic SD kart fonksiyonları Tablo 4 de verilmiştir. Bu fonksiyonları iki bölüme ayırabiliriz: Direk olarak SD kart sektörlerine veri yazıp okumak için kullanılan fonksiyonlar (ilk 3 fonksiyon), ve SD kart üzerinde dosya yaratıp bu dosyaya veri yazıp okuyan fonksiyonlar.
SD kartın herhangibir sektörüne veri yazıp okumak için şu işlemleri yapmalıyız:
• Kartı hazırla (Mmc_Init)
• Kartın istenilen sektörüne veri yaz (Mmc_Write_
Sector)
• Kartın istenilen sektöründen veri oku (Mmc_Read_
Sector)
Yukarıdaki işlemlere ilaveten, kart üzerinde olan bir dosyaya veri ilave etmek istediğimizde şu işlemleri yapmalıyız:
• Kartı Hazırla (Mmc_Fat_Init)
• Dosya ismini tanımla (Mmc_Fat_Assign)
• Dosyanın sonuna git (Mmc_Fat_Append)
• Dosyaya veri yaz (Mmc_Fat_Write) Mmc_Fat_Assign fonksiyonu ile dosya ismini tanımlarken, dosya ismi büyük harf, 8 karakterli olmalı, ve 3 karakter dosya uzantısı verilmelidir. Dosya ismi ve uzantısı arasında nokta kullanmamalıyız. Dosya isminden sonra argüman olarak 0x80 kullanırsak yeni dosya yaratılir, aksi halde yeni dosya yaratılmaz (daha fazla bilgi için mikroBasic kullanım kılavuzuna bakınız).
MikroBasic SD kart fonksiyonlarını kullanmazdan önce ilk olarak kartı SPI moduna koymamız gerekmektedir. Bunun için ise programımızın başında aşağıdaki fonksiyonu olduğu gibi çağırmamız gerekmektedir:
Spi_Init_Advanced(MASTER_OSC_DIV16, DATA_SAMPLE_MIDDLE,
CLK_IDLE_LOW, LOW_2_HIGH)
Tablo 4 : Önemli mikroBasic SD kart fonksiyonları
Komut Tanımı
Mmc_Inıt Fonksiyonları BAşlat
Mmc_Read_Sector 1 Sektör Oku Mmc_Write_Sector 1Sektöre Yaz Mmc_Fat_Init FAT dosya sistemini
başlat
Mmc_Fat_QuickFormat Kartı format yap Mms_Fat_Assign Dosya ismini belirt Mmc_Fat_Reset Dosyanın başına git Mmc_ Fat_Rewrite Dosyanın başına git ve
doyayı temizle Mmc_Fat_Append Dosyanın sonuna git Mmc_Fat_Read Dosyadan veri oku Mmc_Fat_Write Dosyaya veri yaz
4. PIC SD KART PROJESİ
Projenin blok şeması Şekil 3 de verilmiştir. Pro- jenin elektronik devresi ise Şekil 4 de görülebilir.
Projede PIC18F452 modeli bir mikrokontrolör [3]
kullanılmıştır. Projede PIC18 serisinden PIC18F452 dışında başka herhangibir mikrokontrolör
kullanmamız mümkündür. Mikrokontrolör 4MHz rezonatör ile çalıştırılmıştır, fakat arzu edilirse kristal de kullanılabilir. Mikrokontrolörün AN0 analog bacağı MPX4115A modeli [4] bir hava basıncı sen- sörüne bağlanmıştır. Bu sensör aşağıda gösterildiği gibi 6 veya 8 bacaklı olabilir:
6 bacaklı sensör
Bacak Tanım
1 Çıkış gerilimi
2 Toprak
3 +5V gerilim
4-6 Kullanılmaz 8 bacaklı sensör
Bacak Tanım
1 Kullanılmaz
2 +5V gerilim
3 Toprak
4 Çıkış gerilimi 5-8 Kullanılmaz
Şekil 3. Projenin blok şema
Basınç Sensörü
Mikro
Kontrolör SD Kart
Şekil 4. Projenin elektronik devresi
SD KART ÜZERİNDE HAVA BASINCI VERİLERİNİ
SAKLAYAN PIC MİKROKONTROLÖR PROJESİ
İçindekiler Önsöz Duyurular Makale PIC Mikrokontrolör
Projesi Sempozyum EMO Hakkında Eğlence Seminer Gezi Yeni Üyeler Vefat
Sensör Şekil 5 de gösterilmiştir.
Şekil 5. MPX4115A basınç sensörü
MPX4115A hava basıncı sensörünün çıkış gerilimi şu formül ile verilmektedir:
) 095 . 0
* 009 . 0 (
* 0 .
5 −
= kPa
V veya,
0.009
095 . 0 0 .
5 +
= V kPa burada,
kPa = Atmosferik basınç (Kilo Pascals)
V = Sensörün çıkış gerilimi (V)
Hava basıncı ölçümlerinde genellikle milibar birimi kullanılmaktadır. Deniz seviyesinde ve 15ºC sıcaklıkta hava basıncı 1013.3 milibardır. Yukarıdaki formülde basınç kPa olarak verilmiştir. kPa basınç birimini milibar basınç birimine dönüştürmek için formülü 10 ile çarpmamız gerekmektedir:
0.009
095 . 0 0 . 10 5
+
= V x mb veya,
009 . 0
95 . 0 0 .
2 +
= V
mb
Şekil 6 da MPX4115A sensor gerilim çıkışının basınç ile değişimi gösterilmiştir. Burada bizim ilgimizi çeken bölgeler basıncın 800 – 1000 milibar arasında olduğu bölgelerdir.
Hava basıncını milibar olarak okuyup kart üzerinde saklamak için gerekli işlemler şunlardır:
• Mikrokontrolörün analog giriş portlarından birini kullanarak analog basıncı 10 bitlik bir dijital sayı olarak oku.
0 1 2 3 4 5
200 300 400 500 600 700 800 900 100 0
110 0 M illib a r s
Volts
Şekil 6 MPX4115A hava basıncı – gerilim değişimi
• Formülü kullanarak okunmuş olan gerilimi milibar biriminden basınca dönüştür.
• Basıncı SD kart üzerindeki dosyaya yaz.
SD kart mikrokontrolörü PORT C bacaklarına şu şekilde bağlanmıştır:
Çip seç RC2
Saat RC3
Çıkış RC4
Giriş RC5
SD kart giriş bacaklarındaki maksimum gerilimin 3.6V geçmemesi gerekmektedir. Bunun için çıkışı +5V olan mikrokontrolör bacaklarındaki gerilim 3.3K ve 2.2K gerilim bölücü dirençler kullanılarak +3V a düşürülmüştür.
Projede SD karta gerilim sağlamak için MC33269 DT-3.3 modeli [5] ve +5V gerilimi +3.3V a düşüren regülatör kullanılmıştır.
Projenin yazılımı Şekil 7 de verilmiştir. Ana programın başında AN0 bacağı giriş olarak tanımlanmış ve A/D çevirici konfigür yapılmıştır. Daha sonra Spi_Init_
Advanced fonksiyonu çağrılarak kart SPI çalışma moduna konmuştur. mikroBasic SD kart dosya kullanan fonksiyonları kullanmazdan önce Mmc_
Fat_Init fonksiyonuna çağırmamız gerekmektedir.
SD kart üzerinde dosya yaratmak için Mmc_Fat_
Assign fonksiyonunu kullandık ve Mmc_Fat_Rewrite fonksiyonu ile dosyanın başına gidip Mmc_Fat_Write fonksiyonu il şu başlığı yazdık: BASINÇ VERILERI.
Ana program esas olarak sonsuz bir döngü içerisinde çalışmaktadır.
SD KART UZERINDE HAVA BASINCI VERILERINI SAKLA
Bu projede PIC18F452 modeli bir mikrokontrolor kullanilmistir.
Mikrokontrolorun PORT C bacaklarina bir SD kart su sekilde baglanmistir:
Kart CS - RC2 Kart CLK - RC3 Kart DO - RC4 Kart DI - RC5
Ayni zamanda mikrokontrolorun AN0 analog giris bacagina MPX4115A modeli
bir hava basinci sensoru baglanmistir.
Program kart uzerinde “BASINC.TXT” isimli yeni bir dosya açar ve her 15 saniyede bir sicaklik ve hava basinci verilerini bu dosyalarda saklar.
Dosya: BASINC.PBP Tarih: Ocak 2007 Programlayan: Doğan Ibrahim program BASINC
Hava basincini AN0 analog portdan oku ve Veri degiskeninde sakla.
Veri degiskeni basinci milibar olarak saklar sub function Basinc_Oku() as Word DIM Veri as Longint
Dim Temp as word
Temp = Adc_Read(0) Basinci oku Veri = Longint(Temp)*10000/1024
‘ Volt’a donustur
Veri = Veri + 950
Veri = Veri / 9 Result = Word(Veri) Basinc
end sub main:
DIM basinc as Word DIM Stat as Byte
DIM Basinclik as String[5]
DIM BBaslik as String[80]
DIM YeniSatir as Byte[1]
TRISA = 0x01 AN0 bacagi giris ADCON1 = 0x8E
A/D ceviriciyi hazirla
YeniSatir[0] = chr(10)
BBaslik = “BASINC VERILERI” + chr(10)
SPI bus baslat
Spi_Init_Advanced(MASTER_OSC_DIV16,DATA_
SAMPLE_MIDDLE,
CLK_IDLE_LOW,LOW_2_HIGH) SD karti dosyalama islemi icin hazirla Stat = Mmc_Fat_Init(PORTC, 2)
Basinc Dosya ismini belirt, dosyanin basina git ve baslik yaz
Stat = Mmc_Fat_Assign(“BASINC.TXT”, 0x80) Mmc_Fat_Rewrite()
Mmc_Fat_Write(BBaslik,16)
Tekrar:
‘ Basinci oku ve acilmis olan dosyaya yaz basinc = Basinc_Oku()
‘ Basinci oku
WordToStr(basinc,Basinclik)
İçindekiler Önsöz Duyurular Makale PIC Mikrokontrolör
Projesi Sempozyum EMO Hakkında Eğlence Seminer Gezi Yeni Üyeler Vefat
Karaktere donustur
Mmc_Fat_Assign(“BASINC.TXT”, 0x80)
‘ Dosyayi belirt Mmc_Fat_Append()
Mmc_Fat_Write(Basinclik, 5) Basinci karta yaz
Mmc_Fat_Append()
Mmc_Fat_Write(Yenisatir, 1) Yeni satir yaz
Delay_Ms(15000)
‘ 15 saniye bekle
Goto Tekrar
‘ Tekrarla End.
Şekil 7. Projenin yazılımı
Basınc_oku fonksiyonu AN0 portundan basıncı okur ve sayısala dönüştürür. 10-bit analog-sayısal çevirici kullanıldığı için sayısala çevirilen sayı 0 ve 1023 arasında herhangibir değer alabilir (toplam 1024 değer). +5V referans gerilimi 1024 adım olarak gösterildiği için, okunmuş olan sayısal değeri Volt olarak gerçek gerilime dönüştürmek için 5/1024 ile çarpmamız gerekmektedir. Bu elde ettiğimiz Volt değeri daha önce verilen formülde gösterildiği gibi 2 ile çarpıp 0.95 ilave etmemiz ve sonra da 0.009 a bölmemiz gerekmektedir. Kısacası, basıncı gerçek milibar olarak hesaplamak için, eğer elde ettiğimiz sayısal sayı Temp ise yapmak istediğimiz işlem şudur:
milibar = ( 2 * Temp * (5/1024) + 0.95 ) / 0.009 veya,
milibar = ( 10* Temp /1024 + 0.95 ) / 0.009
Kesirli işlemleri ortadan kaldırmak için pay ve paydayı 1000 ile çerparsak,
milibar = ( 10000 * Temp /1024 + 950) / 9 Basınc_Oku fonksiyonunda yukarıdaki işlem yapılıp hava basıncı değeri elde edilmektedir.
Programda yazmak istediğimiz dosya adını Mmc_Fat_
Assign alt-programı ile belirtmemiz gerekmektedir.
Şekil 8 de BASINC.TXT dosyasının WORD programı ile açılımı gösterilmiştir.
Şekil 8. SD kart üzerindeki BASINC.TXT dosyasının Word ile açılımı
5. SONUÇ
Bu yazımızda SD hafıza kartlarının PIC
mıkrokontrolör tabanlı sistemlerde kullanımlarına bir göz attık. Yazımızda hava basinci yarı-iletken bir basinç sensörü ile algılanır ve milibara dönüştürülüp her 15 saniyede bir SD kart üzerindeki bir dosyada saklanır. Yazımızda PIC18 modeli bir mikrokontrolör ve mikroBasic derleyici kulalnılmıştır.
SD kartlar boyutlarının küçük ve yüksek kapasitelerinden dolayı portabıl cihazlarda veri saklamak için ideal bir yapıya sahiptirler. SD kartların kapasiteleri hemen her yıl artmaktadır.
Halen piyasada 4GB kapasiteli kartlar mevcuttur.
Bu yazımızda prensipleri verilmiş ve tasarımı yapılmış olan SD kart sistemi geliştirilip çok daha kompleks SD kart sistemleri kurmak mümkündür.
6. KAYNAKÇA
1. www.sandisk.com
2. www.mikroelektronika.com 3. www.microchip.com 4. www.motorola.com
5. www.proactivecomponents.com 6. D. Ibrahim, “PIC Mikrokontrolör SD Kart Projeleri”
Bileşim Yayıncılık ve Fuarcılık A.Ş., 2008, www.bilesim.com.tr