aitendo TM4D595を用いた回転計  (2017/9/6)
屋外で使う回転計の表示部分にLCDを使うと、熱や紫外線で表示部分が黒くなり見えなくなってきます。
電流は食いますが昔ながらのLEDが良いようです。
使ったのは
aitendoのTM4D595ですが、提供されている参考スケッチの出所は次のようです。
https://hackaday.io/project/3662-74hc595-digital-led-display-based-on-arduino
このスケッチは0123と表示するデモなので、次のように修正して回転計にしてみました。
回転数は pulseInで測定し、n回測定して平均化しています。
最上位桁の表示が濃くなりますが、タイミングの問題なのでメインルーチンが完成した後での調整が必要です。1処理毎に1桁表示すれば良いかもしれません。




9回路図は前々バージョンから変わっていません。


9200rpmを表示させときのオシロによる測定値は3.276mSで、9157rpmになり-0.47%の誤差があります。
使用したオシロの水平軸確度は50ppm (50×10のマイナス6乗(0.005%))ですから無視できます。
また、pulseinの誤差±3(uS)も無視できます。
ソフトの問題かもしれませんが、現状では低めの回転数表示となるということです。

設定に次の4行を追加します
int kaitensu; //回転数
int sum = 0;
int n=2;//測定数
int i;

メインは入れ替えです。
void loop()
{
sum = 0;
for (int i = 0; i < n; i++) {
kaitensu = pulseIn( A0, LOW );
sum = sum + kaitensu;
}
kaitensu = sum / n;
kaitensu = 60000000/(kaitensu*2);
data = kaitensu/10;
d0=data % 10; // 最下位
d1=data % 100 /10; // 10位
d2=data % 1000 / 100; // 100位
d3=data / 1000; // 最上位
unsigned char dopp =0;
for(unsigned char i=0; i < 4; ++i)
{
if (i ==0)
HC_dio_analyze(0,d0,0);
if (i ==1)
HC_dio_analyze(1,d1,0);
if (i ==2)
HC_dio_analyze(2,d2,0);
if (i ==3)
//ゼロサプレス
if (d3 < 1) {
break; // 消灯
} else {
HC_dio_analyze(3,d3,1);
}
delay(3);//最上位桁濃度調整
}
}