SPI interface

Başlatan mech, 22 Aralık 2006, 01:18:20

mech

Arkadaşlar pbp ile SPI nasıl yapılır. Daha açık olarak; sclk pininden göndediğimiz kare dalganın artan kısımlarında göndereceğimiz mesela 15 bitlik veriyi nasıl senkronize bir şekilde iletebilirim.
  Kullanacağım sistemde CS, SCLK, DI VE SAC pinleri mevcut.

high portb.1 'sclk artış
high portb.2 ' DI ' ya "1" gönderme
pasueus 10
low portb.1 ' sclk iniş
pauseus 10
...
Böyle olur mu?

Bilgisi olan arkadaşlar yardım ederlerse çok sevinirim. Teşekkürler.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

z

Kullanacagin cipin adini hatta dokumanini verirsen timing diagramindan bakip uzerinde konusabiliriz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mech

kullanacağım chipin adı APR6008.
döküman:APR6008 datasheet
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

bana kimse yardımcı olamayacak mı?
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

z

4.sayfadaki grafikleri anladinmi?

Bir porttan bit bazinda veri cikartip almayi becerebiliyormusun?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mech

veri çıkartıp alabilirim de almak ne işe yarayacak onu anlamadım. Grafikte bir zamanlama var. bu zamanlamaya riayet edebilmek için high low ve pause komutları yeterli mi yoksa senkronizasyonu başka bir komutla mı sağlayacağım pic16f877'nin CS pinini kullanmak gerekiyor mu. Saygılar...
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

Araştırmalarım sonucunda şu kodları buldum:
dataout	VAR     BYTE[8]			'Data out array

SSPEN	VAR		SSPCON.5		'SSP Enable bit
CKP		VAR		SSPCON.4		'Clock Polarity Select
SMP		VAR		SSPSTAT.7		'Data input sample phase
CKE		VAR		SSPSTAT.6		'Clock Edge Select bit
SSPIF	VAR		PIR1.3			'interrupt flag - last bit set

.
.
.
		Return


Buna benzer bir kod verebilir ya da çalışma mantığını anlatabilir misiniz?
TEŞEKKÜRLER...
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mhk

Aşağıda 2.4 GHZ RF modul SPI haberleşme programı ve bu haberleşmenin yaıldığı sistemin SPI sinyal şekilleri. Burda SPI sinyalleri anlamak için hangi noktalarda hangi sinyallerin ve hangi kontrol uçlarının 0 yada 1 yapılması gerektiği öğrenilmeli. Örneğin bendeki SS ucu clock (SCLK ) sinyali verilmeden önce 0'a çekiliyor. ( Programda yazma veya okuma alt programlarında nss=0 veya CS ) sonra MOSI ( Master out, slave in SPI signal from MCU to xxx chip veya DO) ve MISO ( Master in, slave out SPI signal from xxx chip to MCU veya DI) şeklinde olacaktır. Kısaca proton basic kullanarak shin ve shout komutları kullanarak ve kullandığın chip'te kontrol uçları SCLK , DI , DO , CS uçlarını belirleyip bu komutları kullanabilirsin.



'************ ANA PROGRAM ****************
basla:
Npd=1
adres=$23:bilgi=%00000001:gosub Wspi      'Power last 3 bit Reg_pa 0x
gosub Send_rf
Npd=0
delayms 300

goto basla

'*****************************************
'*-*-*-*-*-*-*-*-*-*-**-*-*
'*-* RF Transmission *-*
'*-*-*-*-*-*-*-*-*-*-**-*-*
Send_rf:
    etX=1
adres=$23:bilgi=%00000001:gosub Wspi            'Power last 3 bit Reg_pa 0x

For J = 1 To 10
    adres=$0F:bilgi=j:gosub Wspi            'Empty interrupt enabled
    cls
  print at 1,1,"Gonder"
  print at 2,1,dec bilgi
  delayms 150

Next J

    etX=0
 
return

