18F452 ile SD kart okuyucu
Değerli ANTRAK Gazetesi okurları. Bu ay sizlere Microchip firmasının farklı bir denetleyicisinden bahsedeceğiz ve bu denetleyici ile güzel bir proje çalışması yapacağız.
Denetleyicimiz Microchip firmasının 18F452 entegresi. Pin yapısıyla birebir 16F877’ye benzemekte fakat iç mimami olarak çok ama çok farklı. Çok diyorum çünkü 16FXX-X ailesinden oldukça farkı. Örneğin 16FXX-X serisinde stack derinliği 8 bittir. Stack değiştirilemez ve hangi stack derinliğinde olduğumuzu bilemeyiz. Ve çoğu zaman taşmalara; dolayısıyla programın başka yerlere dallanmasına neden olur. Dolağ olarak bu da programın yanlış çalışmasına sebep olur. Gelelim 18F452 entegresine. Datasheetini inceleyecek olursanız stack derinliğinin 32 bit olduğunu görürsünüz. Aynı zamanda stack pointer ile oynayarak stack pointerin bulunduğu derinliği değiştirebilirsiz. Yani istediğiniz zaman stack değeri ve derinliği ile oynayabilirsiniz. Stack pointeri okuyarak stackta taşma olup olmadını ve hangi derinlikte olduğunuzu öğrenebilirsiniz. Ayrıca stack taşmaları için özel bir kesmesi de bulunmaktadır. Stack üzerinde duruyorum, çünkü bu denetleyiciyi 16FXX-X serisinden ayıran en önemli özelliklerinden birisi bu. Başka ne işe yarıyor bu stack. 18F452 nin her bir stack katmanı PIC’in program hafızasını adresleyebilecek şekilde tasarlanmış. Bu da demek oluyorki 16F877 deki gibi her sayfalar arası geçiş yapmamıza gerek kalmıyor. Mesela Page0’dan Page1’deki bir alt programı çağırmadan önce sayfa numarasını belirtmemize gerek kalmıyor. Direk alt programın etiketini yazarak alt programa dallanıyoruz ve call ile çağırmışsak return komutuyla hangi sayfada olursak olalım geri dönebiliyoruz. 16F877 ye program yazan arkadaşlarımız varsa bilirler. Sayfa değiştirmeler programda yer kaplar ve karışıklığa sebep olur.
Gelelim kullanıcıya ayrılmış boş registerlere. Doğrudan veya dolaylı olarak ulaşabileceğimiz 1,5 kilobayta yakın ram hafızaya sahip ve bir bütün halinde. 16F877 de olduğu gibi parça parça değil. Bu da bizim için büyük avantaj. PIC’e ulaşmamızı sağlayan registerler(SFR-Special Function Register) ile kullanıcıya ayrılan registerler ayrı tutulmuş. Ayrıca özel fonksiyon registerlerine ulaşmak için bank değiştirmenize de gerek yok. Artık Bank1’e geçip portları giriş veya çıkış olarak ayarlamayacaksınız. Bir nevi bank kavramıda ortadan kaldırılmış. PLL desteği sayesinde program ile bağladığınız 20 MHz kristal frekansınızı katlayarak denetleyicimizi 40 Mhz hızda çalıştırabilmektedir.
Bunlara ek olarak çarpma, büyüklük-küçüklük karşılaştırma ve birçok yararlı indirgenmiş komutları var. 16F877’de birkaç satırda yazptırdığınız işlemi tek komutla yapmayı mümkün kılıyor. Tablo okuma komutları sayesinde programınızdaki istediğiniz kısımları denetleyici çalışırken okuyumanız veya silip değiştirmeniz mümkün. Yani kendini rahat bir şekilde ortama adapte olan yazılımlar yapabilirsiniz. Bu denetleyiciyle yapabilecekleriniz hayal gücüyle sınırlı. Gelecek aylardaki sayılarda 18F452’nin komutlarını işleyeceğiz. İlgilenen arkadaşlar bana emind25@hotmail.com adresinden ulaşabilirler.
Proje olarak cep telefonları içinde bulunan SD kartlara yazma ve okuma yapan programın açık kodlarını ve devre şemasını gönderiyorum. Bağlantıları doğru yaparsanız sorunsuz çalışıyor. Okuma ve yazma kısımlarını değiştirerek dilediğiniz yerde kullanabilirsiniz.
Ön bilgi olarak size SD kartların genel özelliklerinden bahsetmek istiyorum. Çalışma voltajları 2,7 volt ile 3,6 volt arasıdır. Besleme voltajı muhakkak bu değerler arasında olmalıdır. Tabi doğal olarakta veri uçlarına gelen voltajında bu değerler arasında olması lazım. SD kartımızda aşağıdaki şekillerde olduğu gibi data input- data output-chip select- clock pulse ve besleme uçları bulunur. Ben devrede 2,7 volt kullandım. Şekilden de anlaşılacağı gibi besleme kaynağı olarak 3V bir zener diyot ve BD139 transistörden oluşan bi devre kullandım. Veri uçlarının volyaj ayarlamasını ise pic ile toprak arasına bağladığım 5K lık potansiyometre ile yaptım. Potansın ayar ucundan çıkan voltajı 2,7V ile 3V arası bi değere ayarlayın. Kart okuyucu bağlantısı için de flopy kablosu üzerinde bulunan eski disket sürücüler için konulmuş olan konnektörü düzgünce keserek kullanabilirsini. SD kart bu sokete düzgün takıldığında pinler birbirini karşılamaktadır. Geriye sadece devreyi kurmak ve hayal gücünüzü kullanmak kalıyor. Programlayıcı olarak 16F877 yi programladığınız programlayıcıları kullanabilirsiniz. Tüm ANTRAK gazetesi okurlarına iyi çalışmalar diliyorum. Gelecek ay 18f452 komutları ve farklı bi proje ile görüşmek üzere.
Emin Demir
emind25@hotmail.com