hata bende mi, eeprom'da mı? proton'da mı, pic'te mi yoksa proteus'ta mı?

Başlatan murat3044, 04 Mayıs 2014, 20:25:15

murat3044

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

ama;

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

yazma bölümünü bu şekilde düzeltince şansa 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.

mehmet

Ben tembel bir adamım, isis projesini oluşturup
yollayabilirseniz bakayım.
Bu arada BusOut, BusIn ile deneyiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"

ete

Tek yapman gereken adress değişkenini 2 byte halinde yazman.
I2COut DTA,CLK,KONTROLYAZ, ADRESS.Bayte1,ADRESS.Byte0,[YAZILAN]. Bu yazma için

I2CIn DTA,CLK,KONTROLYAZ, ADRESS.Byte1,ADRESS.Byte0,[YAZILAN]

Buda okuma için. Unutma bu eprom iki bölüme ayrılmıştır. İlk 512 kbit lik kısmı kontrol byte ın  3 cü biti olan blok seçme biti sıfır iken okunur veya yazılır diğer 512 k bitlik kısım ise blok seçme biti 1 iken yazılıp okunur. 128 kBitlik bütün hafızaya bu lekilde ulaşılıyor.

Bir konu daha bildiğim kadarı ile okuma işleminde 1 olması gereken R/W bitini basic otomatik ayarlamaktadır. Sen okumada ayrı yazmada ayrı kontrol byte değeri kullanman gerekmiyor.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

murat3044

değerli ete hocam,
dediğiniz gibi, protonda adres versini 2 byte olarak yazıyorum ama kabul etmiyor, pbp bunu kabul ediyor, ondan dolayı bi sıkıntı olmuyor. yalnız, bunun çözümü protonda nasıl olacak? hocam dediğiniz gibi eepromun 2 bölüme ayrılmış olduğunu ve bunları nasıl kontrol edeceğimi biliyorum. yazma için ayrı bir kontrol, okuma için ayrı bir kontrol değeri giriyorum. tek sıkıntı pbp da 2 byte halince yapabildiğim adreslemeyi protonda nasıl yapacağım onu bilmiyorum.
2. busin ile denedim ama yine olmuyor.
benim isis sürümü sıkıntılı olmasın?

ete

Bütün açıklamalar şöyle, şayet 16 bit adres verilecek ise adres değişkeni word cinsinden olmalıdır. Şayet 8 bit adres verilecek ise adres değişkeni byte cinsinden olmalıdır.
Benzer açıklama aslında PBP da da mevcut ancak PBP da adres değişkenini word tipinden de kullansan çalışmıyor. İllaki adresi 2 byte halinde göndermek gerekiyor.

Bu durumda Protonda adres değişkeni word tipinden seçip işlem yapmak gerekiyor. Ama zaten sende öyle yapmışsın.
Acaba ADRESS kullanılmaması gereken kelimeler arasındamıdır diye baktım değil. O halde çalışması gerek ama çalışmıyor.
Bu aşamdan sonrasında benim yapabileceğim bir şey yok maalesef.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com