/*
* 超音波センサモジュールHC-SR04をタイマ1のゲート制御で 【16F1827】
* timer1_gate/main.c Created on 2024/04/23, 9:04
*/
// config1
#pragma config FOSC = INTOSC , WDTE = OFF , PWRTE = ON , MCLRE = ON , CP = OFF , CPD = OFF
#pragma config BOREN = OFF , CLKOUTEN = OFF , IESO = OFF , FCMEN = OFF
// config2
#pragma config WRT = OFF , PLLEN = OFF , STVREN = ON , LVP = OFF
#include <xc.h>
#include <stdio.h>
#include "aqm1602.h"
#define _XTAL_FREQ 8000000
long echo_time;
long dist;
char title[] = "Distance";
char data[16];
int main(void){
OSCCON = 0x72; // 8MHz
ANSELA = 0;
ANSELB = 0;
TRISA = 0b00010000; // RA5:MCLR RA0:Trig
TRISB = 0b00010011; // RB0:Echo RB1:SDA1 RB4:SCL1
PORTA = 0;
PORTB = 0;
T1CON = 0b00010001 ; // FOSC/4を選択 分周比1/2 タイマー1開始
T1GCON = 0b11010000 ;
// ゲート有効、Hiでカウント、シングルパルス、ゲートピン(RB0)
LCD_Init(); // LCDの初期化9iu8u0
// whileの直前においた
while (1){
// タイマ1のカウンタ準備
TMR1 = 0; // カウンタの初期化
T1GGO = 1; // シングルパルス検出待ち(ゲート制御開始))
// トリガ送信(10us)
RA0 = 1;
__delay_us( 10 );
RA0 = 0;
// エコー信号のON待ち
while (RB0 == 0){}
// エコー信号のOFF待ち
while (RB0 == 1){}
// 超音波の往復時間を取得
echo_time = TMR1;
// パルス時間から距離(cm)に変更
dist = (echo_time / 2) * 34 / 1000;
// 数値を文字列に変換
sprintf(data, "%ld", dist);
LCD_clear();
LCD_home();
LCD_str(title);
LCD_locate(2,2);
LCD_str(data);
LCD_locate(2,6);
LCD_str("cm");
__delay_ms( 1000 );
}
}
// 吉野さんオリジナルだが 超音波距離センサ | DIYのホームページ (ease-labs.com)
// も参考にした whileのたびにlcd_initは冗長なのでwhile直前においた
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
ch340が乗っているUSB書き込み機でprogにしてファームウエア書き込む いつのまにか。。。。。
---------------------------------------------------------------------------
3.3Vレギュレーターとの接続方法 (hiramine.com) 7223の使い方
もう一つの小さい2950は以下を参考に
0 件のコメント:
コメントを投稿