ARDUINO ile Eski tip paralel çıkışlı EPROM’u programlamak.

Eski bir komponenti uygulamalarımızda yeniden kullanabilirmiyiz.

Tabii ki eskiden olduğu gibi devrelerimizde yer bulmaz. Çok daha uygun fiyatlı ve küçük yer kaplayan entegreler varken, Neden eski tip EPROM.
Bu eprom program cihazlarıyla kolaylıkla programlanıyor. Fakat konumuz Arduino ile programlayabilir miyiz.
Elbetteki programlayabiliriz.

Öncelikle Epromu tanıyalım. Bu tip epromlar 2 çeşit üretiliyordu.
1-) UV pencereli ( Silinebilir tip )
2-) OTP tipi ( 1 kez programlanabilir.)

UV pencere, UV ışığın geçişini sağlayarak epromun silinmesini sağlar.  Yeniden programlamak için önce silinmesi gerekir. Bu işlem uygun silme cihazlarıyla 20-30dk kadar sürmektedir. Fakat amatörseniz ve cihaz almak istemiyorsanız Güneşe bırakıp normalden çok daha uzun süre bekletirseniz yine silinecektir.

Şayet denemek için alacaksanız, pencereli olmasına dikkat edin.

Ayrıca EEPROM denilen elektrik ile silinebilen EPROMlar da üretildi. Bu yazıda örnek olarak verilen eprom entegrelerinin datasheet’lerini incelerseniz, programlamanın birbirine çok benzediğini görebileceksiniz. Sadece silme prosedürü farklıdır.

Üzerindeki kodlama ise neyi temsil eder bakalım. 27C256 buradaki 256 sayısı 256Kbit olduğunu gösterir. 1 byte 8 bit olduğuna göre 256K yı 8 bit sayısına bölersek sonuç 32K x 8 bit olacaktır.
27C256 = 256Kbit x 1 bit= 32K x 8 bit=32K x 1 byte olarak düşünebiliriz.


Biraz da nasıl programlayabileceğimize bakalım
. Aşağıdaki resimde entegrenin bacaklarını görüyorsunuz. Bu bacaklardan A ile başlayanlar adres bacaklarıdır. 15 bitlik bir adresleme vardır.
Her vereceğiniz adres 1 hafıza hücresine denk gelir ve 1 byte lık bilgi alır. 15 bit =32767 sayısına eşit olacaktır. Yani 32767  x 8bit bilgi almaktadır.
Bunun dışında Q ile başlayan pimler Giriş çıkış pimidir. Programlarken giriş, okunurken çıkış olarak devreye girer.

Vpp pimi ise programlamada devreye girer. Programlama gerilimidir. Bu gerilim epromlara göre değişebilir. En doğru bilgi datasheet te yazmaktadır. 27C256 için 13V tur. Normal çalışmada 5V programlamada ise 13V olacaktır.

VPP Kontrol Devresi : Aşağıdaki resimler kontrol pimi HIGH olduğunda ve LOW olduğundaki gerilimler. Programlama ve Normal çalışmayı gösterir.

 

Vcc ise normal çalışmada 5V tur. Programlama esnasında 6.5V tur. Yukarıdaki devre gibi kontrol edebilirsiniz.

27C256 Eprom Programlama Dalga Şekli. 

27C256 Eprom Okuma Dalga Şekli.

Bunlardan başka bazı eprom entegrelerinde PGM pimi de bulunmaktadır. Bu pim programlama pimidir. Sadece programlama prosedüründe yer alır. (27C64 Epromu bir örnektir. )

27C64 Programlama Dalga Şekli. PGM sinyaline dikkat edin. 

Ayrıca her entegrenin bir kimliği vardır. Bu da A9 piminin özel kullanımı olarak bu kimliği almamıza yarar. İstendiği taktirde devresi ayrı tutularak bu kimlik alınır. Şayet adres olarak kullanılıyorsa bu pime 13V gibi bir gerilim verileceğinden Arduinoya bağlı olan bağlantı kimlik alımı sırasında kesilmelidir.

A9 piminin kullanımı ve diğer modların kullanımı bu tabloda gösterilmektedir. İşlemi yapmak için hangi pime hangi gerilimin uygulanacağını göstermektedir. 

Bu kadar bilgiden sonra nasıl programlayacağımızı anlatmaya başlayalım. Ayrıntılı olarak videoda göreceksiniz. Videolardan biri temel okuma ve kayıt nasıl yapılır bunu gösterir.