'************** SPI YAZMA ALT PROGRAMI **********
Wspi:
 @ clrwdt

  nss=0
  adres.7=1:adres.6=0
    shout mosi,sck,msbfirst,[adres ,bilgi]  
  nss=1
 
return

'************** SPI OKUMA ALT PROGRAMI **********
Rspi:
 @ clrwdt

  nss=0
  adres.7=0:adres.6=0
    shout mosi,sck,msbfirst,[adres]                 
    Shin  MISO,SCK,MSBPre,[verial]                          'Power last 3 bit Reg_pa 0x23
  nss=1

return

end


"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mech

cevabın için teşekkürler. Peki şu kodu inceler misiniz.
SSPEN	VAR		SSPCON.5	'SSP Enable bit
CKP		VAR		SSPCON.4	'Clock Polarity Select
SMP		VAR		SSPSTAT.7	'Data input sample phase
CKE		VAR		SSPSTAT.6	'Clock Edge Select bit
SSPIF	VAR		PIR1.3		'SPI interrupt flag
data1            var             byte
dataout         VAR             byte
i		VAR		bYTE		'loop counter
a		VAR		BYTE[6]		'Holds


        ADCON1 = 7			'Set PORTA and PORTE to digital
        Low PORTE.2			'LCD R/W line low (W)
      			'Wait for LCD to start up

		TRISC = 0			'set PORTC I/O
		
		SSPEN = 1			'enable SPI pins
		CKP = 1			'clock idle low
		CKE = 1			'transmit on idle to active transition
		SSPIF = 0			'clear buffer full status
		SMP = 0				'sample in middle of data
		
		


getdata:					

dataout=%011011011011011
for i=1 to 15
	
data1= dataout<<(15-i)
data1= data1>>i-1

SSPBUF=DATA1
gosub letclear

next

GOTO GETDATA		

letclear:

		IF SSPIF = 0 Then letclear	'wait for SPI interupt flag
		PauseUs 25					'25uS fudge factor
		SSPIF = 0					'reset flag
		Return


SS'i kullanamıyorum ve çalışmıyor.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mech

PİCBASİC PRODAKİ SHİFTOUT KOMUTU İLE YAPILABİLİR Mİ tşk.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mhk

shiftout ve shiftin komutları ile yapılabilir. Proton ile yaptığım uygulamayı incelemen gerekir. Bu uygulamayı picbasic proya dönüştürebilirsin.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mech

Kodu inceledim. Fakat benim ilgilendiğim çipte SCLK'nın artan yani 0'dan 1'e geçiş kısımlarında data bitlerinin erbiri okunuyor. SHIFTOUT komutunda böyle bir özellik yok ve datanın 0 olan bitleinde clock kapanıyor. Yorumunuz nedir?(çalıştıramadım)
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır

mhk

Burayı inceledinmi ?
SHIFTOUT DataPin,ClockPin,Mode,[Var{\Bits}...]

Mode         Mode No.             Operation
LSBFIRST       0             Shift data out lowest bit first. Clock idles low. 
MSBFIRST       1             Shift data out highest bit first. Clock idles low. 
               4             Shift data out lowest bit first. Clock idles high. 
               5             Shift data out highest bit first. Clock idles high.

Daha detaylı bilgi için picbasicpro komut açıklamaları pdf'si yada microcodestudio kullanıyorsanız. Help menüsünden help topic kısmı ve çıkan yardım menüsünden shiftout yazıp kullanımı hakkında detaylı bilgiye ulaşabilirsiniz. Burda Mode no kısmına dikkat etmek gerekiyor. Mode 0 ve 1 olduğu zaman, clk düşen kenar.4 ve 4 olduğu zaman, clk yükselen  kenar datayı işler.
"Ya olduğun gibi görün, Ya da göründüğün gibi ol..." Mevlana

mech

Sağolun Ben de az önce farkettim.
Bilginin Efendisi Olmak İçin Çalışmanın Kölesi Olmak Şarttır