Цифрова скала/честотомер и 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 година