avatar_ete

PIC Basic Ders-09 (Eeprom ve Sensör kullanımı)

Başlatan ete, 28 Ağustos 2011, 16:17:03

ete

Hafızayı daha verimli kullanabileceğin bir durum yok maalesef. Enteresan bir durum. Yalnızca değişkenlere değer verilmesi bile hafızanın dolmasına yetiyor demekki.
Programa baktım yapılabilecek bir iyileştirme yok bana kalırsa.
İşlemci değiştirmekten başka çare yok gibi.

Ete

zeynal

Merhaba Erol bey.18 pin olarak hanki pici tavsiye ederseniz?Teşekkürler

ete

18 Pinlerde bildiğim en yüksek kapasite 4K zaten sende 4K lık işlemciyi kullanmışsın.
Daha büyüğü varmıdır bilmiyorum. Microchip sayfasından araştırmak lazım.

Ete

zeynal

Erol bey iyi akşamlar.MICROCHIP - PIC16F1847-I/P diye bir işlemci buldul,sizce de uygunmu?Teşekkürler

ete


zeynal


menduh

saatlerdir uğraştığım fakat sonunda tesadüfen sorunu çözdüğüm olayı paylaşmak isterim çünkü can sıkıcı bir durum
harici eproma veri yazmak çok kolay bir olay olmasına karşın başıma gelen olay baya canımı sıktı,

I2CWRITE SDAPIN,SCLPIN,$A0,HAFIZA_NO,[veri]  bu kadar basit (görünürde)
yada
I2CWRITE SDAPIN,SCLPIN,$A0,HAFIZA_NO,[0~65535]

Dikkatinizi çekmek istediğim nokta sadece ve sadece "HAFIZA_NO" değişkeni bu değişkenin türü WORD tipi olmalı BYTE olursa yazmıyor

yani şu şekilde bir kullanım olmadı

I2CWRITE SDAPIN,SCLPIN,$A0,0,[veri]   0'ıncı adrese yazar diye umuyordum ama olmadı...

ete

Bu olay tamamen kullandığın epromla alakalı bir şey. Toplam hafızası 256 byte olan bir eproma word tipi adres verilmez. Ama Hafıza 256 dan (0-255 olduğundan 255 den demek daha doğru olur) büyük ise kesinlikle word tipi değişken kullanmak zorundasın.

Ete

mustafa48

AT 24C512 Epromu (512k) gerektiğnde proğram içinde silmek istiyorum. Ama herhangi bir yöntem bulamadım.
Datasheet inde şöyle der.
MEMORY RESET: After an interruption in protocol, power
loss or system reset, any 2-wire part can be reset by following
these steps:
(a) Clock up to 9 cycles, (b) look for SDA high in each cycle
while SCL is high and then (c) create a start condition as SDA is high.

Birşey anladıysam A olayım. Yardımlarınızı bekliyorum. (I2C tipi 2 wire
(65,536x8) 512 K ATMEL )


menduh

hafızanın silinmesi demek tüm adreslerin 11111111 olması demek 512/8 = 64 kb olduğuna göre 0 dan 64000 e kadar 255 yükleyeceksin demek
kolay gelsin.

HAFIZA_SIL:

    LCDOUT $FE,$80,"TUM BUTONLAR "
    LCDOUT $FE,$C0,"SILINIYOR..."
    FOR ADRES=0 TO 64000
    I2CWRITE SDA,SCL,$A0,ADRES,[255]
    PAUSE 5
    NEXT
    LCDOUT $FE,$80,"TUM BUTONLAR "
    LCDOUT $FE,$C0,"SILINDI......"
    PAUSE 1000

    RETURN

menduh

düşündümde büyük hafıza birimleri için çok pratik bi çözüm değil aslında benim yöntem 5ms beklemek zorunda kalmak bunun nedeni,ama datasheette malesef yazarken 5 ms beklemek gerektiği yazıyor,vardır başka bi yöntemi mutlaka.

mustafa48

En azından fikir verdin bu yöntemle tamamını silmek 328 sn falan tutuyor. Kahve içecek vakit yaratmış oluruz.

yusuf.ozyer

#27
hocam ben sumo robot yaptım sensör hiç bir şey görmediği zaman en son hangisi gördüyse ona gitmesini istiyorum kodlarım şu fakat kafam biraz karıştı birde hepsi sıfır nolu adrese kaydedeceği için kaydetmeden önce önceki bilgi silecek
'****************************************************************
'*  Name    : SUMO ROBOT.BAS                                    *
'*  Author  : [YUSUF ÖZYER]                                     *
'*  Notice  : Copyright (c) 2014 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 9.05.2014                                         *
'*  Version : 2.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

