• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

のぼるざえもんの"通勤快速コペンとまと号(コペトマ)" [ダイハツ コペン]

車速連動間欠ワイパー(改)

カテゴリ : 外装 > ワイパー > その他
目的チューニング・カスタム
作業DIY
難易度
作業時間12時間以上

作業日 : 2013年10月25日
1
以前にご紹介しました車速連動ワイパーを改良(良になってればいいなw)しました。雨天テストでストレス無く動きましたので、またまた惜しみなく恥ずかし気もなく素人プログラムを全文紹介させていただきます♪
ワイパーの機能ごときにこだわり過ぎだと自分でも思っていますが、今回のはなかなかスゴイことになりましたよ(笑
2
経緯
PIC工作で間欠ワイパーを作って紹介していたのですがC言語に不慣れな状態で単純な条件分岐のみでプログラムを組んだため「PIC16F84A」で長時間インターバル時間を保存するには容量不足になり、「PIC16F88」という同じピン数でも無駄に多機能な1グレード上のPICを使いました。
ブログを読んでいただいたマイコンに詳しいみん友さんから「そのインターバルで容量オーバーになるのはアルゴリズムがおかしいのでは?」というご指摘を受けていましたが「ま、目標通りに動いてるしPIC本体が安いしOK!」ぐらいに思っていました。
しかし、実際に使って走行している内に修正したい箇所が少しばかり出て来たので過去のプログラムを見直すことにしました。
久しぶりに自分のプログラムを見直しましたら「あわっ!おわっ!?なんじゃこりゃー!?同じ処理のループ大杉!無駄な分岐大杉!!メモリ食い杉!!!」という事に気が付いてしまいましたので全プログラムを見直し修正することにしました。大体の動作は前のコピーですがね。

<動作概要>
ワイパー初回INT状態で4秒間欠ワイパー
初回起動時0km/hでINTにした時、次回の停車時までは4秒間欠動作
INT動作時に車速が得られた場合、通常4秒間欠。停車時2回4秒間欠動作後8秒間欠に切り替わり
ウォッシャースイッチONで拭き取り3回動作
ワイパーINT(4秒間欠)→OFF(記憶設定モード)→ワイパーINT(記憶動作モード)
ワイパーINT(記憶動作モード)初回起動時の車速と設定時間から間欠時間を算出、以降車速に合わせて間欠時間を変化
速度が上がるごとに無段階的に間欠時間を早く、速度が下がると間欠時間を遅く
0km/h時は0km/h時の間欠時間で2回動作後に0km/h時の2倍の間欠時間に延長
ワイパーINT(記憶動作モード)→起動直後(0.5秒以内)にOFF→記憶状態解除、次回起動時は4秒間欠ワイパー動作
OFF(記憶設定モード)60秒放置→記憶状態解除
ウォッシャースイッチONで拭き取り3回動作、設定間欠時間は保持
ワイパーLO・HIで記憶状態解除
ウォッシャーON→ウォッシャーOFFでワイパー3回起動(一番欲しかった機能)
3
<今回修正した箇所>
・ワイパー作動中でもウォッシャーONでウォッシャー後拭き取り動作するように、学習インターバル時にウォッシャー拭きとり動作しても学習タイムを忘れないように(小雨走行中にトラックに泥水をかけられた経験から)
・インターバル時間を5段階ではなくPICに算出させて無段階に(約6km/h毎に変化)
・通常間欠4秒動作時は停車時8秒に延長。但し停車時に起動させた場合は次回停車するまでは4秒間欠動作。
・学習間欠動作時は停車時学習簡潔動作×2倍。但し停車時に起動させた場合は次回停車するまでは学習間欠動作。
・基盤上のLEDはスピード連動を削除、プログラム実行確認テスト用に使用。(見えないので)
<余裕が出来たので追加した機能>
・システム起動時にLEDを格好良く徐々に点灯させる
・停車時のインターバル時間の変更。通常4秒動作の場合、ワイパー作動2回目以降を8秒待ちにする。学習動作時の場合、ワイパー作動2回目以降を0Km/h時の算出カウント×2倍のインターバル動作にする。
4
<車速比インターバル算出&実行方法>
①250ミリ秒間車速パルスを計測、250ミリ秒間の車速パルスは1パルス=約6km/h
②車速パルス計測ごとに「車速平均値」を更新、(車速平均値+計測結果)/2
とすることで急なインターバル変化を予防する
この車速平均値を「X」とし、てインターバル時間「Y」を下記の条件で算出。
・a=1バルス増ごとのインターバル増加率 ・d=0パルス時のインターバル時間 
・co=設定時インターバルカウント ・sp=設定時車速カウント
・X=実行時車速カウント ・Y=実行時インターバル時間
まず、60km/h毎にインターバル1/2にしたいので車速パルス10ごとに設定時インターバルカウントの2倍にするという比例の関係(X×a)を作り、最後に0パルス時の時を最大値(d)を求め、(d)から(X×a)を引くという方式をとるようにします。
③[a=co/10]←測定パルス/10=1パルス分(6Km/h)の増加率
④a=0なら1に修正←Xに0を掛けると0になってしまうので
⑤[d=co+sp*a]←0パルス時のインターバル(現在のカウント数+0Km/h時のカウント数)
⑥[Y=-X*a+d]←0Km/h時のカウント数ー(増加率×実行時車速)
⑦Y=0なら1に修正←繰り返しカウントが0なら待ちループに入れないため
という7段階でプログラムを組み算出させ、ワイパー作動後に
⑧Y×250msインターバルの間車速を計測しながら待つ
というプログラムを書きました。(理屈は合ってます。。よね?)

しかし見る人が見たら「アホだなコイツ」と思われるように、このままでは上手く動きませんでした!いきなり車に乗せて実行させた結果、低速時の変化が無さ過ぎです・・・(↓反省点)
学習時にインターバルカウントをいきなり1/10にしています。プログラムで小数点以下が無視されて計算されるので初回学習インターバルが2.5秒間隔でしか検出されません。しかも1/10にしてるので0のとき1に修正というプログラムをしている。。ということは・・・インターバル学習カウント0〜20カウント(0〜5秒)の間が全て「1」として認識されてしまうのです。考えてみればあたりまえのことですが、このままでは無段階にしているのに初回のインターバル時間がアバウトすぎて意味がありません。

そこでインターバル時間を10倍で計算して後から1/10とする方式にしました。
しかし今ひとつ確信が持てないのでインターバルの計算方式が合っているのか計算式をそのままJavaに移植してスピードによるインターバル変化の様子を確認してみることにしました。
5
例)60Km/h時にインターバル4秒の場合

左側修正前・・・全然予想外の答えが帰ってきました小数点以下を無視して計算した結果ですね。
右側修正後・・・ほぼ狙い通り!イイ感じですね^^v
こんなところでJavaのありがたみを実感!

という経緯を経てようやく完成!
新しい条件で見直した結果PIC16F84Aでも十分事足りる内容になりましたので、余っている16F84Aに載せ変え、機能も追加することが出来ました。本来16F84A用に回路を組んでいたので回路の修正箇所は無し。(自作「コペン用 車速連動学習ワイパーコントロールシステム」 詳細①)http://minkara.carview.co.jp/userid/1504928/car/1106567/2216526/note.aspx の通りですので省略。
6
MPLAB v8.84付属 HI-TECH C v9.83使用。コメント後の「。」「、」は「¥」誤入力防止の為
<プログラム本体>
#include<pic.h>
//PIC16F84A
__CONFIG( FOSC_HS & CP_OFF & PWRTE_ON & WDTE_OFF );
//オシレータ種類_コードプロテクト_パワーアップタイマ_ウォッチドックタイマ。
/**
//PIC16F88、内部クロック8MHz、リセットピン無し。
__CONFIG(FOSC_INTOSCIO & CP_OFF & PWRTE_ON & WDTE_OFF & MCLRE_OFF & BOREN_ON & LVP_OFF & CPD_OFF & DEBUG_OFF);
/**オシレータ種類_コードプロテクト_パワーアップタイマ_ウォッチドックタイマ__リセットピン__ブラウンアウトリセット__低電プログラム__コードプロテクション__デバッグ機能。**/
**/
#define _XTAL_FREQ 10000000//CPU10MHz設定。
//#define _XTAL_FREQ 8000000//CPU8MHz設定。PIC16F88用

bit wiperf=0;//学習ワイパーフラグ(0=4秒間欠、1=学習間欠)
bit wsf=0;//ワイパー初回起動フラグ(初回起動時の挙動用)
bit ssf=0;//車速初回0時フラグ。
int i;//各動作計測用。
int wcount;//インターバル計測カウンタ。
int calccount;//インターバル算出値。
int pluscount;//0km時のインターバル値。
//停車時ワイパー作動カウント&LEDデモンストレーション用カウント。
unsigned char twice;
static unsigned char speedavr;//スピード平均値。

void delay100ms(unsigned char);//100ms待ち。
void leddelay(unsigned char);//起動時デモンストレーション用1msカウント。
void speedcount();//スピード計測&250ms待ち。
void startled();//起動時デモンストレーションLED。
void wiper();//ワイパー作動。

//割り込み発生時イベント・・・通常速度では起こりえないので省略。
static void interrupt warikomi(void){
TMR0IF = 0;//TIMER0フラグクリア。
}
main(){
/**
//PIC16F88用
OSCCON = 0x70;//クロック8MHz設定
ANSEL = 0x0;//A/D変換無し
CMCON = 0x07;//コンパレータOFF
**/
/**RA4を車速パルス割り込み入力、RA1ワイパーINTスイッチ、PA2ウォッシャースイッチ RA0ワイパーLOスイッチ(兼動作中),RA3インターバル制御解除カットスイッチ。**/
TRISA = 0b00011111;
/**RB1ワイパー動作、RB2LED-RED RB3LED-BLUE RB4567プログラム時動作確認兼スピードチェックLED。**/
TRISB = 0b00000000;
PORTA = 0b00000000;//Aポート初期化。
PORTB = 0b00000000;//Bポート初期化。
startled();//2s起動時LEDデモンストレーション。
//起動確認LED&コンデンサ充電&起動時スイッチINTでワイパー停止。
do{
do{
delay100ms(10);
}while(RA1==0);
delay100ms(10);
while(RA1==0){
delay100ms(1);
}
}while(RA1==0);
PORTB = 0b00000000;//Bポート初期化。
/**OPTIONレジスタの設定 (PORTBプルアップなし、RB0割り込み無し、RA4タイマー入力、RA4立ち下がりカウント、プリスケーラ無し)**/
OPTION_REG |= 0b10110000;
GIE = 1;//すべての割り込み許可。
TMR0IE = 0;//タイマー割り込みを禁止。

while(1){//無限ループ処理。
////////////ワイパーINT動作///////////////
/**ワイパー動作中でない & ワイパーINT-ON  & Wash-OFF。**/
if((RA0==1)&&(RA1==0)&&(RA2==1)){
delay100ms(1);//100msチャッタリング&突入ノイズ対策。
/**車速比計算方法: [a=co/10] [d=co+sp*a] [Y=-X*a+d] a:増幅比 d=0km/h時カウント co=設定時カウント sp=設定時車速 X=車速 Y=カウント。**/
//0km時のインターバル値保存。
pluscount=(wcount*10)+(speedavr*wcount);
calccount=1;//インターバル算出値1に(1度はforループに入るため)。
if(wiperf){//学習ワイパーフラグ1の場合、
RB3=1;//青LED 間欠ワイパー記憶モード動作中確認LED。
wsf=0;//ワイパー初回起動フラグ0。
}else{//学習ワイパーフラグ0の場合、
wsf=1;//ワイパー初回起動フラグ1。
}
twice=0;//停車時ワイパー作動カウント0。
ssf=0;//車速初回0時フラグ0。
//INT-ON && Wash-OFF状態なら繰り返す。
while((RA1==0)&&(RA2==1)){
wiper();//ワイパー作動。
//int i インターバル算出値×250ms繰り返す。
for(i=0;i<calccount;i++){
speedcount();//250ms&スピード計測。
if(wiperf){//学習ワイパーフラグ1の時、
//int calccountインターバル算出値。
calccount=(pluscount-(speedavr*wcount))/10;
}else{//学習ワイパーフラグ0の時、
calccount=16;//4秒設定。
}
if(TMR0>0){//車速0以外のとき、
ssf=1;//車速初回0時フラグ1。
}else{//車速0の時、
//車速初回0時フラグ1&停車時ワイパー作動カウント3のとき、
if((ssf==1)&&(twice==3)){
calccount=calccount*2;//インターバル算出値×2。
}
}
if(calccount<1) calccount=1;//算出値0以下なら1に。
if(RA2==0) break;//ウォッシャースイッチONでループを抜ける。
if(RA1==1) {//INT-OFF。
//カットスイッチ切れていない場合、学習ワイパーフラグ1。
if(RA3==0) wiperf=1;
//ワイパー初回起動フラグ0で計測iが1=0.5s以内にINT-OFFなら、
if((i<2)&&(wsf==0)){
wiperf=0;//学習ワイパーフラグ0にする。
}
wcount=i;//経過時間をインターバル計測カウンタに代入。
delay100ms(5);//コンデンサをチャージして、
break;//ループを抜ける。
}
}
if(TMR0==0){//停車時に、
if(twice<3) twice++;//停車時ワイパー作動カウント。
}else{
twice=0;//停車時ワイパー作動カウント初期化。
}
wsf==1;//ワイパー初回起動フラグ1。
}
RB3 = 0;//青LED消灯。
}
/////////常時スピード計測///////////
speedcount();//スピード取得250ms。
///////ワイパーインターバル学習///////
/**ワイパー動作中でない & ワイパーINT-OFF & フラグ1番チェック済み&ウォッシャーOFF の場合、待ちカウントスタート、60秒後にフラグを0番にしてループを抜ける。**/
if((RA0==1)&&(RA1==1)&&(wiperf==1)&&(RA2==1)){
RB2 = 1;//赤LED 間欠時間記憶モード確認LED。
delay100ms(1);//100msチャッタリング対策。
/**カウントを初期化、インターバル計測カウンタ+コンデンサチャージ時間+for1ループ分。**/
wcount=wcount+4;
while(RA1==1){//ワイパーOFFの間ループ。
speedcount();//250ms待ち&スピード取得。
wcount++;//カウントプラス。
/**ワイパー動作中、もしくはインターバルカウントが240(60秒)を超える、もしくはウォッシャースイッチONでフラグを0番にしてループを抜ける。**/
if((RA0==0) || (wcount>240) || (RA2==0)){
wiperf=0;//学習ワイパーフラグ0。
break;
}
}
RB2 = 0;//赤LED 消灯。
}
/////////ワイパーLO or HI///////////////
/**(ワイパーLO/HIスイッチON時処理) ワイパー動作中&ワイパーINTスイッチOFF状態&フラグ1。**/
if((RA0==0)&&(RA1==1)){
delay100ms(5);
/**上記の状態で0.5秒後変わらない場合、ワイパーLOorHI状態と確認、フラグ0セット。**/
while((RA0==0)&&(RA1==1)) wiperf = 0;
delay100ms(5);
}
/////////ウォッシャー作動//////////////////
if(RA2==0){//ウォッシャーON時処理。
delay100ms(5);//500ms delay チャッタリング&突入ノイズ対策。
//ウォッシャーOFFになるまでループで待つ、OFFでループを抜けてワイパー3回起動。
while(RA2==0);
for(unsigned char wi=0;wi<3;wi++){
wiper();//ワイパー作動。
if(RA2==0) break;//途中ウォッシャーONで動作を停止、一度ループを抜ける。
}
}
}
}

void delay100ms(unsigned char c){//100ms待ち。
for(i=0;i<c;i++){
RB4=~RB4;//LED反転。
__delay_ms(100);
}
RB4=0;//抜けるときはLED-OFF。
}
void speedcount(){//250ms間スピード計測。
TMR0 = 0;//カウンタ値をリセット。
TMR0IE = 1;//タイマー割り込みを許可。
__delay_ms(250);//250msの間に車速パルスをカウント。
TMR0IE = 0;//タイマー割り込みを禁止。
speedavr=(speedavr+TMR0)/2;//スピード平均値保存。
}
void wiper(){//ワイパー作動。
RB1=1;//リレーON。
delay100ms(8);
RB1=0;//リレーOFF。
delay100ms(7);
}
void startled(){//2秒間デモンストレーションLED。
for(twice=0;twice<20;twice++){//100msを20回繰り返すループ。
for(unsigned char lp=0;lp<10;lp++){//10msを10回繰り返すループ。
if(twice<10){//1秒目に青LED制御(10ms間)。
RB3=0;//BLUE LED OFF。
leddelay(10-twice);//OFF時間待ち。
RB3=1;//BLUE LED ON。
leddelay(twice);//ON時間待ち。
}else{//2秒目に赤LED制御(10ms間)。
RB2=0;//RED LED OFF。
leddelay(20-twice);//OFF時間待ち。
RB2=1;//RED LED ON。
leddelay(twice-10);//ON時間待ち。
}
}
}
}
void leddelay(unsigned char lg){//1ms待ち(LEDデモンストレーション用)。
for(i=0;i<lg;i++){
__delay_ms(1);
}
}
7
<HEXファイル>
:020000000F28C7
:10000800CE00030E83128C0004088D000A088E00AF
:100018004F088F00442B372B1F308316850086012D
:1000280083128501860153221A281A280A30992238
:100038008312851C202821281A2822280A30992270
:1000480028280130992228288312851C2C282D283D
:100058002528851C302831281A2832288601B030F6
:10006800A2002208831681048B178B123B28831267
:10007800051C3F284028522985184328442852291E
:10008800051D4728482852290130992283122E0835
:10009800910191072D08900190070A3092000030D5
:1000A8009300C52283121008A2001108A3002F088C
:1000B800A400A50124089000250891002E089301AA
:1000C80093072D0892019207C52283121008220770
:1000D800AB0011080318110A2307AC000130A70070
:1000E8000030A800B11C79287A287D28861531119E
:1000F8007E283115B0013110472950238312A901F8
:10010800AA01242915238312B11C8B288C28B7280F
:100118000A309600003097002F08A200A301220899
:100128009000230891002E08930193072D0892014F
:100138009207C52283121009A4001109A500A40A78
:100148000319A50A2B08240798002C0803182C0A61
:1001580025079900DE2183121708A801A8071608A9
:10016800A701A707BB281030A7000030A800010886
:10017800031DBF28C1283114DB28311CC428C52819
:10018800DB283008033A031DCA28CB28DB282808B7
:10019800A3002708A2000130CF000310A20DA30D71
:1001A800CF0BD1282208A7002308A800DB2828089D
:1001B800803ACF0080304F02031DE4280130270227
:1001C8000318E728E828EE2801308312A70000303A
:1001D800A800EE2883120519F228F328F5283329F8
:1001E8003329851CF828F9281D298519FC28FD289C
:1001F800FF28B114FF282A08803ACF0080304F0228
:10020800031D08290230290203180B290C29132978
:1002180083123119102911291329B11013298312B6
:100228002A08AE01AE072908AD01AD0705309922AD
:10023800332901308312A9070318AA0A0030AA0734
:100248002A08803AA2002808803A2202031D2E2993
:1002580027082902031C31293229862833298312C9
:100268008108031D3829392945290330300203182C
:100278003E293F2947290130A2002208B007472913
:100288004729B001472985184A294B2950290519BA
:100298004E294F2981285029861152291523831266
:1002A800051C572958299729851C5B295C299729FA
:1002B800B11C5F2960299729051D6329642997299D
:1002C80006150130992283122D08043EAD002E0830
:1002D8000318013E003EAE00922915230130831217
:1002E800AD070318AE0A0030AE07051C7C297D292E
:1002F8008F292E08803ACF0080304F02031D8629AF
:10030800F1302D02031889298A298F2983120519AA
:100318008E298F2992298312B1109629851895293B
:1003280096297129061105189A299B29B129851C36
:100338009E299F29B12905309922A329B11083123A
:100348000518A729A829AE298518AB29AC29A229FF
:10035800AE29AE2905309922B12983120519B5298C
:10036800B6293B2805309922B9298312051DBD29D4
:10037800BE29B929A60103302602031CC429C529B0
:10038800C7293B283B28502383120519CC29CD299E
:10039800CF293B283B280130A2002208A6070330BA
:1003A8002602031CD829D929C7293B283B283B28E2
:1003B8003B280F2883129C01971FE329E429ED2984
:1003C80096099709960A0319970A9C0103149C0D2C
:1003D800ED29991FF029F129FB2998099909980A0B
:1003E8000319990A01309A001A089C06FB299D01F5
:1003F8009E01170816040319022A032A412A9B01A1
:1004080003149B0D132A01300310960D970DFF3E20
:10041800031D082A01309A001A089B07132A971F00
:10042800162A172A072A192A192A013003109D0D9E
:100438009E0DFF3E031D1A2A17081902031D262ABE
:1004480016081802031C292A2A2A322A1608980292
:100458001708031C990399021D14322A013003104E
:10046800970C960CFF3E031D332A01309B02031D97
:100478003E2A3F2A192A412A412A1C08031D452AD7
:100488004B2A9D099E099D0A03199E0A4B2A1E089C
:10049800970197071D0896019607522A08008312AC
:1004A800B00114303002031C5A2A5B2A5D2A982AAC
:1004B800982A94010A301402031C632A642A662AC3
:1004C8008D2A8D2A0A30300203186B2A6C2A762A64
:1004D80086113003FF3A0A3EF0228312861530084F
:1004E800F022812A06113003FF3A143EF0228312CB
:1004F80006153008F63EF022812A01308312930057
:10050800130894070A301402031C8B2A8C2A662AC3
:100518008D2A013093001308B00714303002031CF1
:10052800962A972A5D2A982A080083129300A9011F
:10053800AA01B52A1030831286060230920045308F
:100548009100A9309000900BA72A910BA72A920B33
:10055800A72AAE2A01308312A9070318AA0A003075
:10056800AA072A08803A900080301002031DBE2A8C
:1005780013082902031CC12AC22A9E2A83120612C2
:100588000800831294019501C92A101CCC2ACD2A8F
:10059800D32A120894070318950A130895070130FF
:1005A8000310920D930DFF3E031DD42A0130031052
:1005B800910C900CFF3E031DDB2A11081004031D4B
:1005C800E62AE72AC92AE82A15089101910714089A
:1005D80090019007EF2A080083129200A901AA014E
:1005E800062B0430831291003D309000900BFA2ABC
:1005F800910BFA2AFF2A01308312A9070318AA0AC5
:100608000030AA072A08803A900080301002031DA3
:100618000F2B12082902031C122B132BF52A142B5B
:100628000800831281018B160430A1002C30A00031
:10063800AD309F009F0B1E2BA00B1E2BA10B1E2B5A
:10064800252B8B12023083129600003097002F085A
:10065800010798009901990DDE21831216089F0061
:100668001F08AF000800A701A801A901AA01AB0152
:10067800AC01AD01AE01AF01B001B1018301102899
:100688000B110F08CF000E088A000D0884000C0E0D
:100698008300CE0E4E0E090083128614083099226C
:0A06A8008312861007309922080023
:02400E00F2FFBF
:00000001FF
8
まだ無駄な分岐や変数もあると思いますが頭がパンクしない程度にできるだけ分岐の削減とループと変数の使い回しをしてプログラム領域が少なくなるように組んでみた結果、プログラムスペースを前回の半分以下に抑えてさらに前回より多機能に仕上げることが出来ました。C言語でなんやかんや作っているうちに自分なりに少しだけプログラミングがレベルアップしていたという嬉しい事実に気が付きました。こうなるとルーフクローザーの方も気になってきますが。。ま、ま、そのうちに。。今は保留にしておきます。

今回のプログラムを前回のPIC16F88に入れると1/4程度に収まってしまいます。確かに88を使うのは無駄。。。だけどPIC自体は新しい方のがチップが安いので新しく作る場合にはF88ですね。。。
前回PIC16F88のビルド後プログラムスペース
Memory Summary:
Program space used 6CFh ( 1743) of 1000h words ( 42.6%)
Data space used 29h ( 41) of 170h bytes ( 11.1%)
EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
Configuration bits used 1h ( 1) of 2h words ( 50.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)


今回PIC16F88用でビルドした時のプログラムスペース
Memory Summary:
Program space used 3C8h ( 968) of 1000h words ( 23.6%)
Data space used 28h ( 40) of 170h bytes ( 10.9%)
EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
Configuration bits used 1h ( 1) of 2h words ( 50.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
今回PIC16F84A用でビルドした時のプログラムスペース
Memory Summary:
Program space used 356h ( 854) of 400h words ( 83.4%)
Data space used 28h ( 40) of 44h bytes ( 58.8%)
EEPROM space used 0h ( 0) of 40h bytes ( 0.0%)
Configuration bits used 1h ( 1) of 1h word (100.0%)
ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

イイね!0件




 

入札多数の人気商品!

 

関連整備ピックアップ

D-SPORT Sport Wiper Blade

難易度:

リペア

難易度:

ワイパーアーム塗装

難易度: ★★

ワイパーアーム交換

難易度:

ワイパーアーム塗装

難易度:

ワイパーブレード交換

難易度:

関連リンク

この記事へのコメント

2013/10/25 14:45:42
その頭脳を国際貢献に使われたら・・
すぐ世界平和が実現しそうです!
スゴイw(*^^)v
ヤフオクでお願いします!
コメントへの返答
2013/10/25 22:19:26
コメントありがとうございます^^
むむむ・・国際貢献ですか〜!世界に平和をもたらしたいですね。
量産していないのでヤフオクで売れるような代物では無いですね〜。書き込み済みPICくらいならお譲りできますヨ☆
2013/10/26 18:31:59
こんにちは。
最近までSEやってた者です。
私も一時期趣味でちょっとだけPICを触ったんですが、アセンブラが面倒でやめちゃいました笑
Cだと少しは取っつきやすのかな。
ここまで作りあげるのに相当な集中力を必要としたんでしょうね。
素晴らしいです!
コメントへの返答
2013/10/26 21:16:10
こんにちは、コメントありがとうございます♪
SEをされてらしたんですね!仕事としてCを扱っておられる方には恥ずかしくてお見せ出来るようなプログラムではありませんが今の自分で理解出来る限界で組んでいます。
昔からあるPICの開発環境のMPLABには標準で「PIC C」というものが付いていたようで、私もそれを知るまではアセンブラで組んでいました。最近のMPLABXはCが標準らしいですが・・・。
Cではかなり組みやすいので是非再チャレンジしてみてください。^^v

プロフィール

「傘泥棒対策 http://cvw.jp/b/1504928/40266466/
何シテル?   08/18 21:50
のぼるです。中古ですが念願の赤コペンGETしました!これからオープンカーライフ楽しみます♪よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

愛車一覧

ダイハツ コペン 通勤快速コペンとまと号(コペトマ) (ダイハツ コペン)
トマトみたいでかわいいです。 姉には「てんとう虫みたい」って言われました。 写真、、駐車 ...
ヘルプ利用規約サイトマップ
©2019 Carview Corporation All Rights Reserved.