eeprom hız sorunu

Başlatan simo, 16 Şubat 2008, 22:42:57

simo

merhaba ustadlar bir 16f877 ile 128x64 bir lcdyikontrol ediyorum pixel bilgilerinide bir harici eepromdan yani at24c512 dan alıyorum ve 8 mhzde çalıstırıyorum. ama resimler ekrana yavas geliyo .sanırım harici eeprom okuması yavas geliyo.hızlandırmak için neler yapabilirimburda tıkanıp kaldım. lütfen yardım edin

volkii

animasyon yapıyorsan işin biraz zor. ram kullanabilirsin mesela
ama bu yavaşlık eepromdanolcağını düşünmüyorum. sonuçta yazma işlemi yapmıyorsun. okuma işlemi yapıyorsun.kristal frekansını yüksetebilirsin. kodları görmek lazım.

mucitotomasyon

dedigin seyde epromun hızı sorundeğil  lcd yazma yavaş  oldugundan

kaynaklanıyor. ccs nin driver kullanıyorsan bence kendin driver yaz aynı sorunla bizde karsılaşmıştık yeni driverle hallettik




mucit otomasyon

simo

yazılım olarak pic basic kullanıyorum driveri kendim yazdım.aslında onceden pixelleri programın içine gömüyordum o zaman 4 mhzde bile resim ekrana bir anda geliyordu .fakat aynı programı eepromlu yapınca işlemler yavaşladı.yani bence sorun eepromla alakalı.16 mhz lik kristal taksam acaba sorun hallolurmu. ........s.o.s........

lojikmemo1

Okuma konusunda epromlar da yavşlama sorunu olmaz lcdye pixel basma kısmı yavaş sanırım daha önce glcd uygulaması kaynak kodlarını vermiştim bakarsan işine yarar.
İnsanlara Akılları Ölçüsünde Söz Söyleyiniz.

simo

yok hocam tamamen i2c ile alakalı.gerek proteusda gerek devre üzerinde bunu tatbik ettim .i2c komutunu yazdıktan sonra hantallasıyo.işin içinden çıkmadım tıkandım burda

Veli B.


simo

define osc 8
DEFINE I2C_SCLOUT 1
DEFINE I2C_HOLD 1
TRISB=%00000000
trisd=%00000000
trisa=%00000000
trisc=%00000000
trise=%00000000
porta=0
portb=0
portc=0
portd=0
porte=0
portd.2=0
pause 1
portd.2=1
pause 2000
cont        con     %10100000
adcon1=%00000110
portd.3=0
pause 100
portd.3=1
pause 100
SAYAC var byte
veri var byte
addr var word
i var byte
x var byte
xinf var byte
pageinf var byte
sayi var byte
pixel var byte
clear
goto main
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CIPSELECT1:cs1=1:cs2=0:rs=0:e=1:pauseus 1:e=0:return
CIPSELECT2:cs1=0:cs2=1:rs=0:e=1:pauseus 1:e=0:return
WRITELCD:rs=1:e=1:e=0:RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lcdpage:X=0:;pauseus 100                                               ;                                                      
if pageinf>7 then cs1=0:cs2=1:rs=0:pageinf=PAGEINF-8:goto ld      ;
if pageinf<=7 then cs1=1:cs2=0                                ;
ld:                                                                 ;
X=PAGEINF                                                           ;
GOSUB LCDPAGETABLO                                                  ;lcd sayfa ayarının yapıldığı yer
PORTb=X:rs=0:e=1:pauseus 1:e=0:return                               ;                                                      lcdpagetablo:lookup X,[$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF],X:RETURN    ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lcdx:portb=xinf:rs=0:e=1:pauseus 1:e=0:return;lcd sutun ayarı yapıldığı yer                                                      
picture:
for sayac=0 to 63
i2cread PORTd.1,PORTd.0,cont,addr,[veri]
portb=veri
gosub writelcd
addr=addr+1
next
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
p1:XINF=0:GOSUB LCDX:PAGEINF=0:GOSUB LCDPAGE:gosub picture
p2:PAGEINF=8:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p3:PAGEINF=1:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p4:PAGEINF=9:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p5:PAGEINF=2:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p6:PAGEINF=10:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p7:PAGEINF=3:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p8:PAGEINF=11:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p9:PAGEINF=4:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p10:PAGEINF=12:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p11:PAGEINF=5:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p12:PAGEINF=13:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p13:PAGEINF=6:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p14:PAGEINF=14:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p15:PAGEINF=7:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
p16:PAGEINF=15:GOSUB LCDPAGE:XINF =0:GOSUB LCDX:gosub picture
end





