Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 29
Из них просматривают:
Аналоги: 11. Даташиты: 4. Инструкции: 1. Новости: 2. Профиль пользователя: 4. Форум: 4. Чат: 3.
Участников: 5
Гостей: 24

an , MACTEP , Google , wolf170571 , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 1 анонимных пользователей
SDR гетеродин на Si5351, без котроллера.
Младший сотрудник
Зарегистрирован:
11.12.2010 22:59
Из: Кишинёв
Сообщений: 27
Не в сети
Понадобился мне для экспериментов с SDR приёмниками гетеродин. Есть у меня Si5351, но все проекты с Si5351 обычно с контроллером, дисплеем и тд, при этом сама обработка сигнала в компьютере и без него никак. Так почему-бы не исключить контроллер и всю его обвязку?
И всё получилось) Не без минусов, частота устанавливаться медленно, потому как прямого доступа к портам давно нет, а через API функции очень медленно. Плавно перестраивать не получиться но вот сканировать с каким-то шагом вполне можно, да ненужна плавня настройка для SDR гетеродина, она будет в программе SDR приёмника.
Программа позволяет использовать Si5351 и как гетеродин с преобразованием частоты вверх или вниз (режим F1) либо просто как генератор частоты с диапазоном 8кГц...160МГц.
И грустного - у меня нифига не Si5351 а китайский клон MS5351M и он категорически отказывается в режиме (I-Q) работать ниже 2,8 МГц.
Программа в бета версии, я вроде погонял её на всех режимах, но могут быть какие-то баги, если что обращайтесь - будем исправлять.
Так-же не знаю насколько точно держит разность фаз во всей полосе частот.
Для этого приёмника должно подойти идеально без переделок (в режиме F/4).
Список частот можно редактировать вручную, (файл Si5351_IQ.txt) главное что-бы в правильном формате и этот файл всегда находился в одной папке с программой. Я записал туда средние частоты любительских диапазонов полюс CB сетка С.
Для подключения нужен USB->UART преобразователь с сигналом DTR, либо напрямую с COM порта, через простой преобразователь уровней, правда не пробовал через COM порт, на моих компах их нет.



Прикреплённый файл:



jpg  SDR VFO.JPG (83.75 KB)
5122_6599bc0ed64a7.jpg 900X636 px
zip Si5351_SDR_VFO_v1.0.zip Размер: 599.26 KB; Просмотры: 33



Re: SDR гетеродин на Si5351, без котроллера.
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
Очень полезная программа. Не хотите ли выложить исходники?- это подстегнет ее распространение и полезные модификации. У меня уже пару идей для доработки.



Re: SDR гетеродин на Si5351, без котроллера.
Младший сотрудник
Зарегистрирован:
11.12.2010 22:59
Из: Кишинёв
Сообщений: 27
Не в сети
Выкладывать исходники не буду по разным причинам, но могу помочь в написании кода.

Вот так открываем СОМ-порт (например СОМ1)

HANDLE h_COM ;
h_COM = CreateFile ("\\\\.\\COM1", GENERIC_READ GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
if ( h_COM == INVALID_HANDLE_VALUE) ShowMessage("Error" );

Перед закрытием программы надо закрыть СОМ-порт, иначе при повторном открытии будет ошибка.
CloseHandle (h_COM) ;

Дальше нужны функции которые будут дёргать выводы СОМ порта в соответствии с протоколом I2C.

#define SI5351_ADDR 0x60

  // TxD-SDA
#define _I2C_SDA_HI()  ClearCommBreak(h_COM);  //TxD = 1
#define _I2C_SDA_LO()  SetCommBreak(h_COM);// TxD = 0
  // DTR-SCL
#define _I2C_SCL_HI()  EscapeCommFunction(h_COM, CLRDTR);// DTR = 1
#define _I2C_SCL_LO()  EscapeCommFunction(h_COM, SETDTR);// DTR = 0

#define _I2C_INIT()   _I2C_SDA_HI(); _I2C_SCL_HI();
#define _I2C_START() _I2C_SDA_LO(); _I2C_SCL_LO(); _I2C_SDA_HI();
#define _I2C_STOP()  _I2C_SCL_HI(); _I2C_SDA_HI();
#define _SendBit(data, bit) if(data&1<<bit){_I2C_SDA_HI();} else{_I2C_SDA_LO();} _I2C_SCL_HI(); _I2C_SCL_LO();

void i2c_SendByte(byte data){
    _SendBit(data, 7);
    _SendBit(data, 6);
    _SendBit(data, 5);
    _SendBit(data, 4);
    _SendBit(data, 3);
    _SendBit(data, 2);
    _SendBit(data, 1);
    _SendBit(data, 0);
    _I2C_SDA_HI();  // recv ACK
    _I2C_SCL_HI();
    _I2C_SCL_LO();
  }

  void i2c_start(){ _I2C_INIT(); _I2C_START();}
  void i2c_stop() { _I2C_STOP();}
  void i2c_beginTransmission(byte addr){ i2c_start(); i2c_SendByte(addr << 1); };
  bool i2c_write(byte s_byte){ i2c_SendByte(s_byte); return 1; };
  byte i2c_endTransmission(){ i2c_stop(); return 0; };


 void si5351_write(byte regAddr, byte data)
   {
    i2c_beginTransmission(SI5351_ADDR);     // The I2C address of the Si5351A
    i2c_write((byte) regAddr);
    i2c_write((byte) data);
    i2c_endTransmission();
   }


Дальше нужна библиотека для si5351, я использовал эту подробнее про функции тут, код переноситься в C++ Builder практически без изменений, надо только заменить функции I2C.
Можно использовать любую Ардуиновскую библиотеку , просто заменив функции для I2C на наши:

  i2c_beginTransmission(SI5351_ADDR);
  i2c_write(byte);// byte - байт для отправки.
  i2c_endTransmission();



 


Отредактировано пользователем ken 08.01.2024 0:38:38
Отредактировано пользователем ken 08.01.2024 0:49:29


Re: SDR гетеродин на Si5351, без котроллера.
Модератор
Зарегистрирован:
26.01.2010 23:26
Из: Тирасполь
Сообщений: 3926
Не в сети
Жаль. Но использовать исполняемые файлы из малоизвестных источников мало кто согласится.



Поиск по форуму


Расширенный поиск

Разное

Интересно

Во время поиска небольших радиодеталей, упавших со стола, вероятность их обнаружения прямо пропорциональна размеру детали и обратно пропорциональна их значению для завершения работы