Eprom okuma yazma yardım...

Başlatan alien876, 06 Ekim 2013, 22:55:39

alien876

Herkese merhaba
Ete hocam senin derslerin ve yardımların sayesinde azda olsa pic programlamayı öğrendim şimdi bir konuda daha yardımınıza ihtiyacım var 12f675 ve 24c32 kullanarak taşınabilir eprom programlayıcı devre yapmaya çalışıyorum takıldığım nokta adresleme kısmını doğru yapıp yapamadığım kodları inceleyebilirseniz sevinirim birde örneğin 24c512 kullanarak içine birkaç farklı epromun dosyalarını atıp her dosya için bir butona basarak takılan eproma dosyayı yazdırma şansı varmı eğer varsa anlatabilirmisin

DEFINE OSCCAL_1K 1 
DEFINE OSC 4

ANSEL = 0   
CMCON = 7   
OPTION_REG.7 = 0 

cont  con %10100000 '$A0

addr  var word
overi var byte
yveri var byte

cnt   var word


ilk:
     IF GPIO.3=1 THEN BASLA
     PAUSE 50
     goto ilk
BASLA:

    for cnt = 0 to 4095
        addr = cnt
        i2cread GPIO.1,GPIO.0,cont,addr,[overi]
        pause 10
        yveri = overi
        i2cwrite GPIO.5,GPIO.4,cont,addr,[yveri]
        pause 10
        TOGGLE GPIO.2 
    next
    HIGH GPIO.2
    PAUSE 100
GOTO ilk 

ete

#1
Öncelikle devre şemasından başlayalım.
Birincisi I2C çalışan epromlarda DATA ve CLK hatlarına pullup direnci bağlaman gerekir.
İkinci mesele de şayet hep 24C32 (veya 24LC32) programlayacak isen epromları aynı hatta bağlayabilirsin.
Verdiğin şemadaki şekilde de olur dediğim gibi aynı hatta da bağlama imkanın var. Aynı hatta toplamda 8 adet eprom bağlanabilir. Entegre üzerindeki A0-A1 ve A2 pinleri bu fazladan bağlanan entegrelerin adreslenmesinde kullanılır.

Programda bir kusur göremedim. Bu hali ile çalışır. Ancak eksikleri var.
Birincisi sigorta ayarların eksik
ikincisi TRISIO=0:GPIO=0 şeklinde iki komutu ilave etmen uygun olur
Üçüncüsü hangi işlemci olurs aolsun program b aşlamadan evvel mutlaka en azından 200 ms lik bir gecikme verilmelidir.
Bu gecikme işlemci registerlerinin yerli yerine yerleştirilmesi amacını taşır. Dolayısıyla programa ILK satırından evvel ,
PAUSE 200 şeklinde bir komut ilave etmen uygun olur.

Epromlar bildiğin üzere farklı boyutlarda imal ediliyorlar. Bu nedenle programına bütün epromların özelliklerini girmen gerekiyor. Özellik derken max. adres değerlerini girmek lazım gelir. Bu şekilde akıllı bir programla ;
-Master yani kopyalanacak eprom cinsini sorarak bir lookup tablosundan max. adresi tespitedersin ve o adrese göre döngü kurarsın.
- Yazılacak eprom cinsini sorarak yine aynı lookup tablosundan max adresini tespit edersin.
Hangi adres daha küçük ise bütün döngüler o değer üzerinden kurulur ve okuma - yazma işlemi bu esasa göre yapılabilir.

24LC16B kodlu eproma dikkat etmek gerek. Bu eprom da ayrıca blok adresi verilmesi zorunluluğu vardır. Hafıza adresi 8 bitlik dir. Zira eprom 8 x 256 byte lık ve toplamda 2Kbyte lık bir hafızaya sahiptir. Max adres 255 olmasına rağmen blok seçilerek toplamda 2048 byte kullanılmaktadır.

Ete


alien876