mazur görün ama biraz karısık.kodları bu şekilde yazdım .yardımlarınızı bekliyorum

Veli B.

YAZ:
lcdpage:
X=0;pauseus 100 ;
If pageinf>7 Then
    cs1=0
    cs2=1
    rs=0
    pageinf=PAGEINF-8
    GoTo ld 
EndIf
If pageinf<=7 Then
    cs1=1
    cs2=0
EndIf
ld: 
X=PAGEINF 
LookUp X,[$B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF],X
PORTB=X
rs=0
e=1
nop
e=0
'======================================================================
XINF=0  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lcdx:
    PORTB=xinf
    rs=0
    e=1
    nop
    nop
    nop
    e=0;lcd sutun ayarý yapýldýðý yer
picture:
    For sayac=0 To 63
        i2cread PORTd.1,PORTd.0,cont,addr,[veri]
        PORTB=veri
        rs=1
        e=1
        nop
        e=0
        addr=addr+1
    Next
    

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

main:
If PAGEINF>7 Then
        PAGEINF=PAGEINF-7
    Else
        PAGEINF=PAGEINF+8
        If PAGEINF=16 Then PAGEINF=0
EndIf
GoTo YAZ

Lcdpage altprograminda kendi programlama tekniginize gore gerekli duzeltmeyi size biraktim. Burada bir degisiklik yapmaniz gerekiyor. Sizin pekistirmeniz icin main icerisinde benzer duzeltmeyi yaptim. Bu mantigi incelerseniz lcdpage kismi icin gerekli duzeltmeyi hemen farkedeceginize eminim. Programlarinizi mumkun mertebe algoritma mantigi ile yazarsaniz hem okunabilir hemde daha efektif kodlar uretebilirsiniz. Mantik olarak cok hazirliksiz yazilmis bir kod. MCU yu olduruyorsunuz bu sekilde. ;)
Bu sekilde bir deneyin...

simo

yardımınız için çok teşekkur ederim.bikaç ekleme ile kodları çalsıtırdım fakat durum değişmedi.devre aynı şekilde çalısıyo baska bir alternatif varmı acaba

Veli B.

Kristali 20MHz yapin ve farka bakin. Birde eepromu hangi frekansta haberlestiriyorsunuz? 100khz ise 400khz de deneyebilirsiniz ve hatta i2c komutu yerine kendi rutininizi yazabilirsiniz assembly' de. Su hali ile programdan kaynakli olarak bu kadar fark olusmaz.

simo

8 mhzde çalsıyo zaten ustu için programa i2c ile eşit hızda olabilmesi için ek bi komut yazılıyo (DEFINE I2C_SLOW 1 ).eeprom frekansı (100khz -400khz)derken neyi kasdediyordunuz .açıkcası o konuda bir bilgim yok asm biliyorum fakat harici eeprom konusunda fazla bilgi sahibi değilm. açıklarmısınız lütfen

Veli B.

Pbp icin; 4 mhz uzeri osc kullaniminda,  100khz calisan i2c terminal ile haberlesme sorunu yasanmamasi icin slow kullaniliyordu diye aklimda kalmis. I2c aygitlar 100-400-1000khz gibi frekanslarda olabilir.Ornegin elinizde ki eprom bu 3 hizida destekliyor.   Elinizde ki aygita ait datasheetleri ve pbp icin, helpten modifier ve define kisimlarin incelerseniz, sanirim sorun cozulecektir.

simo

yardımlarınız için çok teşekkür ederim elinize emeğinize sağlık
20 mhz taktım kısmnde olsa hızlandı.umarım baska bi yolu vardır.