Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

SPI işlem sırası

Başlatan pcb, 01 Eylül 2011, 15:58:03

-Hasan-

Evet bu şekilde yapılıyor:

Haberleşmeyi başlatmak için SSPBUF ' a değer yükleniyor. Sonra BF=1 olunca veri okunur, okuma yapıldıktan sonra BF otomatik olarak sıfırlanır.

pcb

işlemcideki SDin-SDout pinleri ayrı birleştirilerek kullanılabilir mi ?

-Hasan-

İşlemcinin SDin (SDI1 veya SDI2) ucuna ADC ' nin "Dout" pini bağlanacak. İşlemcinin SDout (SDO1 veya SDO2) ucu, data göndermediğimiz için boşta kalacak (istenirse bir pull down ile ground ' a bağlanabilir).

Neden birleştireceksiniz? O zaman gönderdiğimiz datayı okuruz.  :)

pcb

zaten data da göndermiyoruz bu adc de sadece clock

-Hasan-

Alıntı yapılan: pcb - 02 Eylül 2011, 16:21:42
zaten data da göndermiyoruz bu adc de sadece clock

O zaman neden öyle düşünmüştünüz?  ???

pcb

SPI araştırırken öyle bir şeyler okumuştum bir yerlerde
ilginize teşekkürler akşam test edicem

pcb

ilk 8bitten sonraki 8bitleri nasıl alıyoruz ?

-Hasan-

Aslında yukarıdaki döngünün aynısı ama sonraki byte ' ları okurken CS ' yi 1 ' e çekmemek lazım.

LOW CS

SSPBUF=0
WHILE BF=0 : WEND
BYTE1=SSPBUF

SSPBUF=0
WHILE BF=0 : WEND
BYTE2=SSPBUF

SSPBUF=0
WHILE BF=0 : WEND
BYTE3=SSPBUF

HIGH CS


Bir de; SPI ayarlarını oradaki gibi mi yaptınız?

pcb

sizin yazdığınız kodların aynısını deniyorum sabahtan beri ancak başka bir problem olmalı , yükselen kenarda CKP=1,CKE=0 da alım yapmalı çünkü yazılım spi olarak ben bu adc yi kullanıyorum.

alınan  byte = 0 herhangi bir değer okuyamadım henüz


ayrıca hiç clock pininde clock çıkışı göremiyorum osilaskopla baktığımda

-Hasan-

Hangi SPI ' ı kullanıyorsanız (mesela SPI1 için; SDO1, SCK1, SDI1) o pinleri ve CS ' yi bağladığınız pini uygun şekilde yönlendirdiniz mi?

SDO --> Çıkış
SDI --> Giriş
SCK --> Çıkış
CS --> Çıkış

Belki bu yüzden olabilir. PIC ilk açıldığında tüm pinleri giriş yapıyor. Ben proteusta bir deneme yaptığımda bunları yönlendirmediğim için çalışmamıştı.

pcb

evet yazdığınız gibi pinleri yönlendirmiştim, problem aslında, en başta sspen = 1 tanımını yaparsam program doğru çalışmıyor hatta ekrana görüntü bile gelmiyor ama okuma yapmadan önce sppen = 1 ve okuma bittikten sonra da sspen = 0 olarak belirtirsem program düzgün çalışıyor ama tabi alınan değer sıfır.
bu şekilde açıp kapatmak mı gerekli spi donanımını yoksa açık mı kalmalı ? bence baştan tanımlayıp açık kalmalı kullanılacağı zaman CS = 0 yapılarak işlem yapılmalı.



-Hasan-

Çok şaşırdım; öyle bir şey olmaması lazım. Aynen dediğiniz gibi SPI ve SPI pinlerinin ayarı program başında yapılır. Bir daha değiştirilmez. Sizin entegrenize göre CKP=1 CKP=0 ayarı da doğru. Programınızı tamamen paylaşır mısınız?

pcb

#27
Device = 18F46K22
 Xtal = 16 

'1. PRICLKEN (CONFIG1H<5>)
'2. PRISD (OSCCON2<2>)
'3. PLLCFG (CONFIG1H<4>)
'4. PLLEN (OSCTUNE<6>)
'5. HFOFST (CONFIG3H<3>)
'6. IRCF<2:0> (OSCCON<6:4>)
'7. MFIOSEL (OSCCON2<4>)
'8. INTSRC (OSCTUNE<7>)
    
''______________INTERNAL OSC 16MHZ PLL AKTIF______________________________
'    OSCCON.0 = 0        'SCS FOSC3 MAIN OSCILLATOR SELECT
'    OSCCON.1 = 1
'    OSCCON.2 = 1
'    OSCCON.3 = 0 
'    OSCCON.4 = 1 
'    OSCCON.5 = 1 'FOR 16MHZ
'    OSCCON.6 = 1
'    OSCCON.7 = 0
    
