Цифрова скала/честотомер и S-метър на Arduino за RX/TX/TRX
/kn34pc.com/конструкции/...
Във
времената на PLL и DDS тази конструкция вероятно е излишна. Но с носталгия
се връщам назад във времето, когато търсех всевъзможни варианти за цифрова
скала за самоделния си TRX. Със съществуващите решения, след час-два работа
в ефира вече исках да коригирам показанията по дисплея, да добавям надписи,
честоти, коефициенти, нови бутони и функции ... Но или програмния код за
скалата беше "закрит" (с публикуван само .hex файл), или беше на непонятен
за мен език за програмиране (напр. assembly language) и възможност за корекции от моя
страна нямаше.
В настоящото време при съществуването на Arduino и неговия open source тези
въпроси сами отпадат: има решения за конструкции със споделен програмен код
от всекиго за всичко
.
Във форум се появи въпрос за цифрова скала със S-метър на Arduino. С помощта
на публикувани в интернет и мои стари програмни кодове сглобих вариант,
който може да е полезен.
Необходимо е да се коригира честотата Fif според използваната междинна
честота на RX/TX/TRX и на калибровъчния коефициент (с помощта на напр.
лабораторен честотомер). Вероятните редове за корекция на данните при
персонализация и коригиране са въведени в началото на скетча (#define xxx).
LiquidCrystal lcd(12, 13, 11, 10, 9, 8); // LCD: RS(4),
E(6), D4(11), D5(12), D6(13), D7(14)
#define PIN_SM A0 // S-meter
Input (max 1.1V / max 5V)
#define F_IF 500000 // Intermediate
Frequency [Hz]
#define CAL 0.999673 // Calibration Coefficient,
Freal/Fm
#define DIV 1
// Input Divider/
Периодът на измерване е 100 ms. Ако е необходимо последният да
се измени, то с него трябва да се коригира и коефициента за измерената
честота.
FreqCounter::start(1000 / 10); // 1000 ms gate time -> f, 100 ms -> 10 * f
...
f *= 10;
Би било добре, ако Arduino разполага с кварцов резонатор, а не с керамичен (има
такива версии на Arduino Nano). S-meter max voltage = 1.1V, но може да бъде
и 5V (с въвеждането на коментар на ред analogReference(INTERNAL);). Зависимостта между
напрежението на входа и показанието на S-метъра е линейна. Максималната
входна честота е F_CPU / 2 или 16 / 2 = 8 MHz. Ако тя трябва да е по-висока,
то е необходимо да се добави входен делител (prescaler)
и с неговия коефициент да се коригира и показанието за честотата.
freq_sm_v1.zip [ino,cpp,h][5kb]
В програмния код може да има пропуски и неточности. За коментари, въпроси и
предложения можете да използвате форума.
Полезни връзки:
1.
BlackBrix / Arduino Frequency Counter Library
2.
JA2GQP’s Blog, Arduino Dip_Meter
LZ2WSG, KN34PC
29 декември 2022 година