Уважаемые посетители! Форум CQHAM.RU существует исключительно за счет показа рекламы. Мы будем благодарны, если Вы не будете блокировать рекламу на нашем Форуме. Просим внести cqham.ru в список исключений для Вашего блокировщика рекламы.
Страница 66 из 128 ПерваяПервая ... 16566364656667686976116 ... ПоследняяПоследняя
Показано с 651 по 660 из 1275

Тема: Синтезатор за полчаса

  1. #651

    Регистрация
    19.05.2008
    Адрес
    MO93PR
    Сообщений
    36
    Позывной
    UA9OVG
    Цитата Сообщение от Georgi Посмотреть сообщение
    igor 2015,дайте,пож.,ссыл ку на источник
    Тут найдете это и многое другое: https://sites.google.com/site/ja2gqp/

    А описание есть в самом блоге: http://ja2gqp.blogspot.com/
    Anatoly


  2. #652
    Я запитывал от 7805, после диод, с него на 1117 в 3,3 вольт. http://ja2gqp.blogspot.com/2016/06/si5351-vfo.html?m=1

  3. Спасибо от Wik

  4. #653
    Аватар для ВЕРН
    Регистрация
    29.11.2009
    Адрес
    г.Слуцк Минская обл.
    Сообщений
    176
    Позывной
    EW2AAA
    Здравствуйте!Не компилируется программа для Ардуино: синтезатор-генератор.( 24-страница).Я так понимаю, надо изменить данные где-то или ввести новые.Но где и какие не могу пока понять-мало опыта.Конкретно мне нужен генератор 9-10 мгц без записи ПЧ. Остальные программы(примеры) для Ардуино записываются и функционируют.


  5. #654

    Регистрация
    28.04.2005
    Адрес
    Московская обл., г. Мытищи
    Сообщений
    3,921
    Позывной
    ex RW3DKC
    Есть такое с самой новой версией библиотеки. Попробуйте заменить библиотеку, взяв из того архива со скетчем. У меня в среде 1.8.5 компилировалось нормально пока библиотеку не обновил (правда какая версия была до обновления не помню).

    Изменились вызовы функций

    si5351.init(SI5351_C RYSTAL_LOAD_8PF, 0, 0); //3 параметра вместо 2х
    si5351.set_correctio n(cal_factor, SI5351_PLL_INPUT_XO) ; //2 параметра вместо одного
    si5351.set_freq(targ et_freq, SI5351_CLK0); //2 параметра вместо 3х

    Поправил скетч под новую версию:

    Скрытый текст

    /*
    Вся эта программа изначально написана NT7S и SQ9NJE.
    Оригинальный код, немного подправленный мною, под мои нужды.
    Ознакомится с оригиналом можно здесь
    http://nt7s.com/
    http://sq9nje.pl/
    http://ak2b.blogspot.com/
    */


    #include <Rotary.h>
    #include <si5351.h>
    #include <Wire.h>
    #include <LiquidCrystal.h>


    #define F_MIN 1000000L // Нижний предел частоты
    #define F_MAX 30000000L // Верхний предел частоты
    #define OLED_RESET 4
    #define ENCODER_A 3 // Encoder pin A
    #define ENCODER_B 2 // Encoder pin B
    #define ENCODER_BTN 11
    #define LCD_RS 5
    #define LCD_E 6
    #define LCD_D4 7
    #define LCD_D5 8
    #define LCD_D6 9
    #define LCD_D7 10

    // Здесь настройки пинов для управления 74HC595
    //Пин подключен к ST_CP входу 74HC595
    //int latchPin = 16;
    //Пин подключен к SH_CP входу 74HC595
    //int clockPin = 17;
    //Пин подключен к DS входу 74HC595
    //int dataPin = 15;




    // переменные нужные для кнопок PRE/ATT
    int regim=1; // для кнопки
    int flag=0; // для кнопки

    LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7); // LCD - pin assignement in
    Si5351 si5351;
    Rotary r = Rotary(ENCODER_A, ENCODER_B);


    // Для кварцевых резонаторов со значением 9 МГц.
    volatile uint32_t LSB = 886300000ULL; //частота ОГ(гетеродина) для "нижней" боковой. Настр. на ниж. скат КФ.
    volatile uint32_t USB = 886700000ULL; //частота ОГ(гетеродина) для "верхней" боковой. Настр. на вверхн. скат КФ.
    volatile uint32_t bfo = 886700000ULL; //стартовать с "верхней" ...
    //Эти USB/LSB частоты добавляется или вычитается из частоты VFO в "void loop()"
    //В этом примере если начальная частота будет 14.20000 плюс 9.001500 то на выходе clk0 = 23.2015Mhz
    volatile uint32_t vfo = 710000000ULL / SI5351_FREQ_MULT; //стартовая частота при запуске синтезатора.
    volatile uint32_t radix = 100000; // Шаг перестройки по умолчанию при старте = 100 кГц
    boolean changed_f = 0;
    String tbfo = "";


    //------------------ Установка дополнительных функций здесь ---------------------------
    //Удалить коммент (//) для применения нужного варианта. Задействовать только одно.
    #define IF_Offset // Показание на ЖКИ плюс(минус) на значение ПЧ
    //#define Direct_conversion // чатота на выходе как на ЖКИ. Прямой выход. Генератор.
    //#define FreqX4 // частота на выходе, умноженная на четыре ...
    //#define FreqX2 // частота на выходе, умноженная на два ...
    //---------------------------------------------------------------------------------------




    /**************************************/
    /* Interrupt service routine for */
    /* encoder frequency change */
    /**************************************/
    ISR(PCINT2_vect) {
    unsigned char result = r.process();
    if (result == DIR_CW)
    set_frequency(1);
    else if (result == DIR_CCW)
    set_frequency(-1);
    }
    /**************************************/
    /* Change the frequency */
    /* dir = 1 Increment */
    /* dir = -1 Decrement */
    /**************************************/
    void set_frequency(short dir)
    {
    if (dir == 1)
    vfo += radix;
    if (dir == -1)
    vfo -= radix;


    if(vfo > F_MAX)
    vfo = F_MAX;
    if(vfo < F_MIN)
    vfo = F_MIN;


    changed_f = 1;
    }
    /**************************************/
    /* Read the button with debouncing */
    /**************************************/
    boolean get_button()
    {
    if (!digitalRead(ENCODER_BTN))
    {
    delay(20);
    if (!digitalRead(ENCODER_BTN))
    {
    while (!digitalRead(ENCODER_BTN));
    return 1;
    }
    }
    return 0;
    }


    /**************************************/
    /* Displays the frequency */
    /**************************************/
    void display_frequency()
    {
    uint16_t f, g;


    lcd.setCursor(3, 0);
    f = vfo / 1000000; //variable is now vfo instead of 'frequency'
    if (f < 10)
    lcd.print(' ');
    lcd.print(f);
    lcd.print('.');
    f = (vfo % 1000000) / 1000;
    if (f < 100)
    lcd.print('0');
    if (f < 10)
    lcd.print('0');
    lcd.print(f);
    lcd.print('.');
    f = vfo % 1000;
    if (f < 100)
    lcd.print('0');
    if (f < 10)
    lcd.print('0');
    lcd.print(f);
    lcd.print("Hz ");
    lcd.setCursor(0, 1);
    lcd.print(tbfo);
    //Serial.println(vfo + bfo);
    //Serial.println(tbfo);
    }


    /**************************************/
    /* Отображаем шаг изменения частоты */
    /**************************************/
    void display_radix()
    {
    lcd.setCursor(9, 1);
    switch (radix)
    {
    case 1:
    lcd.print(" 1");
    break;
    case 10:
    lcd.print(" 10");
    break;
    case 100:
    lcd.print(" 100");
    break;
    case 1000:
    lcd.print(" 1k");
    break;
    case 10000:
    lcd.print(" 10k");
    break;
    case 100000:
    //lcd.setCursor(10, 1);
    lcd.print(" 100k");
    break;
    case 1000000:
    //lcd.setCursor(9, 1);
    lcd.print(" 1MHz"); //1MHz increments
    break;
    }
    lcd.print("Hz");
    }


    void setup()
    {


    //pinMode(latchPin, OUTPUT); //для 74hc595
    //pinMode(clockPin, OUTPUT); //
    //pinMode(dataPin, OUTPUT); //


    // начальное сообщение
    lcd.print("SINTIZER Si5351"); // текст на экране - " HELLO !!! "
    delay(3000); // Время на прочтение начального сообщения 3 сек

    Serial.begin(19200);
    lcd.begin(16, 2); // Initialize and clear the LCD
    lcd.clear();
    Wire.begin();


    si5351.set_correction(80235000, SI5351_PLL_INPUT_XO); //**mine. There is a calibration sketch in File/Examples/si5351Arduino
    //where you can determine the correction by using the serial monitor.
    //ввести калибровочное знечение в строчке si5351.set_correction(хххххххх).
    //Нужно вычислить запустив "si5351calibration" в папке с примерами библиотеки si5351.

    //initialize the Si5351
    si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0); //If you're using a 27Mhz crystal, put in 27000000 instead of 0
    // 0 is the default crystal frequency of 25Mhz.


    si5351.set_pll(SI5351_PLL_FIXED, SI5351_PLLA);
    // Set CLK0 to output the starting "vfo" frequency as set above by vfo = ?


    #ifdef IF_Offset
    si5351.set_freq((vfo * SI5351_FREQ_MULT) + bfo, SI5351_CLK0);
    volatile uint32_t vfoT = (vfo * SI5351_FREQ_MULT) + bfo;
    tbfo = "USB";
    // Set CLK2 to output bfo frequency
    si5351.set_freq( bfo, SI5351_CLK2);
    //si5351.drive_strength(SI5351_CLK0,SI5351_DRIVE_2MA); //you can set this to 2MA, 4MA, 6MA or 8MA
    //si5351.drive_strength(SI5351_CLK1,SI5351_DRIVE_2MA); //be careful though - measure into 50ohms
    //si5351.drive_strength(SI5351_CLK2,SI5351_DRIVE_2MA); //
    #endif


    #ifdef Direct_conversion
    si5351.set_freq((vfo * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
    #endif


    #ifdef FreqX4
    si5351.set_freq((vfo * SI5351_FREQ_MULT) * 4, SI5351_PLL_FIXED, SI5351_CLK0);
    #endif


    #ifdef FreqX2
    si5351.set_freq((vfo * SI5351_FREQ_MULT) * 2, SI5351_PLL_FIXED, SI5351_CLK0);
    #endif


    pinMode(ENCODER_BTN, INPUT_PULLUP);
    PCICR |= (1 << PCIE2); // Enable pin change interrupt for the encoder
    PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
    sei();
    display_frequency(); // Update the display
    display_radix();


    pinMode(16,OUTPUT); // для кнопки УВЧ = A2
    pinMode(15,OUTPUT); // для кнопки АТТ = A1


    }


    void loop()


    {
    // Update the display if the frequency has been changed
    if (changed_f)
    {
    display_frequency();


    #ifdef IF_Offset
    si5351.set_freq((vfo * SI5351_FREQ_MULT) + bfo, SI5351_CLK0);
    // Вы также можете вычесть BFO, чтобы удовлетворить ваши потребности
    //si5351.set_freq((vfo * SI5351_FREQ_MULT) - bfo , SI5351_PLL_FIXED, SI5351_CLK0);


    if (vfo >= 10000000ULL & tbfo != "USB")
    {
    bfo = USB;
    tbfo = "USB";
    si5351.set_freq( bfo, SI5351_CLK2);
    Serial.println("We've switched from LSB to USB");
    }
    else if (vfo < 10000000ULL & tbfo != "LSB")
    {
    bfo = LSB;
    tbfo = "LSB";
    si5351.set_freq( bfo, SI5351_CLK2);
    Serial.println("We've switched from USB to LSB");
    }


    #endif


    #ifdef Direct_conversion
    si5351.set_freq((vfo * SI5351_FREQ_MULT), SI5351_PLL_FIXED, SI5351_CLK0);
    tbfo = "";
    #endif


    #ifdef FreqX4
    si5351.set_freq((vfo * SI5351_FREQ_MULT) * 4, SI5351_PLL_FIXED, SI5351_CLK0);
    tbfo = "";
    #endif


    #ifdef FreqX2
    si5351.set_freq((vfo * SI5351_FREQ_MULT) * 2, SI5351_PLL_FIXED, SI5351_CLK0);
    tbfo = "";
    #endif


    changed_f = 0;
    }

    // Кнопки УВЧ и АТТ


    {

    if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата
    // и перемення flag равна 0 , то ...
    {
    regim++;
    flag=1;

    //это нужно для того что бы с каждым нажатием кнопки
    //происходило только одно действие
    // плюс защита от "дребезга" 100%

    if(regim>4)//ограничим количество режимов
    {
    regim=1;//так как мы используем только одну кнопку,
    // то переключать режимы будем циклично
    }

    }

    if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата
    //и переменная flag равна - 1 ,то ...
    {

    flag=0;//обнуляем переменную "knopka"
    }


    if(regim==1)//первый режим - очистка экрана

    {
    digitalWrite(15,LOW);// на пине нулевой уровень
    digitalWrite(16,LOW);
    lcd.setCursor(5, 1);
    lcd.print(" "); // "пустое место"

    //здесь может быть любое ваше действие
    }
    if(regim==2)//второй режим - вкл. УВЧ
    {
    digitalWrite(16,HIGH);//включает PRE
    digitalWrite(15,LOW);
    lcd.setCursor(5, 1); // место на экране для PRE
    lcd.print("PRE");

    //здесь может быть любое ваше действие
    }


    if(regim==3)//третий режим - очистка экрана

    {
    digitalWrite(15,LOW);//
    digitalWrite(16,LOW);
    lcd.setCursor(5, 1); // место текста на экране
    lcd.print(" "); // "пустое место"

    //здесь может быть любое ваше действие
    }



    if(regim==4)//третий режим - вкл. АТТ
    {
    digitalWrite(15,HIGH);//включает АТТ
    digitalWrite(16,LOW);
    lcd.setCursor(5, 1); // место на экране для АТТ
    lcd.print("ATT");
    }




    // Button press changes the frequency change step for 1 Hz steps
    if (get_button())
    {
    switch (radix)
    {
    case 1:
    radix = 10;
    break;
    case 10:
    radix = 100;
    break;
    case 100:
    radix = 1000;
    break;
    case 1000:
    radix = 10000;
    break;
    case 10000:
    radix = 100000;
    break;
    case 100000:
    radix = 1000000;
    break;
    case 1000000:
    radix = 1;
    break;
    }
    display_radix();
    }


    }



    }

    Последний раз редактировалось R2DHG; 08.11.2018 в 16:52.

  6. #655
    Аватар для ВЕРН
    Регистрация
    29.11.2009
    Адрес
    г.Слуцк Минская обл.
    Сообщений
    176
    Позывной
    EW2AAA
    Большое спасибо!Только что заменил библиотеку на "Si5351Arduino-master" и всё загрузилось.
    Надо только разобраться с выходными частотами и загрузить нужные.Спасибо.

  7. #656
    Цитата Сообщение от ВЕРН Посмотреть сообщение
    Большое спасибо!
    Когда выдает такое сообщение, это значит, что выражение, например в данном случае "SI5351_FREQ_MUL T" нигде не определено, а компьютер, понятно, гадать не будет, что это такое. Открываете файл библиотеки (Si5351.ccp или Si5351.h) любым редактором, включаете опцию поиск и ищете это выражение и, убеждаетесь, что его в вашей библиотеке нет, поэтому компилировать не нужно и пытаться.

  8. #657

    Регистрация
    28.04.2005
    Адрес
    Московская обл., г. Мытищи
    Сообщений
    3,921
    Позывной
    ex RW3DKC
    Похоже автор библиотеки неплохо так её меняет от версии к версии. У меня немного другие ошибки были - видимо еще какая то другая версия была.

  9. #658
    Аватар для ВЕРН
    Регистрация
    29.11.2009
    Адрес
    г.Слуцк Минская обл.
    Сообщений
    176
    Позывной
    EW2AAA
    Цитата Сообщение от Владимир_К Посмотреть сообщение
    Открываете файл библиотеки (Si5351.ccp или Si5351.h) любым редактором
    Действительно,в "старой библиотеке"нет такого выражения хотя в Блокноте сложно разобраться с текстом.Это к тому,что в "новой"-"SI5351_FREQ_MUL T" "просто бросилось в глаза".Спасибо.

  10. #659
    Цитата Сообщение от ВЕРН Посмотреть сообщение
    Блокноте сложно разобраться с текстом.
    Открывайте в WordPad. Заходите в меню "Edit" затем "Find".

  11. Спасибо от ВЕРН


  12. #660

    Регистрация
    12.09.2006
    Адрес
    Болгария, Силистра, KN34PC
    Сообщений
    1,480
    Позывной
    LZ2WSG
    ВЕРН, версия библиотеки Si5351 вероятно v1.1.2.
    Попробуйте так, а и сама библиотека загружаю отдельно.

    Все версии etherkit NT7S Library for the Si5351:
    https://github.com/etherkit/Si5351Arduino/releases
    Вложения Вложения
    Последний раз редактировалось veso74; 08.11.2018 в 18:06.

  13. Спасибо от ВЕРН

Страница 66 из 128 ПерваяПервая ... 16566364656667686976116 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Сдох синтезатор
    от RM9WY в разделе FT-817
    Ответов: 1
    Последнее сообщение: 17.03.2015, 17:10
  2. Синтезатор
    от Сереня в разделе Для начинающих
    Ответов: 8
    Последнее сообщение: 31.07.2014, 14:53
  3. Узел крепления для спайдера за полчаса
    от ГУН в разделе Антенная механика
    Ответов: 18
    Последнее сообщение: 07.10.2012, 18:16
  4. Синтезатор ПЧ
    от geron2008 в разделе Технический кабинет
    Ответов: 15
    Последнее сообщение: 28.03.2011, 12:37
  5. Синтезатор
    от RA0CHE в разделе Конструкции на микроконтроллерах для радиолюбителей
    Ответов: 4
    Последнее сообщение: 22.04.2008, 06:03

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •