|
|
View previous topic :: View next topic |
Author |
Message |
lokken
Joined: 21 Feb 2010 Posts: 17
|
Basic Read/Write Operation at SPI module |
Posted: Tue Jan 25, 2011 1:46 am |
|
|
I want to use SPI module of PIC 18f14k50. And first of all I wrote basic read/write commands for testing but I didn't achieve. My aim is sending a byte (data=15) with SPI module of 18f14k50. But I see wrong value at the serial port monitor. My compiler verison is 4.114. My codes:
Master
Code: |
#include <18f14k50.h>
#include <PIC18f14k50_registers.h>
#FUSES NOWDT,XT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOMCLR
#use delay(clock=4000000)
int16 timeout;
int temp,data;
void main(void)
{
data=21;
TRISC=0x00;
TRISB=0b00110000;
sspcon1=0b00100000;
sspstat=0b00100000;
temp=SSPBUF;
while(1)
{
SSPBUF=data;
while(!BF&&timeout<5000){
delay_us(1);
timeout++;
}
timeout=0;
temp=SSPBUF;
delay_ms(100);
}
} |
SLAVE
Code: |
#include <18f14k50.h>
#include <PIC18f14k50_registers.h>
#FUSES NOWDT,XT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NOMCLR
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_B7,rcv=PIN_B5)
int16 timeout;
int temp,data;
void main(void)
{
TRISB=0b01110000;
TRISC=0x00;
SSPCON1=0b00100101;
SSPSTAT=0b01000000;
temp=SSPBUF;
while(1)
{
data=SSPBUF;
while(!BF&&timeout<5000){
delay_us(1);
timeout++;
}
timeout=0;
printf("%d\r",data);
}
}
|
I just want basic read/write operation in SPI modes. Could you propose anything? I tried same codes for PIC16f877 and it is worked but I couldn't do it for 18f14k50.
Thanks |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Jan 25, 2011 3:03 pm |
|
|
I don't know why you are writing directly to registers. I tested the
setup_spi() and spi_write() functions with vs. 4.114 and they work OK.
I see pulses on SDO (pin C7) and SCK (pin B6). Here is the test program:
Code: |
#include <18F14K50.H>
#fuses INTRC_IO, NOWDT, PUT, BROWNOUT, NOLVP, CPUDIV1
#use delay(clock=4000000)
#define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)
#define SPI_MODE_1 (SPI_L_TO_H)
#define SPI_MODE_2 (SPI_H_TO_L)
#define SPI_MODE_3 (SPI_H_TO_L | SPI_XMIT_L_TO_H)
//=================================
void main()
{
setup_spi(SPI_MASTER | SPI_MODE_0 | SPI_CLK_DIV_16);
while(1)
{
spi_write(0x33);
delay_us(100);
}
} |
This thread has an example of an SPI Master/Slave program for two PICs:
http://www.ccsinfo.com/forum/viewtopic.php?t=39145
Here's an SPI slave test program for a single PIC:
http://www.ccsinfo.com/forum/viewtopic.php?t=26888 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|