また、ディップが浅い問題があり、プログラム改修で対応したいと思っている。
USB接続が出来る様、側面に穴あけ加工した。この事で、プログラムのメンテナンスが容易になった。
カウンターは、1/10プリスケーラにより、60MHz程の周波数を測定。
基板サイズ 80x86
Program
Arduinoの周波数カウンターサンプルを使用し、13.2MHz基準周波数でキャリブレーションしている。ただ、Arduinoボードの個体差(クロック)があるので、要調整。/////////////////////////////////////////////////////////////////////////////////
// Frequency counters and level meter
//
// Copyright(C)2015.JA2GQP.All rights reserved.
//
// 2015/12/22
// JA2GQP
//-----------------------------------------------------------------------------
// Arduino Frequency Counter Library
// http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/
//
/////////////////////////////////////////////////////////////////////////////////
#include <LiquidCrystal.h>
#include <FreqCounter.h>
#define LCDCOLS 16
LiquidCrystal lcd(8, 7, 6, 4, 3, 2);
long int frq;
double cal;
byte one[8] = { // Special character 1
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte two[8] = { // Special character 2
B10100,
B10100,
B10100,
B10100,
B10100,
B10100,
B10100,
};
byte three[8] = { // Special character 3
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
};
//
//-------------------------------------------- Setup proc ---------------------------------------------------------------------
//
void setup() {
cal = 13.2 / 13.2799; // Calibrat frequency
lcd.begin(LCDCOLS, 2);
lcd.clear();
lcd.createChar(1, one);
lcd.createChar(2, two);
lcd.createChar(3, three);
analogReference(DEFAULT);
delay(200);
}
//
//-------------------------------------------- Main Loop ---------------------------------------------------------------------
//
void loop() {
int v;
static unsigned long t = 0;
FreqCounter::f_comp = 8; // Set compensation to 12
FreqCounter::start(100); // Start counting with gatetime of 100ms
while (FreqCounter::f_ready == 0); // wait until counter ready
frq = FreqCounter::f_freq; // read result
lcd.clear(); // clear screen(cursol 0,0)
lcd.print(frq * cal / 10000); // Frequency display
lcd.print("MHz");
v = analogRead(0); // Anarog data get
printbar(v,16); // Bar display for 16 column
lcd.setCursor(10, 0); // Analog Volt display
lcd.print(5.0/1023*v); // Voltage display
lcd.print("V");
delay(80);
}
//
//-------------------------------------------- Bar display for line2 ----------------------------------------------------------
//
void printbar(int ad_value, int disp_digit) {
int p;
int s;
int i;
int bar;
int res;
int bar_value;
bar = disp_digit * 3;
res = 1023.0 / bar + 0.5;
bar_value = (float)ad_value / res + 0.5;
p = bar_value / 3;
s = bar_value % 3;
lcd.setCursor(0, 1);
for (i = 0; i < p; i++)
lcd.write(3);
if (s)
lcd.write(s);
else
lcd.print(' ');
for (i = 0; i < LCDCOLS - p - 1; i++)
lcd.print(' ');
}