Dim DUTY As Byte
Dim FREKANS As Word
.
.
DUTY=ERead 10:DelayMS 20
FREKANS=ERead 50:DelayMS 20
.
.
.
If KAYDET=0 Then
EWrite 10, [DUTY]:DelayMS 20
EWrite 50, [FREKANS]: DelayMS 20
16f877 işlemci ile yukarıdaki şekilde yazma ve okuma yapmak istiyorum.. ancak bu kodlarla duty değerini yazıp okumakta problem yaşamazken, frekans değerini okuma ve yazma yapamadım.. 1 haftadır neyi yanlış yaptığımı bulamadım. Bu konuda yardımlarınıza ihtiyacım var. Teşekkürler..
proton+ bilmem ama word genelde byte in 2 katı olur, yani byte 8 bit ise word 16 bittir,
sanırım siz 8 bitlik yazma ve okuma komutlarıyla 16 bitlik değişken yazmaya ve okumaya çalışıyorsunuz,
büyük ihtimalle frekansın düşük 8 bitini eeprom alanına yazıp okuyorsunuz
FREKANS değişkenin word olduğundan 2 byte yer kaplar,
50 adresine yaz dediğinde 50 ve 51 nolu adreslere yazar.
50'ye FREKANS.LowByte degerini
51'e FREKANS.HighByte degerini yazar
Okumada da
FREKANS=ERead 50
dediğinizde 50 den okuduğunu FREKANS.LowByte a yerleştirir, 51 den okuduğunu FREKANS.HighByte degerine yerleştirir.
Buraya kadar kodlarınızda problem yok.
Eğer ki 51 nolu adrese başka bir müdahale yapıyorsanız (başka değerin kaydı falan) o zaman FREKANS.HighByte değerini bozmuş olursunuz.
Yani
EWrite 51, [abc] gibi bir komutunuz varsa FREKANS'ın alanına girip onu bozmuş olursunuz.
O halde okuma ve yazma ve sonuç için 2 sorunumuz var.. Birincisi;
FREKANS.LowByte=ERead 50:DelayMS 20
FREKANS.HighByte=ERead 51:DelayMS 200
.
.
.
If KAYDET=0 Then
EWrite 50, [FREKANS.LowByte]: DelayMS 20
EWrite 51, [FREKANS.HighByte]: DelayMS 20
Endif
şeklinde yazmak yeterli olacakmıdır ?
İkincisi Low ve High byte'ları okuduktan sonra bu bilgileri eproma yazılan bu değerleri nasıl görünür hale getirebilirim.. Daha açıkça sormak gerekirse bir hesaplama rutini var mıdır ?
İf şartın ne içindir bilemem ama okuma ve yazmanda hata yok, ilk verdiğin şekilde de olabilir son verdiğin şekilde de olabilir. Önemli olan 51 no ya başka birşey yazmaman.
@solidus
hayır öyle yapmanıza gerek yok, kafanız karışmasın
sizin kod doğru, hata yok
fakat sadece şu : dan sonraki beklemeleri alt satıra alın belki onları görmüyor derleyici
* bu arada, okuma yaparken beklemeye gerek yok
şöyle bir deneyin
Dim DUTY As Byte
Dim FREKANS As Word
DUTY=ERead 10
FREKANS=ERead 50
If KAYDET=0 Then
EWrite 10, [DUTY]
DelayMS 10
EWrite 50, [FREKANS]
DelayMS 10
@Maxim,
frekans değişkeni word tipi olduğundan lowbyte ve high byte okunmalı ve yazılmalı değil mi ?
DelayMS 10
Hatta buna bile gerek yok, proton onu hallediyor.
word olduğu için 2'ye bölmeniz gerek. Ki bölünmüş daha sonra değer okuyup word cevirebilirsiniz. oda şöyle olur
Eread 50, [FREKANS.LowByte]: DelayMS 20
Eread 51, [FREKANS.HighByte]: DelayMS 20
frekans=(frekans.highbyte<<8)+frekans.lowbyte
Proton bölme işlemini kendisi yapıyor. Yani en üstteki mesajdaki hali de doğru, bölerek yüklense de doğru.
Word değil Dword olsa da yapıyor. Gereken byte kadar ayırıp adresi 1 arttırarak yazar/okur.
@ OG,
Hocam kafam karıştı.. küçücük bi örnek vermeniz mümkün müdür ?
protonu gittikçe sevmeye başlıyorum. ::)
Saç baş yolduruyor bazen :(
Yazdıkların doğru,
DUTY=ERead 10
FREKANS=ERead 50
.
.
.
EWrite 10, [DUTY]
EWrite 50, [FREKANS]
Veya
FREKANS.LowByte=ERead 50
FREKANS.HighByte=ERead 51
.
.
.
EWrite 50, [FREKANS.LowByte]
EWrite 51, [FREKANS.HighByte]
Hepsi doğru.
Saç baş yolduran yerler saçma sapan basit şeyler,
Mesela satırı çok uzun tutmayın, satırdan sonra boşluklar bırakmayın, derleyici bazen oraları okuyamıyor.
@ETE hocanın yazdıklarını incelerken hep derdim, niye böyle dip dibe yazıyor, TAB falan kullanmıyor diye. Protonda benim başıma geldi, verilen boşluklar bazı zamanlarda derleyici tarafından okunamıyor olsa gerek hatalı sonuç verebiliyor.
Merak ettim de bu eeprom hangi seri?
Dahili eeprom.
Yoksa arkadaş harici epromu mu sordu..
;D
Dahili eeprom du arkadaşlar.. 16f877 nin dahili eepromu..
İlginçtir ama eeproma direk yazmak mümkün olmadığı için yazılması gereken değişkenin son halini başka bir değişkene atayıp bu şekilde yazmayı başardım.. Garip bir tecrübe oldu benim için.. Konu çözülmüştür. İlginize teşekkür ederim..
Başka değişken dediğiniz değişkenin türü ne?
Alıntı yapılan: solidus - 24 Ağustos 2013, 20:09:07
İlginçtir ama eeproma direk yazmak mümkün olmadığı için yazılması gereken değişkenin son halini başka bir değişkene atayıp bu şekilde yazmayı başardım..
Garip bir tecrübe oldu benim için.. Konu çözülmüştür. İlginize teşekkür ederim..
bence sizin sistemde bir tuhaflık var
ben son 7 senedir her tür picin eepromuna, proton+ ile direk byte-word-dword-float yazabiliyorum