Öncelikle Vpp devresi ve Vcc devrelerini hazırlamamız gerek. Programlama için bu şart. Bir DC gerilim yükseltici (Boost converter) devresiyle 5V tan 13V ve 6V5 üretilir. (Ya da yüksek gerilimi seçip regülatörlerle düşük gerilimleri elde edebilirsiniz. ) Çünkü okuma ve programlamada bu gerilimleri kullanacağız.
Bu gerilimleri Arduinodan kontrol edebilirdik. Yukarıdaki Vpp devresiyle, fakat yeterli pimimiz olmadığını varsayarsak videodaki gibi bir anahtar bu iş için yeterli olabilir.
Ben kolay yolu seçtim ve anahtar koydum. Programlama kısmında anahtarı çeviriyorum okuma kısmında anahtarı normal konuma alıyorum.

Temel Prensip Devresi :
Aşağıdaki resimdeki gibi sırasıyla elle girerek adres ve data bilgilerini veriyorum. Bunlar hazır olduktan sonra Vpp ve Vcc gerilimlerini programlamaya ayarlıyorum. Son olarak 27C256 için CE pimini LOW durumuna getirip bir süre bekletip tekrar HIGH durumuna getiriyorum. Bu şekilde programlama tamamlanmış oluyor.
NOT : Dikkat edin bir süre dedim. Aslında bu süre maksimum hız için belirlenmiştir.
Aşağıdaki tablo bu süreleri göstermektedir. Bu süreler maksimum hız içindir. Bu sürelerden büyük seçebilirsiniz mahsuru yok. Fakat daha küçük bir zaman seçemezsiniz. Mesela CE pimi için bu süre tPW süresidir ve 95-105us dir. Siz bundan büyük seçebilirsiniz. Fakat mümkün olduğu kadar bu sürelere riayet etmeniz işinizin kalitesini arttıracaktır.

Temel prensip devresi : Sol taraf verilecek DATA ayarlama yeridir. En sağdaki ise çıkış bilgisini LED bar ile gösterir. Alt taraftaki adres bilgi ayar yerleridir.  Bu haliyle sol taraftaki epromdan okuma yapılıyor.

27C256 Eprom Programlama dalga şekli.

Yukarıdaki programlama tablosunda CE pimini LOW –HIGH yaptıktan sonra programlama zamanı bitinceye kadar bekleyip OE pimini LOW yaparsanız DATA pimleri, o ana kadar input durumunda sizin datanızı alırken, hemen OUTPUT şekline dönerek kayıt ettiğiniz veriyi DATA pimlerine yollar siz de kaydın doğru olup olmadığını test edersiniz. ( VERIFY bölümü )

Temel prensip olarak bu şekilde hafıza hücrelerine adres vererek kayıt yapıp, okuma yapabilirsiniz.

Buradan sonrasında Arduino devremizi anlatmaya çalışacağım.
Öncelikle şunu söylemem gerekiyor. Videoda devre proteusta çalıştığı için VCC 5V , 6V5 seçimini iptal ettim. Programlama dahil vcc yi 5V ile çalıştırdım. Tabii ki proteus toleransından dolayı bunu kabul etti.
Fakat gerçek devrede 5V , 6V5 ayrımını yapmanız gerekecektir.
Bu devrede 7 segment display kullandım. 4 dijit sayı yazdırabilmek için devreyi tasarladım. Fakat Eprom hafızası çok fazla olduğundan dijit sayısını arttırabilirsiniz. Bu şekilde programlayıp sayaç olarak kullanılabildiği gibi sadece display göstergesi olarak kullanılabilir ve arduino, gönderdiği bilgi ile dijitleri ayarlayabilir.

