Harici eeprom okuma/yazma hatası

Başlatan crypto, 14 Ağustos 2009, 13:53:58

crypto

Mrb  . arkadaşlar.

PIC18f452 ve 24c512 eepromlu devremde aşağıdaki kodlara göre işlem yaptığımda; eepromdan okuduğum değerleri yine aynı eepromda farklı adreslere kaydediyorum. Ancak başka bir rutinde okuma yaptığımda bazı değerler (eepromda sürekli aynı adreslere denk geliyor) ya 0 (sıfır) görünüyor ya da olması gerekenden farklı değerler okuyorum.

Böyle bir sorunla karşılaşan ya da çözümünü bilen arkadaşlardan yardım bekliyorum.

Eepromdan okuyup başka adreslere yazma kodları:
Declare SDA_PIN PORTE.1
Declare SCL_PIN PORTE.0
dim dwrd1 as word
dim dwrd2 as word
dim dwrd3 as word
dim sayac as byte
dim sablon_adr as word
dim aktf_adres as word
dim dummyw as word


    sablon_adr= 1020
    aktif_adres = 6020
    sayacw = 0
    Clear dwrd1
    Clear dwrd2
    Clear dwrd3
    For dummyw = sablon_adr To sablon_adr + 396 Step 4 ;100 adet kayıt okuma/yazma
sablondan_dosyaya:
        BStart
        BusIn cont,dummyw,[dwrd1,dwrd2]
        BStop
        DelayMS 40
        BStart
        BusOut cont,aktif_adres,[dwrd1,dwrd2,dwrd3,dwrd3,dwrd3,dwrd3,dwrd3,dwrd3,dwrd3]   ;dwrd3 değerleri daima sıfır.
        DelayMS 30
        BStop
        aktif_adres = aktif_adres + 18
    Next dummyw


Ekranda değerleri okuma kodları (bu kısımda 15. ve 22. değerler farklı ya da 0 (sıfır) görünüyor. Değişik değerler de yüklesem hep aynı noktada değerler farklı görünüyor:
degerleri_oku:
    aktif_adres = 6020
buton_bekle:
        GoSub buton_oku                   ;buton değerini oku
        If buton = 0 Then buton_bekle
        GoSub buton0_kontrol            ;buton değerinin sıfır olmasını bekle
        BStart
        BusIn cont,aktif_adres,[dwrd1,dwrd2]
        BStop
        sayacw = sayacw + 1
        Print At 1,1,@dwrd1,"   "   
        Print At 2,1,@dwrd2,"   "
        Print At 4,8,"%",#sayacw
        aktif_adres = aktif_adres + 18
        If sayacw = 100 Then son
        GoTo buton_bekle
son:
       end

murat3044

#1
herkese selamlar,
proton iyi güzel ve anlayışlı bi dil olmakla birlikte saç baş yoldurtuyor bazen. bi sorunla karşılaştım. ete hocama sordum, sağolsun yardım etti ama verdiği cevap pbp içindi. bunu protona çevirince bir türlü olmadı, olduramadım :(
soru şu: proton ile18f452 ile 24lc1025 e veri yükleyip okumak: kaynak kodum:
Device = 18F452
Xtal = 4

Config_Start
   OSC = HS ; HS osc
   OSCS = OFF ; Disabled
   PWRT = On ; Enabled
   BOR = OFF ; Disabled
   WDT = OFF ; Disabled
   STVR = OFF ; Disabled
   LVP = OFF ; Disabled
   Debug = OFF ; Disabled

Config_End

LCD_DTPin = PORTD.4
LCD_RSPin = PORTD.0
LCD_ENPin = PORTD.2
LCD_Interface = 4
LCD_Lines = 2
LCD_Type = 0
Declare Slow_Bus 1
'CMCON=7
ADCON1=7

PORTA=0:TRISA=%00000001
PORTB=0:TRISB=0
PORTC=0:TRISC=0
PORTD=0:TRISD=0
PORTE=0:TRISE=0

DelayMS 500
Cls     


Dim ADRESS As Word
Dim KONTROLOKU As Byte
Dim KONTROLYAZ As Byte
Dim OKUNAN  As Byte
Dim YAZILAN As Byte

Symbol DTA=PORTC.4
Symbol CLK=PORTC.3

KONTROLYAZ=%10100000
KONTROLOKU=%10100001
Cls
DelayMS 500

ADRESS=0
YAZILAN=9

BASLA:

I2COut DTA,CLK,KONTROLYAZ, ADRESS,[YAZILAN]
DelayMS 10

I2CIn DTA,CLK,KONTROLOKU, ADRESS, [OKUNAN]
Print "OKUNAN:",Dec OKUNAN
DelayMS  1000
Cls

GoTo BASLA
End


mesaj birleştirme:: 04 Mayıs 2014, 09:57:41

ama

I2COut DTA,CLK,KONTROLYAZ, ADRESS.Byte0,[YAZILAN]
DelayMS 10

yazma bölümünü bu şekilde düzeltince düzeliyor ama bu seferde mantığı olmuyor. yani ben 65536 tane byte büyüklüğünde data yazacağım, bu şekilde nasıl olacak bilmiyorum.

sezgiin

24lc1025 (1FFFF)=131071 byte kapasiteye sahip bir eepromdur. adress için kullanmış olduğun değişken word tipi bir değişkendir. bu değişken max 65535 değerini alabilir buda 24LC1025'in adress kapasitesi için yetersiz bir değişkendir.Adress için DWORD tipi bir değişken kullanırsan sorununun düzeleceğine inanıyorum...