SPI eeprom a yazma ve okuma sorunu pic16f877

Başlatan sarperonal, 16 Eylül 2011, 23:09:22

sarperonal

Merhaba arkadaşlar,

Proteus ta 25640 ve pic16f877 ile kurduğum devrenin kodu ile ilgili sıkıntı yaşıyorum. Proteus devre şeması aşşağıdaki resimde
http://www.sarperonal.com/aas/spi_thermometer.png

Bu sisteme kod yazarak çalıştırabilecek ve bu kodu paylaşabilecek bir arkadaş varmı?
varsa çok sevinirim. çünkü 2 haftadır uğraşıyorum ve başaramadım.

gerekli kütüphaneleri fxdev den aldım:
http://www.sarperonal.com/aas/spi.h
http://www.sarperonal.com/aas/spi.c
http://www.sarperonal.com/aas/lcd.c
http://www.sarperonal.com/aas/lcd.h
http://www.sarperonal.com/aas/delay.c
http://www.sarperonal.com/aas/delay.h
(Hi-tech c kullandım, farklı bir derleyiciylede yaparsanızda olur sorun yok)
Teşekkürler

M_B

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

sarperonal

Merhaba, verdiğiniz link işimi görmedi. çünkü o sayfada 25640 ile ilgili bir eeprom spi haberleşmesi örneği yoktu.

husam881

#3
Merhaba;

Sayın Sarperonal ben de aynı konu üzerinde çalışmaktayım. İkimizinde problemi aynı olduğu için yeni bir konu açmak yerine sizin açmış olduğunuz konunun devamına bende yazmış olduğum programı ekliyorum.  Yapmak istediğim ve ilgili program aşagıdadır.


Pic16F877 kullanarak (PBP ile kod yazılıyor) 25LC640 harici eeprom entegresine veri kayıt etmek ve kayıtlı veriyi okumak istiyorum. Bunun için SHIFTOUT ve SHIFTIN komutlarını kullanarak şu şekilde bir program yazdım.

'****************************************************************
'*  PIC 16F877.BAS                                                                                                  *
'*                                                                                                                             *
'*  By        : HGK                                                                                                       *
'*  Notice    : PIC 18F877 İLE 25LC640 HARICI EEPROM ENTEGRESINE                   *
'*              VERI KAYIT ETME / EEPROMDAN VERI OKUMA                                          *
'*  Date      : 18/09/2011                                                                                         *
'*  Version   : 1.0                                                                                                     *
'*  Notes     :                                                                                                           *
'****************************************************************

INCLUDE "MODEDEFS.BAS"
DEFINE  OSC 4
DEFINE LCD_DREG PORTD        ' Set LCD Data port
DEFINE LCD_DBIT 4            ' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTA       ' Set LCD Register Select port
DEFINE LCD_RSBIT 2           ' Set LCD Register Select bit
DEFINE LCD_EREG PORTA        ' Set LCD Enable port
DEFINE LCD_EBIT 0            ' Set LCD Enable bit
DEFINE LCD_BITS 4            ' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2           ' Set number of lines on LCD
DEFINE LCD_COMMANDUS 2000    ' Set command delay time in us
DEFINE LCD_DATAUS 50         ' Set data delay time in us

    TRISA=%00000000
    TRISB=%11111111
    TRISC=%00000000
    TRISD=%00000000
    TRISE=%000
    ADCON1=7   
'***************    SPI BAĞLANTI PİNLERİ    *******************************
SYMBOL  SCK=PORTC.3
SYMBOL  SO=PORTC.4
SYMBOL  SI=PORTC.5
SYMBOL  CS=PORTE.2
'**************     ATAMALAR                *******************************
EYAZ    CON 2
EYAZEN  CON 6
EOKU    CON 3
ERDSR   CON 5
ADRSL  VAR BYTE
ADRSH  VAR BYTE
ADRSL=%00000001
ADRSH=%00000000
WD1  VAR BYTE
RD1  VAR BYTE
WD1=%10101010       'HARICI EEPROMA YAZILACAK VERI

    LCDOUT  254,1
BASLA:
'****************   EEPROMA VERI YAZILIYOR  ************************************   
    LOW CS
    SHIFTOUT    SO,SCK,1,[EYAZEN]
    PAUSE   5
    SHIFTOUT    SO,SCK,1,[EYAZ,ADRSH,ADRSL,WD1]
    PAUSE   5
    HIGH    CS
    PAUSE   5
'****************   BURADAN ITIBAREN EEPROMDAN OKUMA YAPILIYOR  ****************   
    LOW CS
    SHIFTOUT    SO,SCK,1,[EOKU]
    PAUSE   5
    SHIFTOUT    SO,SCK,1,[ADRSH]
    PAUSE   5
    SHIFTOUT    SO,SCK,1,[ADRSL]
    PAUSE   5
    SHIFTIN SI,SCK,1,[RD1]
    PAUSE   5
    HIGH    CS
    LCDOUT  $FE,1,"RD1-",HEX2 RD1,"-",DEC2  RD1 'EEPROMDAN OKUNAN VERI LCD YE YAZDIRILIYOR
'*******************************************************************************
END       


Programı derleyip proteusta simulasyonunu gerçekleştirmeye çalıştığım zaman şu şekilde bir hata ile karşılaşıyorum.


Ayrıca Sanal SPI İletişim Terminali ile eeproma gönderilen veya eepromdan alınan verileri kontrol ettiğim zaman,anladığım kadarıyla, Pic tarafından veri gönderiliyor fakat eeproma kayıt edilemiyor. Acaba bu hatayı ne için veriyor olabilir? Eeprom yazmaya karşı korumalı olabilir mi? Kullandığım seri iletişim komutları mı yanlış? Yoksa çalışma frekansında mı sıkıntı var?
Yardımlarınız için şimdiden teşekkürler.
Yardımlarınızda bakmak isteyebileceğiniz dosyalar ektedir.(Proteus,PBP dosyaları ve hatayı gösterir resim)
http://hotfile.com/dl/130132969/5970f1e/Yeni_Klasr.rar.html