最近YPVSコントローラはどうなってい、るのかっていうと、一応進めてます。
アナログ入力の部分が上手く行ったので、 今は回転数測定の方やってます。

PIC24FにはInputCaptureという便利な機能があって、RBxをトリガとしてTimer2か3の値を保存、その後割り込みを発生することが可能です。しかし、Microchipのダウンロードファイルの中には、本機能に関するサンプルも何も無いし、さらにInputCaptureの説明でもそれは極小なので、ドキュメントだけ読んで進めています。
インターネットにも情報は非常に少ないのが現状です。
少しはPIC界に貢献する為にそのうち分かった事は書いていこうと思っています。

さて、InputCaptureの実装が終わったので、パルスを読み込ませたい所なのですが、手でスイッチを連打したところで、高橋名人でもせいぜい600rpm程度しか再現できません。

したらば転がっているPIC12Fを利用してパルスジェネレータを作ってみました。
この間使った10連LEDと、なんかおやつの箱を利用してみました。
iPhone 003
 
デジタルインプットが1つ、アナログインプットが1つ、出力が2つの構成です。
(作りながら、これにモータードライバ積めばでYPVSコントローラできるなぁとか思ったのは内緒です)
 
今回の教訓ですが、半固定抵抗は非常に壊れやすいって事。ハンダつける時間が長いと、外側のケースがボロくなって、安定しません。
後、PIC12Fのアナログ入力は、プルダウン抵抗が必要なのかな。つけないと動作不安定でした。
あ〜遠回りしたわ〜・・・

以下適当なソース。
あんまり正確じゃないけど、バイクの回転数程度の周波数なら、CPU動作周波数上げれば誤魔化せる範囲じゃなかろうか。
#include 

#define _XTAL_FREQ 4000000
#define LED5 GPIO4
#define LED4 GPIO5
#define BEAT GPIO3

unsigned int	inAN0;

__CONFIG( INTIO & WDTDIS & PWRTEN & BOREN & MCLRDIS & UNPROTECT & IESODIS & FCMDIS );

void main(void)
{
	OSCCON = 0x60;		// 4MHz
	TRISIO = 0x1;			// 全部出力;
	GPIO   = 0x10;		// GPIO5 on
	ANSEL  = 0b01100001;	// AN0利用
	CMCON0 = 0x7;			// コンパレータ無効
	GPPU   = 1;			// プルアップ無効	
	ADCON0 = 0b10000001;	// 右詰め AN0 有効化
	int ii;
// startup demo for( ii = 0; ii < 10; ii++ ) { __delay_ms(300); LED5 = !LED5; LED4 = !LED4; } while(1) { unsigned int loop; GODONE = 1; // 変換開始 while( GODONE ); // 変換待ち inAN0 = (ADRESH * 256 + ADRESL)+1; // Analog input inAN0 = (inAN0 * 10) / 8; loop = 6000 / inAN0 / 2; if( loop > 30) { LED5 = 0; LED4 = 1; continue; } LED4 = 0; for( ii = 0; ii < loop; ii++ ) { __delay_ms(1); } LED5 = !LED5; } }