78 86 ... 286875767778798081 ...
771 780 859

: Si5351

  1. #771

    02.07.2020
    .
    280
    RC3UE ex RA3UJ, UA3UES
    ozforester
    , 10 pF 6 pF , , - "".
    ! , , !
    , , .
    ( ), 183.
    , Si 10pF, 20pF.
    ( ) ..
    "", " " CLK.

    Oleg 9
    Si5351a_Write_Reg (183,0b01010010); - Si5351a_Write_Reg (183,0x52);
    !
    Si
    :
    void Si5351Base::si5351_write_reg(uint8_t reg, uint8_t data){
      _i2c_begin_write(SI5351_I2C_ADDR);
      _i2c_write(reg);
      _i2c_write(data);
      _i2c_end();
    }

    setup
    :
    #define SI_XTAL_CL      183
    
    void Si5351Base::setup(uint8_t power0, uint8_t power1, uint8_t power2)
    {
      power[0] = power0;
      power[1] = power1;
      power[2] = power2;
      si5351_write_reg(SI_XTAL_CL, 0x52);
      si5351_write_reg(SI_CLK0_CONTROL, 0x80);
      si5351_write_reg(SI_CLK1_CONTROL, 0x80);
      si5351_write_reg(SI_CLK2_CONTROL, 0x80);
      VCOFreq_Mid = (VCOFreq_Min+VCOFreq_Max) >> 1;
    
    }

    . ?!
    , "" .


    XENOMORPH
    TCXO (), , ADJ FREQ .
    , .
    - 1 2 "", 3 - , 4 - .
        . 

:	tcxo.jpg 
:	167 
:	106.2  
ID:	403195
    .. 1- , , .

    P.S. .. - ..
    - ..
    , ..
    RC3UE; 01.08.2024 15:23.
    73!


  2. #772

    02.07.2020
    .
    280
    RC3UE ex RA3UJ, UA3UES
    , ..
    1. " " ( Si) .
    2. - "". 1.5-1.8 Vpp. XENOMORPH, c! .
    3. . Si..

    , - TCXO eCERA 25MHz, .. 25 26 ..
    ..

    P.S. . !
    P.P.S. , .
    73!

  3. #773

    23.08.2024
    25
    ! , .
    SI5351.
    : 8-220 , SI5351 , OLED 1306 , .
    , si5351 , . . , , . SA6 https://aliexpress.ru/item/1005005398447978.htm l

    .
        . 

:	v2_biosdbfuaa.jpg 
:	161 
:	130.4  
ID:	404038

    , :
    1) , , SMA si5351
        . 

:	v2_biosdbfuaa - .jpg 
:	134 
:	148.8  
ID:	404040
    2) si5351 , 200.( 2, )
    3) 35 .
    , , , ...

    /******************** ******************** ******************** ******************** ******************** ******
    10kHz to 225MHz VFO / RF Generator with Si5351 and Arduino Nano, with Intermediate Frequency (IF) offset
    (+ or -), RX/TX Selector for QRP Transceivers, Band Presets and Bargraph S-Meter. See the schematics for
    wiring and README.txt for details. By J. CesarSound - ver 2.0 - Feb/2021.
    ******************** ******************** ******************** ******************** ******************** *******/

    //Libraries
    #include <Wire.h> // I2C
    #include <Rotary.h> //Ben Buxton https://github.com/brianlow/Rotary
    #include <si5351.h> //Etherkit https://github.com/etherkit/Si5351Arduino
    #include <Adafruit_GFX.h> //Adafruit GFX https://github.com/adafruit/Adafruit-GFX-Library
    #include <Adafruit_SSD1306. h> //Adafruit SSD1306 https://github.com/adafruit/Adafruit_SSD1306

    //
    //------------------------------------------------------------------------------------------------------------
    #define F_MIN 10000UL //
    #define F_MAX 220000000UL //
    #define quartz 25000000 //
    /* , , 1 0,
    25 000 000 ,
    25 000 000 , #define quartz
    */
    #define IF 0 // IF () , ex: 455 = 455kHz, 10700 = 10.7MHz, 0 = , "+" , "-" .
    #define BAND_INIT 7 // (Band) (1-21) , ex: 1 = Freq Generator, 2 = 800kHz (MW ), 7 = 7.2MHz (40m), 11 = 14.1MHz (20m).
    #define S_GAIN 303 // (Signal Meter A/D input): 101 = 500mv; 202 = 1v; 303 = 1.5v; 404 = 2v; 505 = 2.5v; 1010 = 5v (max).
    #define tunestep A0 // , .
    #define band A1 // , .
    #define rx_tx A2 //, RX / TX, RX = switch open ( ), TX = switch closed to GND ( ). TX IF () .
    #define adc A3 // , (Signal Meter A/D input).
    #define XT_CAL_F 33000 // Si5351, , 10 .
    //------------------------------------------------------------------------------------------------------------

    Rotary r = Rotary(2, 3);
    Adafruit_SSD1306 display = Adafruit_SSD1306(128 , 64, &Wire);
    Si5351 si5351(0x60); //Si5351 I2C Address 0x60 ( I2C Si5351)

    /******************** ******************** ******************** **************
    * Declarations
    ******************** ******************** ******************** **************/
    volatile uint32_t bfo_f = 7800000000ULL / SI5351_FREQ_MULT; // CLK0 start IF
    volatile uint32_t vfo_t = 8000000000ULL / SI5351_FREQ_MULT; // CLK2 start Tx freq
    volatile uint32_t vfo_r = vfo_t - bfo_f; // CLK1 start Rx freq
    volatile uint32_t vfo_s = vfo_t; // Saved for RIT
    unsigned long freq, freqold, fstep;
    long interfreq = IF, interfreqold = 0;
    long cal = XT_CAL_F;
    unsigned int smval;
    byte encoder = 1;
    byte stp, n = 1;
    byte count, x, xo;
    bool sts = 0;
    unsigned int period = 100;
    unsigned long time_now = 0;



    //------------------ ---------------------------
    // (//) . .
    //#define IF_Offset // ()
    #define Direct_conversion // . . .
    //#define FreqX4 // , ...
    //#define FreqX2 // , ...
    //---------------------------------------------------------------------------------------

    /******************** ******************/
    /* Interrupt service routine for */
    /* encoder frequency change */
    /******************** ******************/
    ISR(PCINT2_vect) {
    char result = r.process();
    if (result == DIR_CW) set_frequency(1);
    else if (result == DIR_CCW) set_frequency(-1);
    }

    void set_frequency(short dir) {
    if (encoder == 1) { //Up/Down frequency
    if (dir == 1) freq = freq + fstep;
    if (freq >= 220000000) freq = 220000000;
    if (dir == -1) freq = freq - fstep;
    if (fstep == 1000000 && freq <= 1000000) freq = 1000000;
    else if (freq < 10000) freq = 10000;
    }
    if (encoder == 1) { //Up/Down graph tune pointer
    if (dir == 1) n = n + 1;
    if (n > 42) n = 1;
    if (dir == -1) n = n - 1;
    if (n < 1) n = 42;
    }
    }

    void setup() {
    Wire.begin();
    display.begin(SSD130 6_SWITCHCAPVCC, 0x3C);
    display.clearDisplay ();
    display.setTextColor (WHITE);
    display.display();

    pinMode(2, INPUT_PULLUP);
    pinMode(3, INPUT_PULLUP);
    pinMode(tunestep, INPUT_PULLUP);
    pinMode(band, INPUT_PULLUP);
    pinMode(rx_tx, INPUT_PULLUP);

    //statup_text(); //If you hang on startup, comment

    si5351.init(SI5351_C RYSTAL_LOAD_8PF, 0, 0);
    si5351.set_correctio n(cal, SI5351_PLL_INPUT_XO) ;
    si5351.drive_strengt h(SI5351_CLK0, SI5351_DRIVE_8MA);
    si5351.output_enable (SI5351_CLK0, 1); //1 - Enable / 0 - Disable CLK
    si5351.output_enable (SI5351_CLK1, 0);
    si5351.output_enable (SI5351_CLK2, 0);

    PCICR |= (1 << PCIE2);
    PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
    sei();

    count = BAND_INIT;
    bandpresets();
    stp = 4;
    setstep();
    }

    void loop() {
    if (freqold != freq) {
    time_now = millis();
    tunegen();
    freqold = freq;
    }

    if (interfreqold != interfreq) {
    time_now = millis();
    tunegen();
    interfreqold = interfreq;
    }

    if (xo != x) {
    time_now = millis();
    xo = x;
    }

    if (digitalRead(tuneste p) == LOW) {
    time_now = (millis() + 300);
    setstep();
    delay(300);
    }

    if (digitalRead(band) == LOW) {
    time_now = (millis() + 300);
    inc_preset();
    delay(300);
    }

    if (digitalRead(rx_tx) == LOW) {
    time_now = (millis() + 300);
    sts = 1;
    } else sts = 0;

    if ((time_now + period) > millis()) {
    displayfreq();
    layout();
    }
    sgnalread();
    }

    void tunegen() {
    si5351.set_freq((fre q + (interfreq * 1000ULL)) * 100ULL, SI5351_CLK0);
    }

    void displayfreq() {
    unsigned int m = freq / 1000000;
    unsigned int k = (freq % 1000000) / 1000;
    unsigned int h = (freq % 1000) / 1;

    display.clearDisplay ();
    display.setTextSize( 2);

    char buffer[15] = "";
    if (m < 1) {
    display.setCursor(41 , 1); sprintf(buffer, "%003d.%003d", k, h);
    }
    else if (m < 100) {
    display.setCursor(5, 1); sprintf(buffer, "%2d.%003d.%003d ", m, k, h);
    }
    else if (m >= 100) {
    unsigned int h = (freq % 1000) / 10;
    display.setCursor(5, 1); sprintf(buffer, "%2d.%003d.%02d" , m, k, h);
    }
    display.print(buffer );
    }

    void setstep() {
    switch (stp) {
    case 1: stp = 2; fstep = 1; break;
    case 2: stp = 3; fstep = 10; break;
    case 3: stp = 4; fstep = 1000; break;
    case 4: stp = 5; fstep = 5000; break;
    case 5: stp = 6; fstep = 10000; break;
    case 6: stp = 1; fstep = 1000000; break;
    }
    }

    void inc_preset() {
    count++;
    if (count > 21) count = 1;
    bandpresets();
    delay(50);
    }

    void bandpresets() {
    switch (count) {
    case 1: freq = 100000; tunegen(); break;
    case 2: freq = 800000; break;
    case 3: freq = 1800000; break;
    case 4: freq = 3650000; break;
    case 5: freq = 4985000; break;
    case 6: freq = 6180000; break;
    case 7: freq = 7200000; break;
    case 8: freq = 10000000; break;
    case 9: freq = 11780000; break;
    case 10: freq = 13630000; break;
    case 11: freq = 14100000; break;
    case 12: freq = 15000000; break;
    case 13: freq = 17655000; break;
    case 14: freq = 21525000; break;
    case 15: freq = 27015000; break;
    case 16: freq = 28400000; break;
    case 17: freq = 50000000; break;
    case 18: freq = 100000000; break;
    case 19: freq = 130000000; break;
    case 20: freq = 144000000; break;
    case 21: freq = 220000000; break;
    }
    si5351.pll_reset(SI5 351_PLLA);
    stp = 4; setstep();
    }

    void layout() {
    display.setTextColor (WHITE);
    display.drawLine(0, 20, 127, 20, WHITE);
    display.drawLine(0, 43, 127, 43, WHITE);
    display.drawLine(105 , 24, 105, 39, WHITE);
    display.drawLine(87, 24, 87, 39, WHITE);
    display.drawLine(87, 48, 87, 63, WHITE);
    display.drawLine(15, 55, 82, 55, WHITE);
    display.setTextSize( 1);
    display.setCursor(59 , 23);
    display.print("STEP" );
    display.setCursor(54 , 33);
    if (stp == 2) display.print(" 1Hz"); if (stp == 3) display.print(" 10Hz"); if (stp == 4) display.print(" 1kHz");
    if (stp == 5) display.print(" 5kHz"); if (stp == 6) display.print("10kHz "); if (stp == 1) display.print(" 1MHz");
    display.setTextSize( 1);
    display.setCursor(92 , 48);
    display.print("IF:") ;
    display.setCursor(92 , 57);
    display.print(interf req);
    display.print("k");
    display.setTextSize( 1);
    display.setCursor(11 0, 23);
    if (freq < 1000000) display.print("kHz") ;
    if (freq >= 1000000) display.print("MHz") ;
    display.setCursor(11 0, 33);
    if (interfreq == 0) display.print("VFO") ;
    if (interfreq != 0) display.print("L O");
    display.setCursor(91 , 28);
    if (!sts) display.print("RX"); if (!sts) interfreq = IF;
    if (sts) display.print("TX"); if (sts) interfreq = 0;
    bandlist(); drawbargraph();
    display.display();
    }

    void bandlist() {
    display.setTextSize( 2);
    display.setCursor(0, 25);
    if (count == 1) display.print("GEN") ; if (count == 2) display.print("MW"); if (count == 3) display.print("160m" ); if (count == 4) display.print("80m") ;
    if (count == 5) display.print("60m") ; if (count == 6) display.print("49m") ; if (count == 7) display.print("40m") ; if (count == 8) display.print("31m") ;
    if (count == 9) display.print("25m") ; if (count == 10) display.print("22m") ; if (count == 11) display.print("20m") ; if (count == 12) display.print("19m") ;
    if (count == 13) display.print("16m") ; if (count == 14) display.print("13m") ; if (count == 15) display.print("11m") ; if (count == 16) display.print("10m") ;
    if (count == 17) display.print("6m"); if (count == 18) display.print("WFM") ; if (count == 19) display.print("AIR") ; if (count == 20) display.print("2m");
    if (count == 21) display.print("1m");
    if (count == 1) interfreq = 0; else if (!sts) interfreq = IF;
    }

    void sgnalread() {
    smval = analogRead(adc); x = map(smval, 0, S_GAIN, 1, 14); if (x > 14) x = 14;
    }

    void drawbargraph() {
    byte y = map(n, 1, 42, 1, 14);
    display.setTextSize( 1);

    //Pointer
    display.setCursor(0, 48); display.print("TU");
    switch (y) {
    case 1: display.fillRect(15, 48, 2, 6, WHITE); break;
    case 2: display.fillRect(20, 48, 2, 6, WHITE); break;
    case 3: display.fillRect(25, 48, 2, 6, WHITE); break;
    case 4: display.fillRect(30, 48, 2, 6, WHITE); break;
    case 5: display.fillRect(35, 48, 2, 6, WHITE); break;
    case 6: display.fillRect(40, 48, 2, 6, WHITE); break;
    case 7: display.fillRect(45, 48, 2, 6, WHITE); break;
    case 8: display.fillRect(50, 48, 2, 6, WHITE); break;
    case 9: display.fillRect(55, 48, 2, 6, WHITE); break;
    case 10: display.fillRect(60, 48, 2, 6, WHITE); break;
    case 11: display.fillRect(65, 48, 2, 6, WHITE); break;
    case 12: display.fillRect(70, 48, 2, 6, WHITE); break;
    case 13: display.fillRect(75, 48, 2, 6, WHITE); break;
    case 14: display.fillRect(80, 48, 2, 6, WHITE); break;
    }

    //Bargraph ( )
    display.setCursor(0, 57); display.print("SM");
    switch (x) {
    case 14: display.fillRect(80, 58, 2, 6, WHITE);
    case 13: display.fillRect(75, 58, 2, 6, WHITE);
    case 12: display.fillRect(70, 58, 2, 6, WHITE);
    case 11: display.fillRect(65, 58, 2, 6, WHITE);
    case 10: display.fillRect(60, 58, 2, 6, WHITE);
    case 9: display.fillRect(55, 58, 2, 6, WHITE);
    case 8: display.fillRect(50, 58, 2, 6, WHITE);
    case 7: display.fillRect(45, 58, 2, 6, WHITE);
    case 6: display.fillRect(40, 58, 2, 6, WHITE);
    case 5: display.fillRect(35, 58, 2, 6, WHITE);
    case 4: display.fillRect(30, 58, 2, 6, WHITE);
    case 3: display.fillRect(25, 58, 2, 6, WHITE);
    case 2: display.fillRect(20, 58, 2, 6, WHITE);
    case 1: display.fillRect(15, 58, 2, 6, WHITE);
    }
    }

    void statup_text() {
    display.setTextSize( 1); display.setCursor(13 , 18);
    display.print("GENER ATOR");
    display.setCursor(6, 40);
    display.print(" Ver 2.0");
    display.display(); delay(4000);
    }
    .

  4. #774

    23.08.2024
    25
    Kozireff;20212 76
    ! , .
    SI5351.
    : 8-220 , SI5351 , OLED 1306 , .
    , si5351 , . . , , . SA6 https://aliexpress.ru/item/1005005398447978.htm l

    .
        . 

