前提・実現したいこと
dspicを用いてSPI通信を介して波形発生器(AD5932)の掃引周波数をチャンネルごとに変更したい。
例)
1CH:0.11MHz0.1MHz
2Ch:0.01
1CHおよび2CHを交互に動作させたい
発生している問題・エラーメッセージ
1パターンの周波数掃引(0.1~1MHz)を1CHおよび2CHに適用することはできていますが、チャンネルごとに掃引周波数を変更する方法が分かりません。
該当のソースコード
/*** SPI設定パラメータ クロック15MHz(Max20MHz) ***/ unsigned int SPICONValue = FRAME_ENABLE_OFF & FRAME_SYNC_INPUT & ENABLE_SDO_PIN & SPI_MODE16_ON & SPI_SMP_ON & SPI_CKE_ON& CLK_POL_ACTIVE_HIGH & MASTER_ENABLE_ON & SEC_PRESCAL_1_1 & PRI_PRESCAL_1_1; unsigned int SPISTATValue = SPI_ENABLE & SPI_IDLE_CON & SPI_RX_OVFLOW_CLR; /** AD5932の初期設定 **/ void DDSset(void) { /* コントロールレジスタ書き込み */ SPI_CS=0; WriteSPI1(0x6F7); delay_ns(500); SPI_CS=1; delay_ns(1000); /* 開始周波数設定 (0.1~1MHz)*/ SPI_CS=0; WriteSPI1(0xC312);//LSB delay_ns(500); SPI_CS=1; delay_ns(1000); SPI_CS=0; WriteSPI1(0xD008);//MSB delay_ns(500); SPI_CS=1; delay_ns(1000); /* 周波数インクリメント設定 */ SPI_CS=0; WriteSPI1(0x209F);//LSB delay_ns(500); SPI_CS=1; delay_ns(1000); SPI_CS=0; WriteSPI1(0x3000);//MSB delay_ns(500); SPI_CS=1; delay_ns(1000); /* インクリメント数設定 */ SPI_CS=0; WriteSPI1(0x1FA0); delay_ns(500); SPI_CS=1; delay_ns(1000); /* インクリメント・インターバル設定 */ SPI_CS=0; WriteSPI1(0x4000); delay_ns(500); SPI_CS=1; delay_ns(1000); } /*** タイマ2 割り込み処理関数 ***/ void __attribute__((__interrupt__, __shadow__))_T2Interrupt(void) { IFS0bits.T2IF=0;//割込みフラグクリア dds_CTRL=1; delay_ns(200); dds_CTRL=0; SigIn[0] = ReadADC12(0);// Input to A/D converter () Data_new = SigIn[0]+0x8000;//0~FFFFで与える 0x8000=32768 n=n+1; // 最大値検出(トーナメント) // if((Data_new > TopDataV) ) { TopDataV = Data_new; TopDataf = n; } /*** 掃引終了判定* **/ if(n>=4000) { count=count+1; Vmin[count]=TopDataV; fmin[count]=TopDataf; TopDataV=0; TopDataf=0; // swiching // if(TX==1 && RX==4){TX3();TX=3;RX3();RX=3;}//1CH else if(TX==3 && RX==3){TX1();TX=1;RX4();RX=4;ftx=1;}//2CH if(ftx==1){ftx=0;count=0;} dds_Int=1; delay_ns(200); n=0; dds_Int=0; } } /*** メイン関数 ***/ void main(void) { /// Open SPI クロック 30MHz/1=30MHz(33ns) OpenSPI1(SPICONValue,SPISTATValue); INTCON1bits.NSTDIS=1;//多重割り込み禁止 SPI_CS=1; dds_CTRL=1; /** DDSの初期設定 **/ DDSset();//掃引周波数決定 dds_Int=0; CloseSPI1(); ///初期ch定義 TX1();TX=1; RX4();RX=4; /// ADC初期設定 OpenADC12(Config1,Config2,Config3,ConfigPort,ConfigScan); SetChanADC12(Channel0); //タイマ2設定,OPEN Fs2=400000;//Tscan=0.2s_20000,Tscan=0.05s_80000 SetTime2 = ((Fcy/Fs2)+1);//((30MHz/240000) + 1) OpenTimer2(T2_ON & T2_GATE_OFF & T2_PS_1_1 & T2_SOURCE_INT , SetTime2); ConfigIntTimer2(T2_INT_PRIOR_4& T2_INT_ON); while(1) { }
補足情報(FW/ツールのバージョンなど)
dsPIC30f3013
c言語
MPLAB
AD5932
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/01 04:15 編集
2018/10/01 07:51