mzeeのプロフィール

@mzee mzee
ありがとう数3
質問数0
回答数13
ベストアンサー数
1
ベストアンサー率
25%
お礼率
0%

  • 登録日2018/04/19
  • 性別男性
  • 職業無職
  • PIC12F675、HC-SR04のプログラム

    PIC12F675にプログラムをMPLABX IPEで書き込んで、超音波センサ HC-SR04の距離が5cm以下の時にブザーが鳴る(出力が5Vになる)ようにしたいです。 以下のプログラムで出力は、距離に関わらず5Vか0Vで一定になっています。 プログラムに間違いがあれば、教えていただけないでしょうか。 #include <xc.h> #include <stdio.h> //12F675 #include <stdlib.h> #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-Up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #define _XTAL_FREQ 32000000 #define TX_UART_SIZE 3 #define SONIC_TRIG GPIO5 #define SONIC_ECHO GPIO4 #define SONIC_TEMP GPIO2 #define SONIC_BUZZ GPIO1 #define IO_OFF 0 #define IO_ON 1 #define TIME_OFF -1 #define TIME_UP 0 #define TIME_START_H 0xD8 #define TIME_START_L 0xF0 #define TIME_LED_CNT_MAX 5 #define TIME_LED_CNT2_MAX 15 unsigned char cnt10ms; char TimerLed1; char TimerLed2; int main(int argc, char** argv) { long echo_time; long dist; OSCCAL = 0b00110000 ; // 内部クロック8MHz ANSEL = 0x00 ; // AN未使用、デジタルI/Oに割当てる CMCON = 0x07; // コンパレータ未使用 TRISIO = 0b00011100 ; // RA2,3,4を入力にし、他は出力に割当てる GPIO = 0b00000000 ; // 出力ピンの初期化(全てLOWにする) T1CON = 0b01110000 ; // ゲート有効、Hiでカウント、単一パルス、T1Gピン TMR1ON = 1; // タイマー1開始 while(1) { // タイマ1のカウンタ準備 TMR1 = 0; // カウンタの初期化TMR1 = 0; // トリガ送信 SONIC_TRIG = IO_ON; __delay_us( 10 ); SONIC_TRIG = IO_OFF; // エコー信号のON待ち while( SONIC_ECHO == IO_OFF ) { } // エコー信号のOFF待ち while( SONIC_ECHO == IO_ON ) { } // 超音波の往復時間を取得 echo_time = TMR1; // 往復時間から片道の時間にする echo_time /= 2; // パルス時間から距離(cm)に変更 dist = echo_time * 34 / 1000; if( dist <= 5 ) //距離5cm以下でブザー出力 { (SONIC_BUZZ = 1); } else { (SONIC_BUZZ = 0); } __delay_ms( 1000 ); } return (EXIT_SUCCESS); }

  • 4点でのスイッチの切り替えについて

    以下のようにA,B,C,Dという端子があったとして、 A- -B C- -D ・ABを接点している際は、CDを開放 A-B C- -D ・CDを接点している際は、ABを開放 A- -B C-D というように、ABかCDのどちらかだけ接点、片方は開放されているような状態をスイッチによって実現したいと考えております。 その際にどういったスイッチが使用可能でしょうか。 こういうスイッチなら使えるといったように、部品含めて教えていただけますと助かります。 よろしくお願い致します。

  • 超音波センサの距離が5cm以下の時にブザーを鳴らす

    コンフィギュレーションビットが少ないPIC12F675を使って 以下のURLを参考に、超音波センサの距離が5cm以下の時に ブザーが鳴るプログラムを作ることは可能でしょうか。 http://diy.ease-labs.com/?page_id=4578 自分で書き込んだプログラムでは出力GP1から常に5Vが出ていて、コンフィギュレーションビットの設定不足か、他のプログラム内の設定が足りないことが原因だと考えています。

  • PICコンパイラのインストールについて

    エラーメッセージ variable has incomplete type 'void'を消すためにPICコンパイラ XC8 v1.45をインストールしたいです。 公式サイトには最新版のコンパイラだけ、インストールのリンクがあります。 XC8 v1.45をインストールできるサイトを、教えていただけないでしょうか。

  • 計装用DC4mA~20mAについて

    教えてください。 インバータ更新工事の際、 インバータから外部出力している、出力電流を外部表示しているのですが、インバータデジオぺ表示電流と外部出力電流表示に違いがあったため、ゲイン調整をしました。補正はできたのですが、使用状況から、本来手順のオフセット調整(最高周波数運転)しないで、ゲイン調整をしました。これから、懸念材料で最高周波数(定格電流際)スケールオーバーし正しい電流値が表示されない可能性があると考えられるのですが、下記の測定データから最高周波数(定格電流)の際の出力電流から出力されるDC4~20mAの値は、計算で解くことは、可能性でしょうか? :DC4-20出力電流 6.92mA :表示電流 5.2A :ゲイン調整値(調整範囲50-200%)150%  このデータから最高周波数(定格電流)15.8Aの際、DC4-20出力電流はどのくらいか、計算で確認は可能でしょうか、アドバイスをいただきたいです。 オーバースケールのときの対処法もアドバイスいただきたいです。(ただし疑似的に最高周波数の運転は、出来ない状況です)