PIC専用のスレ Part35at DENKI
PIC専用のスレ Part35 - 暇つぶし2ch913:774ワット発電中さん
12/02/14 21:24:00.80 eQC/p+wq
PIC初心者です。
SPIを使ったPIC間通信がうまくいかず、行き詰まってしまったので質問させてください。
言語はC言語で、コンパイラはC18,C30を使用しています。
PIC24FJ64GB002(以降GB002)をマスター、PIC18F26K22(以降26K22)をスレーブとしています。
両方ともクロックは外部8MHzを、4倍にして使用しています。
ピン接続は以下のようになっています。(SSは今回使用しません)
GB002 | 26K22
SDO1: RB3(RP3) | SDI2: RB2
SDI1: RB2(RP2) | SDO2: RB3
SCK1: RB1(RP1) | SCK2: RB1

GB002のRB15にスイッチ、RB7,8にLEDがついています。
26K22にはRB0にLEDがついています。
GB002のスイッチを押すと、SPI通信で26K22にデータを送り、データがきちんと届いたら26K22のLEDを光らせるテストプログラムを作成していました。
しかし、スイッチを押しても26K22側のLEDはつかないため、通信がきちんと行われていないものと思われます。
どうすればきちんとSPI通信が行えるでしょうか?どなたかご教授していただけませんか?
以下にソース(main関数)を記述します。
//GB002
int main(void){
// 内蔵Pull up setting
CNPU1 = 0x1800;// CN0~15
CNPU2 = 0x0000;// CN16~CN30
// Disable Watch Dog Timer
RCONbits.SWDTEN = 0;
// SPI port setting
RPOR1bits.RP2R = 8; // RP1 is SCK output
RPINR20bits.SDI1R = 2; // RP2 is SDI Input
RPOR1bits.RP3R = 7; // RP3 is SDO Output
// all A/D converter disabled
AD1PCFG = 0xFFFF;
TRISA=0;
TRISB=0;
TRISBbits.TRISB2 = 1; // SDI port
TRISBbits.TRISB15 = 1;
PORTA=0;
PORTB=0;
SPI1Init();
CloseSPI1();
#define config1 (SPI_MODE16_OFF |SPI_SMP_ON | MASTER_ENABLE_ON | SEC_PRESCAL_4_1)
#define config2 (FRAME_ENABLE_OFF)
#define config3 (SPI_ENABLE)
OpenSPI1(config1,config2,config3);
ConfigIntSPI1(SPI_INT_EN | SPI_INT_PRI_4);
// main loop start
while(1){
if(PORTBbits.RB15 == 0){
// SPI start
// スイッチを押すとRB8のLEDがつき、通信が終わるとRB7のLEDがついて、RB8のLEDが消える。
PORTBbits.RB8=1;
PORTBbits.RB7=0;
WriteSPI1(0x01);
while(SPI1STATbits.SPITBF);
PORTBbits.RB7=1;
DelayMs(500);
PORTBbits.RB8=0;
}// SPI end
}// main loop end
CloseSPI1();
return 0;
}


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch