mikoroCに関する質問、ノウハウ等の情報交換の場です。

mikroC情報交換

26546
mikroCでプログラミング

16F88をmikoroCでプログラム - 吉高

2009/04/03 (Fri) 14:21:48

管理人様はじめまして。お世話になります。早速ですが、おねがいがございます。車に標準装備されてるバキュームセンサーを使いhttp://www.jaspa-oita.or.jp/jissen/2002/j_1407.html センサーの特性図です。この出力電圧をA/D変換してLCDに数字で-○○○mmHgと表示させる様にC言語でプログラム書いていただくこと出来ませんでしょうか?ご検討頂けると幸いです。

Re: 16F88をmikoroCでプログラム kana

2009/04/23 (Thu) 16:37:37

回答がないようなので mikroC の勉強のためにプログラムを作ってみました。知っているコマンドの組合わせだけです。もっと単純にできるかもしれません。また、正常に動作するかは保証できません。特にLCDはよく判りません。一応ソフトデバックは実施済みです。

/**
* LCD表示(基礎) LCD 4bit
* Help:LCD (4-bit interface)Library
*
* PIC16F88
*
* A/D: RA3 (圧力の電圧値 0V-5V)
* DI : RA0 "0" ノンターボ車、"1" ターボ車
*
* LCD制御pin R/W:RB0 RS:RB2 E:RB3
* LCDデータpin D4:RB4 D5:RB5 D6:RB6 D7:RB7 
*
* Clock: 8.0MHz 内蔵発振器使用
* Device Flags:
* _CP_OFF _CCP1_RB3 _DEBUG_OFF _WRT_ENABLE_OFF
* _CPD_OFF _LVP_OFF _BODEN_OFF _MCLR_OFF _PWRTE_ON
* _WDT_OFF _INTRC_IO _IESO_ON__CFG2 _FCMEN_ON__CFG2
*
* MikroC 7.0.0.3
*/

char str1[] = "nonturbo";
char str2[] = "turbo";
char str3[] = "mmHg";
char str4[7];
char str5[12]= "-";
unsigned int temp_res;
unsigned long temp_x;
unsigned long press;
unsigned int pressN;
void main(){

OSCCON = 0b01110000; //内蔵クロック8MHz使用に設定
//A/D変換clock設定 0.125us*16倍=2.0us 
ADCON1.ADCS2=1;
ADCON0.ADCS1=0;
ADCON0.ADCS0=1;

ANSEL = 0b00001000; //RA3 アナログ使用
PORTA = 0b00000000; //PORTAの中身をきれいにする
PORTB = 0b00000000; //PORTBの中身をきれいにする

TRISA = 0b00001001; //RA0,RA3:入力に設定、他は0:出力
TRISB = 0b00000000; //PORTBを全て0:出力に設定

//Lcd_Config(*port, RS, EN, WR, D7, D6, D5, D4);
Lcd_Config(&PORTB,2,3,0,7,6,5,4); //LCDのピン接続設定
//Lcd_Init(&PORTB); //LCD初期化 この行は削除する必要がある為コメントとした

Lcd_Cmd(LCD_CLEAR); //表示の消去


do {
//アナログデータの取得 10bit(0~1023)
temp_res = Adc_Read(3); // Get results of AD conversion
// temp_res = 573; // デバック用
if(PORTA.F0 ==0){ // ノンターボ車の処理
if(temp_res >= 737){ // 3.6V以上の時 0気圧
pressN =0;
}
else if(temp_res <= 328){ // 1.6V以下の時 -500気圧
pressN =500;
}
else{
temp_x = (temp_res -328); //アナログ値を気圧に変換
temp_x = temp_x * 122;
temp_x = temp_x / 100;
press =(500-temp_x);
pressN =press;
}
Lcd_Out(1, 1, str1); //LCD上位文字列表示
}
else{ // ターボ車の処理
if(temp_res >= 532){ // 2.6V以上の時 0気圧
pressN =0;
}
else if(temp_res <= 328){ // 1.6V以下の時 -500気圧
pressN =500;
}
else{
temp_x = (temp_res -328); //アナログ値を気圧に変換
temp_x = temp_x * 245;
temp_x = temp_x / 100;
press =(500-temp_x);
pressN =press;
}
Lcd_Out(1, 1, str2); //LCD上位文字列表示
}
IntToStr(pressN, str4); //数値を文字列に変換
strcat(str5,str4); // - oooooo 連結
strcat(str5,str3); // - oooooo mmHg 連結
Lcd_Out(2, 1, str5); //LCD下位文字列表示
Delay_ms(200); //200ms ウエイト
} while(1);
}

名前
件名
メッセージ
メールアドレス
URL
文字色
編集/削除キー (半角英数字のみで4~8文字)
プレビューする (投稿前に、内容をプレビューして確認できます)

Copyright © 1999- FC2, inc All Rights Reserved.