Neden bu Epromu ve diğer komponentleri kullandık. Displayleri arduino ile direkt kontrol edebiliriz. İstersek 74HC595 ile de kontrol edebiliriz. Hatta displayleri direkt Eproma da bağlayabiliriz.  Displayin ihtiyacı olan kodu Eproma verdik mi sorunsuz yazdırabiliriz.
O zaman neden bu kadar karmaşık.
Karmaşanın sebebi:
Bazı devrelerde paralel epromun kullanılması bize ayrıcalık ve kolaylık sağlayabilir. Mesela kayan yazı devrelerinde eskiden kullanılıyordu. Tabii ki tekrar programlamak sorun olabilirdi. Pencereli epromlar yerine, EEprom dediğimiz elektrik ile silinen Epromlar kullanılması daha rahat olacak ve  tekrar programlamayı sağlayabilecektir.
Bu devreyi kurmaktaki amacım, farklı komponentleri birlikte kullanırken nasıl efektif ve tasarruflu kullanabileceğimizi de göstermek istememdir.
Mesela 7447 display sürücü entegresini kullandım. Bunu yapmamın sebebi epromun data çıkışından gelen 1 byte lık bilginin 2 x 4bit şeklinde kullanılmasını sağlamak. Yoksa her bir dijit için 1 eprom kullanmam gerekirdi. Ben de 7447 nin ihtiyacı olan 4bitlik binary girdisini Epromun düşük 4bit ya da yüksek 4 bitinden sağladım.

NOT: Nibble nedir:
En küçük birim Bit, sonrasında 8 bit birleşip 1 BYTE oluşturur, 2 Byte birleşirse de 1 WORD oluşur. NIBBLE ise 1 Byte bilginin ilk 4 bit ve ikinci 4 bit şeklinde ayrı ayrı kullanılması demektir. 8 bit saydığınızda sayı FF=255 e kadar gider. bu şekilde nibble olarak kontrol edersek F, F olarak ayrı 4 bitlik verileri temsil eder. bu şekilde kullanırken 4 bitlik maksimum 0-15 arası sayılır. Yani 255 e kadar sayı olarak görülmez. 2 adet 16 ya kadar sayma söz konusu olacaktır. Yine tek port üzerinden gönderilecektir. Fakat algılanırken 2 adet 4 bit algılanacaktır.  Bu işlemi 4 bitlik BCD kodlamasıyla karıştırmayın. O farklı bir hesaplama gerektirir. 

Bu şekilde yapmakla, maliyet açısından tasarruf etmiş oldum. Her display’e 1 eprom yerine 2 adet 7447 almış oldum. 2 tane 7447 entegre 8TL 1 Eprom ise 16TL  bu şekilde devrelerinizde sadeleştirmeler yapıp maliyet düşürebilirsiniz.

Bu kullanımların yanı sıra Epromun paralel çıkışı hızı artıracaktır. Bunun yerine seri paralel çevirici kullanılırsa bir byte bilginin paralel çıkışa gelmesi 8 döngünün kullanılmasını gerektirir. Paralel devrelerde ise tek döngüde 1 byte lık bilgi kullanılabilir. Seri paralel çeviricilerde normal kullanımın en az 8 katı hızında çalışmak gerekir ki aynı hızda veri alınabilsin.

Arduino programında nasıl bir algoritma var derseniz, onu da açıklamaya çalışayım.
VCC anahtarında bir OKU ucu var. Arduino A0 girişine bağlanan bu uç ile arduino okuma alt programına mı yoksa programlama alt programına mı gideceğini anlayacaktır. Okuma yapacaksa yukarıdaki grafikteki gibi adresi ayarlar, sonrasında CE yi ayarlar ve sonrasında OE yi ayarlayarak bilgiyi data uçlarına çıkarır. İstediğiniz süre kadar bekleyip adresi 1 arttırarak bu işlemlere devam eder. Okuma Grafiğindeki durumun aynısını simüle eder.
Programlama kısmında ise yine programlama grafiğinde olduğu gibi adresi yazar, data bilgisini data girişine uygular ve sonrasında CE pimini ayarlar. Her epromun CE girişi farklı olduğundan aynı datayı alsalar bile aynı adresi alsalar bile CE arduino programı ile kontrol edilip eprom seçimi yapılır.
Belki bir çok arduino kullanıcısı bu çalışmayı bilmiyordur. Burada DATA bağlantısı için PORTD kullanıldı. Digitalwrite kullanılmadı. Tek tek pim ayarı yerine bu şekilde kullanarak tüm bilginin, PORTD ye bir seferde yazması sağlandı. Bu özellik arduinoda daha hızlı çalışmayı sağlar.
Ayrıca pimleri tek tek değiştirirken bazen dış devre farklı bir komut ya da data gibi algılayabilir. Bundan dolayı 8 bit =1 byte lıkbilgi çıkışa aktarılacaksa bu tip bir komut kullanmanız yerinde olur.

Arduino ile Eprom Programlama ve Okuma devresi.
Program dosyalarını buradan alabilirsiniz. 

Konu hakkında düşüncelerinizi YORUM kısmına bırakır mısınız. 

 

 

 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir