// RX受信機チェッカー // 0925k26rx_checker.c // ラジコン用受信機とサーボ間に接続し、信号をチェック #include<12f683.h> #fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOMCLR,NOBROWNOUT //ウオッチドックタイマ無し、パワーアップタイマ使用 //プロテクト無し、MCLRなし #use delay(CLOCK=8000000) //8MHz駆動 #byte GP=5 #bit RXSIG=GP.3 /* LED Port #bit LED1=GP.2 #bit LED2=GP.1 #bit LED3=GP.0 #bit LED4=GP.5 #bit LED5=GP.4 */ #define ON 1 #define OFF 0 #define HI 1 #define LOW 0 #define LED1ON 0x04 #define LED2ON 0x02 #define LED3ON 0x01 #define LED4ON 0x20 #define LED5ON 0x10 #define LEDALLON 0x37 #define LEDALLOFF 0x00 //メインルーチン void f_flash(int led) { GP=led; delay_ms(50); GP=LEDALLOFF; delay_ms(50); } void s_flash(int led) { GP=led; delay_ms(100); GP=LEDALLOFF; delay_ms(100); } main(){ int i,gcount; signed long rx_count; //パルスカウント用 setup_oscillator(OSC_8MHz); setup_comparator(NC_NC); //デジタル入力切り替え setup_adc_ports(NO_ANALOGS); //アナログ未使用 set_tris_a(0x08); //GP3入力、他は出力 /* GP 5 4 3 2 1 0 0 0 1 0 0 0 */ /* LED Pattern data GP 5 4 3 2 1 0 LED_No1 0 0 0 1 0 0 0x04 2 0 0 0 0 1 0 0x02 3 0 0 0 0 0 1 0x01 4 1 0 0 0 0 0 0x20 5 0 1 0 0 0 0 0x10 */ for(i=0;i<3;i++){ GP=LEDALLON; delay_ms(100); GP=LEDALLOFF; delay_ms(100); } while(1){ // シグナル検出 while(RXSIG==LOW){ } //カウント処理 rx_count=0; while(RXSIG==HI){//Low、Hiループは1回10μSに調整済み delay_us(6); rx_count=rx_count+1; } //点灯処理 GP=LEDALLOFF; if(rx_count<122){ //最スロー LED1点灯 GP=LED1ON; } else if(rx_count<132){//スロー LED1点滅 f_flash(LED1ON); } else if(rx_count<138){//LED2 点灯 GP=LED2ON; } else if(rx_count<149){//LED2 点滅 f_flash(LED2ON); } else if(rx_count<155){//ニュートラル LED3点灯 GP=LED3ON; } else if(rx_count<165){//LED4 点滅 f_flash(LED4ON); } else if(rx_count<172){//LED4点灯 GP=LED4ON; } else if(rx_count<182){//ハイ LED5点滅 f_flash(LED5ON); } else{ //フルハイ LED5点灯 GP=LED5ON; } } }