We have two pics talking using hardware SPI based on the spislave.pbp example.
Ref...Code:' SETUP CHIP CLOCK SPEED DEFINE OSC 20 ' Set all analog ports on 18F2420 to digital operation ADCON1 = 15 ' Allocate RAM SSPEN VAR SSPCON1.5 ' SSP Enable bit CKP VAR SSPCON1.4 ' Clock Polarity Select SSPOV VAR SSPCON1.6 ' Receive Overflow Indicator bit 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 SPIdata var byte ' data sent via SPI TRISC = %11011111 ' set PORTC I/O SSPCON1 = %00000101 ' configure SPI slave, no SS CKP = 0 ' clock idle low CKE = 0 ' transmit on idle to active transition SMP = 0 ' sample in middle of data SSPIF = 0 ' clear SPI interrupt SSPEN = 0 ' disable/enable SSP to reset port SSPEN = 1 ' enable SSP SPIdata = 0 ' zero out sending variable data SPIdata = 121 ' test data mainloop: GoSub senddata ' send test string of data GOSUB DELAY ' test delay GoTo mainloop ' do it forever delay: pause 20 ' pause for too long here causes problems with SPIdata return senddata: gosub letclear ' wait until buffer ready SSPBUF = SPIdata ' send SPIdata Return letclear: IF SSPIF = 0 Then letclear ' wait for interrupt flag SSPIF = 0 ' reset flag Return End
http://melabs.com/samples/PBP-mixed/spislave.htm
The slave pic simply needs to send data, whenever the master asks for it. But we noticed if you have too long of a delay in the slave pic then the data sent can be 255. Any ideas why the longer delay would cause this (see delay in above example)? The master PIC poles the Slave pic 25 times a second.
Thank you,
Rodney




Bookmarks