
こんちは。
まだ、車への接続はできてませんが、超簡易A/Fメーターを作成しました。
【ハードウェア】
添付図のようになります。
RGB Diを、1個と、8bit 8pin PICの12F675を1個。OP AMPを1個と、抵抗、コンデンサ少々。
あと、電源IC(今回は、5VのREG)
【ソフトウェア】
イグニッションONしてから、暫く、オープニングデモとして、RGB LEDがカラフルに点灯。
O2フィードバック領域は、BLUE点灯。
LEAN領域は、GREEN点灯・・・アクセル、戻した時とか。
RICH領域は、RED点灯・・・アクセル、ガバッと踏んだ時とか。
ちょっち、CR-Zも、意識してたり・・・。
【その他】
プレには、Narrow Band O2センサーしかついていませんので、A/F=14.5近辺で、0-1Vが、急激に
変化します。下記、Programは、純正ECMが、FB(フィードバック)かけている状態なのか、
RICH=濃い=1V なのか、LEAN=薄い=0V なのか、大雑把にしか判別できません。
余り、色がころころ変化するようであれば、__delay_ms(5); の5を大きくします。
サンプリングの速度がその分、遅くなりますが、LEDの色は安定するはず。
【Program】
例によって、スペースがぐちゃぐちゃで、見にくいですが・・・。
イルミの部分は、プログラムまでして機能させていませんが、減光(50% Duty)に使う予定でした。
/* VDD 5V P12F675
Hard ware Pin assignment list
1 VDD 8 VSS
2 GP5 O(not used) 7 GP0 O(BLUE)
3 GP4 I(AD3 AF IN) 6 GP1 O(RED)
4 GP3 I(Illumination) 5 GP2 O(GREEN)
*/
/*MEMO 10bitADの下位8bitを使用(1.25Vまでは、下位8bitで測定可)
0.1V=&H0014
0.2V=&H0028
0.3V=&H003C
0.7V=&H008F
0.8V=&H00A3
0.9V=&H00B8
1.0V=&H00CC
*/
#include
//定型文なので、変えない
__CONFIG(0x31C4); //内蔵OSC使用等
#define MHz 000000
#define _XTAL_FREQ 4MHz //Delay用 4MHz設定
static void Delay_100msec(); //待ち時間
unsigned char i,ii;
//Delay 100msec --------------------------------
void Delay100(unsigned char time){
while(time--){
__delay_ms(100); //total 100ms
}
}
// ==================== PICの初期化 ===========================
static void pic_init(){
OSCCAL = _READ_OSCCAL_DATA(); // OSC出荷補正値で公正
GPIO = 0; // PORT設定をリセット
ANSEL = 0x18; // Fosc/8,AN3=ANALOG IN
ADCON0 = 0x8D; // Right,Vdd,AN3,ADON
TRISIO = 0x10; // GP0,1,2,5:out GP4 IN
ADFM = 1; // 10bitADで使用。下位8Bitのみ使用
}
// ==================== メイン処理 ===========================
main(){
//OPENING --------------------------------
pic_init();
Delay100(20); // WAIT 2S
for(ii=0;ii<=2;ii++){
for(i=0;i<=7;i++){
GPIO = i;
Delay100(5); // WAIT 0.1S
}
}
GPIO = 0;
Delay100(20); // WAIT 2S
//AF 電圧検出 --------------------------------
while(1){
GODONE = 1; // AD変換開始
while(GODONE); // AD完了待ち
if(ADRESL<0x14){
GPIO = 0x04; // LEAN 0.1V以下(GREEN)
}
else if(ADRESL<0x3C){
GPIO = 0x05; // LEAN 0.1-0.3V(GREEN&BLUE)
}
else if(ADRESL>0xB8){
GPIO = 0x02; // RICH 0.9V以上(RED)
}
else if(ADRESL>0x8F){
GPIO = 0x03; // RICH 0.7-0.9V(RED&BLUE)
}
else{
GPIO = 0x01; // AF14.5付近 0.3-0.7V(BLUE)
}
__delay_ms(5); // WAIT 5mS
// Illumination ON時の減光処理--------------------------------
// if(GPIO3=1){
// GPIO = 0x00; // LED OFF(50%Duty)
// __delay_ms(5); // WAIT 5mS
// }
// else{
// __delay_ms(5); // WAIT 5mS
// }
}
}
Posted at 2010/05/03 12:51:50 | |
トラックバック(0) |
PIC工作 | クルマ