#2
Ete hocam verdiğin cevaplar ve tavsiyeler için çok teşekkür ederim lookup komutunun kullanımını henüz bilmiyorum öğrenmeye çalışıcam bana tavsiye edebileceğiniz daha kolay bir yol varmı benim asıl yapmak istediğim biraz daha farklı işyerinde sürekli bilgisayardan yazdığım 9 tane eprom var yapmak istediğim kullandığım bu eprom dosyalarını 24c512 içine atıp 9 tanede buton koyup 1. butona bastığımda 0-4095 arasındaki veriyi taktığım eproma yazması 2. bastığımda 4095-8191 arasasındakini vs.. (epromlar farklı boyutlarda24c02'den 24lc65'e kadar değişiyor) bu şekilde birşey yapmak istiyorum sanırım sizin bahsettiğiniz farklı boyuttaki (kopyalanacak olan epromlar aynı) epromları takınca otomatik olarak algılayıp kopyalaması için bu devreyi bitirebilirsem bahsettiğiniz devreyi yapmaya çalışıcam.

ete

Bahsini ettiğin iş görünürde kolay. Ancak epromların başlama ve bitiş adreslerini bilemez isen iş çorbaya döner. Bazı bilgileri kayda alırsan işin kolaylaşır. Bunlar.
1- kaç kayıt var
2- ilk kayıt nerden başlıyor nerede bitiyor
3- ikinci kayıt nereden başlıyor nerede bitiyor
4- x kayıt nereden başlıyor nerede bitiyor.
Bunlar kopyalama yaparken işine yarayacak.
Peki 512 ye kayıt yaparken nasıl yapacaksın ? Doğru bir şey yapabilmen için önce okunacak eprumu belirlemen gerekmezmi. Nasıl belirleyeceksin. Ya cinsini bildiğin için sabit bir adres aralığı alacaksın yada program sana soracak hangi eprom diye. Sordu ve cevapladın cevaba göre onun parametrelerini bir şekilde bir yerden bulup okuma döngüsünü parametreye göre kurman gerekir. Aynı parametre sana 512 deki kayıt aralığınıda belirleyecek olup o bilgiyi saklayacaksın. Bu işin en kokay yolu lookup tablosudur.
Ete

Hattuşa

slm ete hocam;
hocam hesapsız kitapsız bir işe başlayıp sonradan tırmalamak iyimidir bilmiyorum ama ben memnun değilim. hocam şöyle bir sorunum var. bir devremde ölçümler alıp bu ölçümlerden word tipi bir değişken elde ettim. kurduğum devreme harici eproom entegresi eklemedim (çok akıllıyım ya  >:(
şimdi yaptığım ölçüm adedi 82 adet word tipi değişken ve bu değişkenleri eproma kayıt etmem gerekiyor. bu şekilde 82 adetlik verilerimden kaç tane ekleyebilirim.
kullandığım entegre 18F4520 ve datasheeette yazan yerde takıldım. SRAM yazan yerde 1536 var, EEPROM yazan yerde de 256
hangisini kkullanacağım. cahil cesur olur sözüyle ben

for x =0 to 164 step 2

ewrite x,deger[x]
delayms 50
next


diyerek 1 tanesini yazdım. diyelim. 2. yi yazmak için

for x =166 to 330 step 2

ewrite x,deger[x]
delayms 50
next


diyerek devam mı etmeliyim. ve bu nereye kadar ilerleyebilirim. 10 senedir kod yazıyoruz ama hala eksiklerimiz var. sanırım öğrenme denen şey ihtiyactan kaynaklı bişey zira bu tip bir çalışma daha önceden yapmamıştım.

hocam bu konuda biraz bilgi verebilirmisiniz.


ete

Kullandığın işlemcinin 256 (0-255) adet byte alabilen bir epromu mevcut. Bu eproma sürekli word tpi değişken kayıt edeceksen 128 adet word değişkeni alabilir.
Ete

Hattuşa

Alıntı yapılan: ete - 15 Ocak 2016, 12:20:07
Kullandığın işlemcinin 256 (0-255) adet byte alabilen bir epromu mevcut. Bu eproma sürekli word tpi değişken kayıt edeceksen 128 adet word değişkeni alabilir.
Ete


ete hocam;
verdiğim resimdeki data memory kısmındaki "SRAM" kısmının işlevi nedir?

ete

Bildiğim kadarı ile Statik Ram oluyor ve programdaki data hafızasını oluşturuyor. Bir nevi değişkenlerin kayıt edildiği hafızadır. Biliyorsun program Flash ram oluyor. Bir kere yazdınmı elektriği kessende silinmiyor. Sram elektrik olduğu müddetçe bilgiyi tutuyor elektrik kesilince siliniyor. Eprom da kalıcı bir hafıza. Gördüğün gibi Pic içinde 3 çeşit hafıza bulunuyor.

Ete

Powered by EzPortal