:	v2_biosdbfuaa.jpg 
:	161 
:	130.4  
ID:	404038

    , :
    1) , , SMA si5351
        . 

:	v2_biosdbfuaa - .jpg 
:	134 
:	148.8  
ID:	404040
    2) si5351 , 200.( 2, )
    3) 35 .
    , , , ...



    .

    https://wdfiles.ru/Ncfl

  5. #775

    02.07.2020
    .
    280
    RC3UE ex RA3UJ, UA3UES
    Kozireff
    .
    (10, 4.7) +5V SDA SCL.

    Kozireff
    3) 35
    " 35", "" .


    Kozireff
    si5351.drive_strengt h(SI5351_CLK0, SI5351_DRIVE_8MA);
    > 2Vpp (. 2.7Vpp.)

    P.S.
    Kozireff
    8-220
    , 220 .
    SI5351 - 160.
    , 8 ..
    73!

  6. #776

    12.09.2006
    , , KN34PC
    2,033
    LZ2WSG
    RC3UE
    ... , 220 . SI5351 - 160. , 8 ...
    RC3UE, Si5351 .
    Frequencies from 8 kHz to 160 MHz o Rev. 0.95 8/11.
    Rev. 1.3, August 27, 2021 -> frequencies from 2.5 kHz to 200 MHz.
    : 275..300 MHz ( ).

  7. #777

    23.08.2024
    25
    veso74
    RC3UE, Si5351 .
    Frequencies from 8 kHz to 160 MHz o Rev. 0.95 8/11.
    Rev. 1.3, August 27, 2021 -> frequencies from 2.5 kHz to 200 MHz.
    : 275..300 MHz ( ).
    ? )
    Arduino IDE 32 , SI5351 ?
    Kozireff; 25.08.2024 00:27.

  8. #778

    12.09.2006
    , , KN34PC
    2,033
    LZ2WSG
    . : github -> C:\Users\user\ Documents\Arduino\ libraries\, .cpp .h ( : #include <si5351.h> -> #include "si5351.h"). Si ( ), .
        . 

:	111.jpg 
:	118 
:	126.2  
ID:	404050  
    veso74; 25.08.2024 00:55.

  9. #779

    23.08.2024
    25
    (10, 4.7) +5V SDA SCL.
    ? , I2C ?! , .


    " 35", "" .
    , . .

    > 2Vpp (. 2.7Vpp.)
    ? ?

    , 220 .
    SI5351 - 160.
    , 8 ..
    350. 10-150 OLED .


  10. #780

    13.05.2004
    3,365
    73 de rz3qs

,

: 1 (: 0 , : 1)

  1. , , :)
    sonycman
    : 5
    : 23.03.2015, 00:23
  2. ?
    R3LAI
    : 5
    : 07.08.2014, 10:31
  3. stolyarov-ae
    : 11
    : 21.01.2013, 09:23
  4. : 2
    : 17.03.2009, 14:29
  5. MIDI e
    (UR5VEB)
    : 19
    : 09.11.2006, 00:22

  •