Proton harici EEPROM kullanma ile ilgili sorularım.

Başlatan M.A.A, 20 Nisan 2015, 12:10:17

Maxim

şimdi indirdim
tam olarak ne yaparak test edeceğimi yazarmısınız, kodu incelemeyeyim uzun uzun

M.A.A

#31
Saniyede 1 adres 0 dan başlayarak EEPROM a 6 adet değer kaydediyor. Ekranın sol alt köşesinde Adres değeri yazıyor.
Tuş1 e basınca kayıttan çıkıyor, ekranda kayıtlar yazıyor, bu durumda iken Tuş2 ye basınca kayıt okumaya geçiyor. 6 adet kayıt ettiğini 6 şar 6 şar okuyor. Tuş3 Adresi 6 azaltıyor, Tuş4 6 artırıyor ve tekrar okuma yapıyor. Okunan değerler ekrana basılıyor.

Maxim

evet denedim, bende sorunsuz çalışıyor gözüküyor
önce 6 adet değeri sırayla eeproma yazıyor (yazdığını görüyorum)
bu adress 6 artarak gidiyor, sırayla peş peşe aynı değerleri kaydediyor

sonra okumaya geçiyorum (o değerler eepromda halen gözüküyor zaten)
okuma yapınca değerler ekrana düzgün bir şekilde geliyor



programda bir iki hata vardı ama eski hex dosyasıda da çalışıyor..
bu öyle olacak OSCCON = %01110010     'Internal 8 MHz clock select

yeni versiyonda şunlarda böyle olmalı
Declare Xtal=8
Symbol SDA=PORTC.4                     ' RTC data
Symbol SCL=PORTC.3                     ' RTC clock

"var" falan kabul etmez proton

M.A.A

EEPROM Kayıt adresini daha yüksek değerler içinde deneyebilir misiniz?

1-2-3
128-129-130-131
256-257
385-386-387
512-513-514-515
640-641
769-770-771
896-897-898-899
1024-1025
1153-1154-1155

Sorun yaşadığım doğru yazılmayanlar bunlar, mesela adres 128 i geçmeden 1,2,3 uncu adreslerdeki değerler doğru gösteriyor, adres 128 i geçinde 128 e yazması gereken değeri 1 e yazıyor.

Maxim

şu şekilde deneyerek yaptım hepsi doğru yere yazıyor
    EEADRES=2000
    I2COut SDA,SCL ,$A0,EEADRES,[$11,$12,$13,$14,$15,$16]

128, 512, 1024, 1155, 2000 denedim sorun yok

M.A.A

#35
Alıntı yapılan: Maxim - 19 Şubat 2016, 15:43:26
şu şekilde deneyerek yaptım hepsi doğru yere yazıyor
    EEADRES=2000
    I2COut SDA,SCL ,$A0,EEADRES,[$11,$12,$13,$14,$15,$16]

128, 512, 1024, 1155, 2000 denedim sorun yok

Bu şekilde yapınca bende de çalışıyor,
Hatta yaptığım döngüde sorun çıkaran değerlere yazmasın diye koşul koyup o değerleri ayrıca yazdırdım hepsi doğru çıktı.

Benim yazdığım şekilde oluşan hatayı gördünüz mü ?

Maxim

hocam benden bu kadar
ben istediğim adrese yaz deyince yazıyor
sizde olan hatayı bilemiyorum

M.A.A

Maxim Hocam sizi çok yordum ama sizin yazdığınız şekilde açık yazdım.

EEADRES=0
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=6
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=12
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=18
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=24
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=30
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=36
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=42
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=48
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=54
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=60
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=66
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=72
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=78
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=84
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=90
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=96
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=102
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=108
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=114
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=120
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=126
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$AA,$AB,$AC,$AD]
    DelayMS 10
    EEADRES=132
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=138
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10


Burada sadece 0-1-2 ve 3 u adreslere bakarsak doğru yazmıyor.
128 e yazması gerekeni 0 a
129 a yazması gerekeni 1 e
130 a yazması gerekeni 2 e
131 a yazması gerekeni 3 e

yazıyor.

Maxim

yok yorulmadım fakat ne yapıcağımı bilemedim
evet denedim ve dediğin gibi oldu
bende 126 da sıfıra yazdı sonra 132 de 126 dan devam etti.

biraz araştırma yapıcam

M.A.A

Alıntı yapılan: Maxim - 19 Şubat 2016, 18:38:29
yok yorulmadım fakat ne yapıcağımı bilemedim
evet denedim ve dediğin gibi oldu
bende 126 da sıfıra yazdı sonra 132 de 126 dan devam etti.

biraz araştırma yapıcam

teşekkür ederim. Bende IIC yi hazır kod kullanmadan yapmaya çalışıyorum. Onda da aynısı olacak mı merak ettim.

Maxim

bişeyler okudum, sıralı yazmada yazma adresi 128 in katları şeklinde olmalıymış
tamda anlamadım ama adres 128 e gelince yazmayı sıfırlayıp baştan başlayın diyorlar.

fakat şöyle bir çözüm var, denedim oldu gibi
adresi 16 nın katları şeklinde yaparak deneyin sizde


EEADRES=0
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=16
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=32
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=48
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=64
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=80
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=96
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=112
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=128
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=144
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=160
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=176
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=192
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=208
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=224
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=240
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=256
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=272
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=288
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=304
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=320
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=336
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$AA,$AB,$AC,$AD]
    DelayMS 10
    EEADRES=352
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10
    EEADRES=368
    I2COut SDA,SCL ,$A0,EEADRES,[$51,$52,$53,$54,$55,$56]
    DelayMS 10



ete

Her epromun bir page yani sayfa yazma buffer'ı vardır ve bir seferde ancak bu buffer kadar yazabilirsiniz.
Data sheet ne diyor bakın;
This device also has a page write capability of up to 128 bytes of data
Bu durumda 128 byte dan fazlasını bir seferde yazamazsınız. Ardışık yazmada 128 in katları şeklinde yazma yapmalısınız.

Ete

M.A.A

Çok teşekkür ederim :) Gerçek similasyon da ve gerçek devrede denedim, sorunsuz çalıştı. Büyük bir sıkıntıdan kurtardınız beni :)

Powered by EzPortal