'    OSCTUNE.0   =   1  
'    OSCTUNE.1   =   1
'    OSCTUNE.2   =   1
'    OSCTUNE.3   =   1
'    OSCTUNE.4   =   1
'    OSCTUNE.5   =   0
'    OSCTUNE.6   =   1
'    OSCTUNE.7   =   1
''************************************************************  
Config_Start
   FOSC = HShp ; HS oscillator (high power > 16 MHz)
   PLLCFG = On ; Oscillator multiplied by 4
   PRICLKEN = OFF ; Primary clock can be disabled by software
   FCMEN = OFF ; Fail-Safe Clock Monitor disabled
   IESO = OFF ; Oscillator Switchover mode disabled
   PWRTEN = OFF ; Power up timer disabled
   BOREN = OFF ; Brown-out Reset disabled in hardware and software
   BORV = 285 ; VBOR set to 2.85 V nominal
   WDTEN = OFF ; Watch dog timer is always disabled. SWDTEN has no effect.
   WDTPS = 1 ; 1:1
   CCP2MX = PORTC1 ; CCP2 input/output is multiplexed with RC1
   PBADEN = OFF ; PORTB<5:0> pins are configured as digital I/O on Reset
   CCP3MX = PORTB5 ; P3A/CCP3 input/output is multiplexed with RB5
   HFOFST = OFF ; HFINTOSC output and ready status are delayed by the oscillator stable status
   T3CMX = PORTB5 ; T3CKI is on RB5
   P2BMX = PORTD2 ; P2B is on RD2
   MCLRE = EXTMCLR ; MCLR pin enabled, RE3 input pin disabled
   STVREN = OFF ; Stack full/underflow will not cause Reset
   LVP = OFF ; Single-Supply ICSP disabled
   XINST = OFF ; Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
   Debug = OFF ; Disabled
Config_End


     LCD_Type = Samsung							
'     LCD_Type = GRAPHIC        
     Declare    LCD_X_Res   128
     Declare    LCD_Y_Res   64
     Declare GLCD_CS_Invert 1           
     LCD_DTPort = PORTD
     LCD_RSPin = PORTC.0
     LCD_ENPin = PORTC.3
     LCD_RWPin = PORTC.2 
     LCD_CS1Pin = PORTC.4
     LCD_CS2Pin = PORTC.5    
     Internal_Font = On
     Font_Addr = 0     
     Input  PORTD     
     Declare GLCD_STROBE_DELAY = 1
'************************************************************  
    Declare Adin_Res   10             
    Declare Adin_Tad    frc
    Declare Adin_Stime  50            
    ADCON1=%1110    'PORTA.0 ANALOG

    Hserial_RCSTA = %10010000 ' Enable serial port and continuous receive
    Hserial_TXSTA = %00100000 ' Enable transmit and asynchronous mode
    SPBRG   =   52'45'33
    Declare Hserial_Clear   =   On
    
;-------------SSPxSTAT-------------------------------------------------------
Symbol  BF = SSP2STAT.0         '0 = Receive not complete, SSPxBUF is empty
Symbol  CKE = SSP2STAT.6        '0 = Transmit occurs on transition from Idle to active clock state      
Symbol  SAMPLE = SSP2STAT.7     '0 = Input data sampled at middle of data output time
CKE = 0
SAMPLE = 0
;-------------SSPxCON1-------------------------------------------------------
SSP2CON1.0 = 0                  '0010 = SPI Master mode, clock = FOSC/64
SSP2CON1.1 = 1
SSP2CON1.2 = 0
SSP2CON1.3 = 0  

Symbol  CKP = SSP2CON1.4        'Clock Polarity Select bit
Symbol  SSP2EN = SSP2CON1.5     'Synchronous Serial Port Enable bit
Symbol  SSP2OV = SSP2CON1.6     'Receive Overflow Indicator bit(1)   
Symbol  WCOL = SSP2CON1.7       'Write Collision Detect bit

CKP = 1
SSP2EN = 1
SSP2OV = 0
WCOL = 0 
;-------------SSPxCON3-------------------------------------------------------
Symbol  BOEN = SSP2CON3.4       'Buffer Overwrite Enable bit

BOEN = 1

;-------------SSPxBUF-------------------------------------------------------


;-------------SSPxADD-------------------------------------------------------
'Baud Rate Clock Divider bits

;-------------SPI PORTLAR-------------------------------------------------------
'• SDIx must have corresponding TRIS bit set
'• SDOx must have corresponding TRIS bit cleared
'• SCKx (Master mode) must have corresponding TRIS bit cleared
'• SCKx (Slave mode) must have corresponding TRIS bit set
'• SSx must have corresponding TRIS bit set
    
Symbol CS = PORTB.0    ' Data In (SPI mode)        
Symbol CLK = PORTB.1
Symbol DIN = PORTB.2

Input    CS
Output    CLK 
Input  DIN
Output  PORTB.3


    Dim OKUMA   As  Word
    Dim okuma_2 As  Byte
    Dim okuma_3 As  Byte
basla:
'            SSP2EN = 1
            Low CS
            SSP2BUF = 0
            While   BF = 0  :Wend    
            OKUMA = SSP2BUF
            nop
            nop
            nop
            SSP2BUF = 100
            While   BF = 0  :Wend
            okuma_2 = SSP2BUF
            nop
            nop
            nop
            SSP2BUF = 0
            While   BF = 0  :Wend
            okuma_3 = SSP2BUF
            High    CS
            
            DelayMS 500
            Print   At  1,1, Dec OKUMA, "  "
            Print   At  2,1, Dec okuma_2, "  "
            Print   At  3,1, Dec okuma_3, "  "
            
DelayMS 500
GoTo    basla 

Include "FONT.INC"         

pcb

program yukarıda gönderdiğimden çok daha uzundu keserek küçülttüm biraz bu arada gönderdiğim kısmı yüklediğimde spi çalışmaya başladı tabi biraz saçma, MSB14-15 kısmını 3 diğer 8 er bitleri 255 görüyor buda bir gelişme, programın diğer kısımlarını düzeltip spi çakışmasını önlemeye çalışıcam.

pcb

18f46K22 işlemci ile SPI iletişimi sağlayamadım, sadece spi tanımlı olsa bile SSPEn = 1 aktif edildiğinde ekranda hiç bir görüntü alamadım ve sebebini bulamadım.