аа, понял, спс
Но насколько я помню возможности формирования сигнала TX у HDSDR уступают ZEUS, и это еще мягко сказано )
конечно, можно прикрутить внешний стек обработок
аа, понял, спс
Но насколько я помню возможности формирования сигнала TX у HDSDR уступают ZEUS, и это еще мягко сказано )
конечно, можно прикрутить внешний стек обработок
NikB,
Здравствуйте .
Какой band декодер вы применяете в этой конструкции что на видео?
Диапазоны по частоте в режиме tx определяются?
Добрый день!
Бэндкодер реализован на adrduino + внешний цап управляемый по SPI.
Вот код:
Скрытый текст
#define F_CPU 16000000UL
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#include "SPI.h"
int LD = 8;
int CS = 10;
int A = 2;
int B = 3;
int C = 4;
//int v_port = 9;
word outputValue = 0; // a word is a 16-bit number
byte data = 0; // and a byte is an 8-bit number
void setup() {
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
//pinMode(v_port, OUTPUT);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
pinMode(CS, OUTPUT);
pinMode(LD, OUTPUT);
SPI.begin(); // wake up the SPI bus.
SPI.setDataMode(SPI_MODE3);
SPI.setBitOrder(MSBFIRST);
}
//Decoder
void switch_bpf(uint8_t n)
{
if (n < 7)
{
if (n == 0)
{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
if (n == 1)
{
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
if (n == 2)
{
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
}
if (n == 3)
{
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
}
if (n == 4)
{
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
}
if (n == 5)
{
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
}
if (n == 6)
{
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
}
}
}
//Decoder_end
//Freq
const uint32_t freqs[] = { // верхние границы диапазонов
450000 // 0..450
, 800000 //450..800
, 1900000 // 800 .. 1.9
, 5000000 // 1.9 .. 5
, 12000000 // 5 .. 12
, 22000000 // 12 .. 22
, 33000000 // 22 .. 33
, 0xFFFFFFFFUL // если выше - включаем bypass
};
//Freq_END
//DAC_V_out
const uint32_t dac_out[] = { // верхние границы диапазонов
1900 //0
, 1880 //1
, 1875 //2
, 1870 //3
, 1855 //4
, 1850 //5
, 1845 //6
, 1830 //7
, 1825 //8
, 1820 //9
, 1810 //10
, 1795 //11
, 1790 //12
, 1785 //13
, 1775 //14
, 1760 //15
, 1755 //16
, 1750 //17
, 1745 //18
, 1725 //19
, 1720 //20
, 1710 //21
, 1700 //22
, 1680 //23
, 1660 //24
, 1610 //25
, 1600 //26
, 1840 //27
};
//DAC_END
inline void uart_init(void)
{
UBRR0 = 0; // 1Mbps
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // 8 бит данных, 1 стоп-бит, без контроля чётности
UCSR0B = (1 << RXEN0); // разрешить прием данных
}
//*** Инициализация таймера 1, частота ~16 КГц ***//
inline void timer_init(void)
{
//TCCR1A = 0; // режим CTC
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // fOSC/1024
//OCR1A = 0xFFFF; // считать до упора
}
//*** Прием данных по UART ***//
unsigned char uart_receive(void)
{
while (!(UCSR0A & (1 << RXC0)));
return UDR0;
}
void loop()
{
//////////
//outputValue = 1720;
// delay(1000);
//////////
//
uint8_t x; // индекс принятого байта в буфере
uint8_t buf[5]; // буфер приёма
uint16_t tmr; // предыдущее состояние таймера
#define FREQ (*(uint32_t*)buf)
#define RXTX (buf[4])
#define TXFLAG 0x80
//_end
uart_init();
timer_init();
tmr = TCNT1;
x = 0;
while (x < 5)
{
buf[x++] = uart_receive();
if (TCNT1 - tmr > 600) // если на приём ушло много времени,
x = 1; // ... то это первый байт пакета
tmr = TCNT1; // обновим таймер
}
for (uint8_t i = 0; i < sizeof(freqs) / sizeof(freqs[0]); i++)
{
if (FREQ <= freqs[i])
{
switch_bpf(i);
//1
if (FREQ >= 450000 && FREQ <= 500000){outputValue=dac_out[12];}
if (FREQ >= 500000 && FREQ <= 550000){outputValue=dac_out[21];}
if (FREQ >= 550000 && FREQ <= 800000){outputValue=dac_out[26];}
//
//2
if (FREQ >= 800000 && FREQ <= 900000){outputValue=dac_out[0];}
if (FREQ >= 1000000 && FREQ <= 1100000){outputValue=dac_out[2];}
if (FREQ >= 1100000 && FREQ <= 1200000){outputValue=dac_out[3];}
if (FREQ >= 1200000 && FREQ <= 1400000){outputValue=dac_out[5];}
if (FREQ >= 1400000 && FREQ <= 1600000){outputValue=dac_out[15];}
if (FREQ >= 1600000 && FREQ <= 1800000){outputValue=dac_out[25];}
if (FREQ >= 1800000 && FREQ <= 1900000){outputValue=dac_out[25];}
if (FREQ >= 1900000 && FREQ <= 2500000){outputValue=dac_out[0];}
//
//3
if (FREQ >= 2500000 && FREQ <= 3000000){outputValue=dac_out[0];}
if (FREQ >= 3000000 && FREQ <= 3400000){outputValue=dac_out[2];}
if (FREQ >= 3400000 && FREQ <= 4000000){outputValue=dac_out[7];}
if (FREQ >= 4000000 && FREQ <= 4500000){outputValue=dac_out[11];}
if (FREQ >= 4500000 && FREQ <= 5000000){outputValue=dac_out[17];}
//if (FREQ >= 5000000 && FREQ <= 5500000){outputValue=dac_out[13];}
//
//4
if (FREQ >= 5000000 && FREQ <= 6800000){outputValue=dac_out[0];}
if (FREQ >= 6800000 && FREQ <= 7000000){outputValue=dac_out[1];}
if (FREQ >= 7000000 && FREQ <= 8000000){outputValue=dac_out[5];}
if (FREQ >= 8000000 && FREQ <= 9000000){outputValue=dac_out[11];}
if (FREQ >= 10000000 && FREQ <= 11000000){outputValue=dac_out[19];}
if (FREQ >= 11000000 && FREQ <= 12000000){outputValue=dac_out[24];}
if (FREQ >= 12000000 && FREQ <= 13000000){outputValue=dac_out[27];}
//
//5
if (FREQ >= 13000000 && FREQ <= 14000000){outputValue=dac_out[8];}
if (FREQ >= 14000000 && FREQ <= 15000000){outputValue=dac_out[10];}
if (FREQ >= 15000000 && FREQ <= 16000000){outputValue=dac_out[13];}
if (FREQ >= 16000000 && FREQ <= 17000000){outputValue=dac_out[16];}
if (FREQ >= 18000000 && FREQ <= 19000000){outputValue=dac_out[19];}
if (FREQ >= 19000000 && FREQ <= 20000000){outputValue=dac_out[24];}
if (FREQ >= 20000000 && FREQ <= 21000000){outputValue=dac_out[25];}
if (FREQ >= 21000000 && FREQ <= 22000000){outputValue=dac_out[26];}
//
//6
if (FREQ >= 22000000 && FREQ <= 33000000){outputValue=dac_out[10];}
//
digitalWrite(LD, HIGH);
digitalWrite(CS, LOW);
data = highByte(outputValue);
SPI.transfer(data);
data = lowByte(outputValue);
SPI.transfer(data);
digitalWrite(CS, HIGH);
digitalWrite(LD, LOW);
break;
}
}
}
Оса просто передает на вход ардуины свою частоту, не важно прием или передача.
NikB,
Доброго дня.
А как аппаратно происходит связь OSы с контроллером ардуины? Нет у Вас набросков схемного решения?
Добрый день!
Порт ардуино rx0 подключен к порту AUX output Осы. Данные передаются в формате RS232. Подробнее в посте #127
Спасибо от Radiotester
Добрый день!
Нужен совет от вас по поводу передающей части трансивера на базе Осы.
На каком варианте Вы бы остановились:
Современный тюнер и усилитель с Али или ламповый или транзисторный с вариометром и набором емкостей?
Корпус позволяет реализовать и то и то.
И чтобы хватило мощи Осы раскачать это дело!
Всем спасибо за помощь!
NikB,
Если полупроводниковый вариант - то тюнер N7DDC очень хороший, и это полный автомат.
Оконечник можно на RD16hhf1 4шт и снимать с них честных 70вт при 24в питании.
Китайские наборы на mrf это очень чудо чудные наборы которые крови попьют не мало, пусть там что угодно говорят бывалые но это "не тот компот".
Спасибо от NikB
Если есть Антенны, то эти железки не нужны
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)