16F877 ve eeprom okumak

Başlatan AKP, 12 Eylül 2009, 17:53:17

AKP

24C512'yi okumada problem yaşıyorum.

ADCON1=7
trisd=0 : portd=0

ADRS var byte   'ADRES
veri var BYTE
SDA var portc.4  'data
CLK var portc.3  'clock
CONTROL_BYTE con %10100000 'a0 ve a1 kullanılmıyor

BASLA:

ADRS=$00 'OKUNACAK ADRES
gosub EEPROM_OKU
ADRS=PORTD  ' OKUNAN VERİYİ PORTD'YE AKTAR
pause 1000

goto BASLA

EEPROM_OKU:
i2cread SDA,CLK,control_byte,adrs,[ADRS]
pause 10
return

end


Bin dosyası:



şema:


AKP

Alıntı yapılan: "FxDev"Proteus simülasyonunu duraklat, eeproma sağ tıkla bir bak belki bin dosyasına yazmıyordur...
Hocam eepromda istediğim değeri görebiliyorum yazmış. Adres olarakta okudum mesela $00 adresine 01 yazdım bunu portd üzerinde %00000001 olarak görmem gerek değilmi? Yazdığım kodları ben yanlış olarak görüyorum ama nerede hata yaptığımı bilmiyorum.

ErsinErce

24c512 de adresler 16bitliktir.

AKP

Alıntı yapılan: "cynetron"24c512 de adresler 16bitliktir.
Evet hocam biliyorum adres değişkenini word tipinde tanımladım sonuç değişmedi. Peki kontrol byte'ı nedir? datasheet'te bulamadım.

ErsinErce

ADRS=PORTD  ' OKUNAN VERİYİ PORTD'YE AKTAR

Burada bir yazım hatası yapmışsın
PORTD=ADRS


Bundan sonra doğru çalışacaktır.

AKP

Alıntı yapılan: "cynetron"
ADRS=PORTD  ' OKUNAN VERİYİ PORTD'YE AKTAR

Burada bir yazım hatası yapmışsın
PORTD=ADRS


Bundan sonra doğru çalışacaktır.
evet sanırım çalıştı fakat şu olaya kafam yatmadı. Biliyorsanız fikir verirmisiniz.



16f877'de portd'nin ilk 4 bitini 0, son 4 bitini 1 yapamadım. Bunu yapmam için eproma nasıl değer girmeliyim.

0000 -> 00
1111 -> ff
00001111 -> 00 ff yaptım fakat olmadı. Yani,

00. adresin 1. sütununu 00, 2. sütunun ff yaptım

drmp

i2cread SDA,CLK,control_byte,adrs,[ADRS]  burası ilgimi çekti arkadaşım buradaki  adrs ve ADRS  değişkenleri sanırım aynı problem buradan kaynaklanabilir

hasangurlek

Alıntı yapılan: "AKP"0000 -> 00
1111 -> ff
00001111 -> 00 ff yaptım fakat olmadı.

Öncelikle tavsiyem sayı sistemlerini incelemendir. Binary 1111 karşılığı 0xFF değil 0x1F dir.
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

M_B

Alıntı yapılan: "hasangurlek"
Alıntı yapılan: "AKP"0000 -> 00
1111 -> ff
00001111 -> 00 ff yaptım fakat olmadı.

Öncelikle tavsiyem sayı sistemlerini incelemendir. Binary 1111 karşılığı 0xFF değil 0x1F dir.

Hocam 0x0F olması gerekmez mi?
0000->0
1111->F
00001111->0x0F
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

hasangurlek

Evet haklısınız, doğrusu 0x0F yazarken el kayması :)
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

AKP

Alıntı yapılan: "drmp"i2cread SDA,CLK,control_byte,adrs,[ADRS]  burası ilgimi çekti arkadaşım buradaki  adrs ve ADRS  değişkenleri sanırım aynı problem buradan kaynaklanabilir
evet, burası benim ilgimi çekti. Ama çok düşündüm başka çıkar yol bulamadığım için öyle yadım. Sırası,

data_pini->clock_pini->kontrol_kodu->adres->değişken->etiket

olmalı.

Alıntı yapılan: "hasangurlek"
Alıntı yapılan: "AKP"0000 -> 00
1111 -> ff
00001111 -> 00 ff yaptım fakat olmadı.

Öncelikle tavsiyem sayı sistemlerini incelemendir. Binary 1111 karşılığı 0xFF değil 0x1F dir.

İncelememe gerek yok biliyorum dalgınlık işte hemen ön yargılı olmayın

0000 - 0
1111 - F
0x0F yapar. Sizde inceleyin :)

Alıntı yapılan: "M_B"
Alıntı yapılan: "hasangurlek"
Alıntı yapılan: "AKP"0000 -> 00
1111 -> ff
00001111 -> 00 ff yaptım fakat olmadı.

Öncelikle tavsiyem sayı sistemlerini incelemendir. Binary 1111 karşılığı 0xFF değil 0x1F dir.

Hocam 0x0F olması gerekmez mi?
0000->0
1111->F
00001111->0x0F

haklısınız.

ErsinErce

0000 -> 0
0001 -> 1
0010 -> 2
0011 -> 3
0100 -> 4
0101 -> 5
0110 -> 6
0111 -> 7
1000 -> 8
1001 -> 9
1010 -> A
1011 -> B
1100 -> C
1101 -> D
1110 -> E
1111 -> F


0b00001111 -> 0x0F olucak dediğiniz gibi bundan bir sonuç aldınız mı?

AKP

değerli bilgilerinizi paylaştığınız için hepinize teşekkür ediyorum.

Alıntı yapılan: "Ziya"Elinde hex dosyası var ise Ic-prog'ta 24512 programlayacakmış gibi çipi seçip hex dosyasını okut ve yazdırma işlemi yapmadan save as ile bin dosyası olarak kaydettir. Sonra bu dosyayı isis te 24512 modelinde kullan.
Ziya bey sizi anlayamadım resim datalarını hex koduna çevireyim sonra bin uzantısında kaydedip isisde 24512 de mi kullanayım?

Aşağıdaki kodu çalıştırdım ama hex editörü hakkında birkaç sorum olacak,

ADCON1=7
trisd=0 : portd=0

ADRS var word   'ADRES
veri var BYTE
SDA var portc.4  'data
CLK var portc.3  'clock
CONTROL_BYTE con %10100000 'a0 ve a1 kullanılmıyor

BASLA:

ADRS=$00 'OKUNACAK ADRES
gosub EEPROM_OKU
PORTD=ADRS  ' OKUNAN VERİYİ PORTD'YE AKTAR
pause 1000

goto BASLA

EEPROM_OKU:
i2cread SDA,CLK,control_byte,adrs,[ADRS]
pause 10
return

end