'------------------------------tris bilgileri-----------------------------------------
TRISA=%00000
TRISB=255
CMCON=7
OPTION_REG.7=1
'--------------------------------SYMBOL TANIMLARI----------------------------------------
ONCEKI VAR BYTE   'ONCEKI=1 ise SAĞ SENSÖR , ONCEKI=2 ise SOL SENSOR ONCEKI=0 ise henüz sensörler bir şey görmedi
RAKIP     VAR BYTE  'rakip sensörlerin hangisinin en son görüldüğünü tutuyor. RAKIP=1 ise ONMZ, RAKIP=2 ise SAGMZ, RAKIP=3 ise SOLMZ görüldü
SYMBOL  BASLAT=  PORTB.5
SYMBOL  SAGILERI=PORTA.0
SYMBOL  SAGGERI =PORTA.1
SYMBOL  SOLILERI=PORTA.2
SYMBOL  SOLGERI =PORTA.3
'--------------------------------MZ80  TANIMI --------------------------------------------
SYMBOL  SAGMZ  =PORTB.0
SYMBOL  ONMZ   =PORTB.2
SYMBOL  SOLMZ  =PORTB.4
'-------------------------------ÇİZGİ TANIMA------------------------------------------------
SYMBOL  SOLSEN=PORTB.6
SYMBOL  SAGSEN=PORTB.7
'------------------------------ANA  PROGRAM----------------------------------------------
BASLA:
    IF BASLAt = 0  THEN
     GOTO   ILK
ELSE
    GOTO BASLA
ENDIF

ILK:
PAUSE  5000
ANA:
'----------------------------------------YUVARLAK ETRAFINDAKİ BEYAZ ÇİZGİ-----------------------
IF (SAGSEN=1 AND  SOLSEN=0) THEN
     ONCEKI=1
     GOTO SAGADON  'sağ gördü
ENDIF
     
IF (SAGSEN=0 AND  SOLSEN=1) THEN
     ONCEKI=2
     GOTO SAGADON  'sol gördü
ENDIF
     
IF (SAGSEN=1 AND  SOLSEN=1) THEN
     ONCEKI=1
     GOTO SAGADON  'ikisinide gördü
ENDIF   

IF (SAGSEN=0 AND  SOLSEN=0) THEN
     IF ONCEKI=1 THEN SAGADON
     IF ONCEKI=2 THEN SOLADON
ENDIF     

'--------------------------------MZ80 SENSÖRÜ--------------------------------------------
DEVAM:
IF (SAGMZ=0 AND  ONMZ=1 AND SOLMZ=0)THEN 'ONMZ=1
   RAKIP=1:GOTO DUZGIT   
ENDIF   

IF (SAGMZ=1 AND  ONMZ=0 AND SOLMZ=0)THEN 'SAGMZ=1
   RAKIP=2: GOTO SAGADON
ENDIF
   
IF (SAGMZ=0 AND  ONMZ=0 AND SOLMZ=1)THEN
  RAKIP=3:GOTO SOLADON
ENDIF 

IF (SAGMZ=0 AND  ONMZ=0 AND SOLMZ=0)THEN
    IF RAKIP=1 THEN DUZGIT
    IF RAKIP=2 THEN SAGADON
    IF RAKIP=3 THEN SOLADON
ENDIF

'--------------------------------ALT PROGRAM---------------------------------------------
DUZGIT:
    HIGH SAGILERI
    LOW  SAGGERI
    HIGH SOLILERI
    LOW  SOLGERI
    GOTO ANA
   
SOLADON:
    HIGH SAGILERI
    LOW SAGGERI
    LOW SOLILERI
    HIGH SOLGERI
    GOTO ANA
   
SAGADON:
    LOW  SAGILERI
    HIGH SAGGERI
    HIGH SOLILERI
    LOW  SOLGERI
    GOTO ANA
end   




ete

En son görülen sensörün kaydını almak gerekiyor. Bu nedenle programa ONCEKI isimli bir byte değişkeni eklemek ve sensörlerin görme kontrollerinin yapıldığı yerlerde de bu değişkene değer verilmesi gerekir.
Bu değişikliği programa işledim ve senin verdiğin programı yeniden düzenledim. Verdiğin programa bakabilirsin.

Aşağıdaki cümleyi anlamadım. O yüzden bir şey yapamadım. Bir adrese bilgi kayıt edilecekise eskisini silmeye gerek yoktur. Zire yeni yazdığın zaten otomatikman eskisini silip eskinin yerine oturacaktır.

"hepsi sıfır nolu adrese kaydedeceği için kaydetmeden önce önceki bilgi silecek

Ete

yusuf.ozyer

Hocam hafizasina katmak istedigim bilgi mz80 sensorleri yani rakip sumoyu en son hangi mz80  sensoru gorduyse o yola gidecek rakip sensorlerden ciksabile en son hangi sensor gorduyse devam edecek sagsen ve solsen yere bakacam yani zemin rengini algilayacak

Powered by EzPortal