Согласующее устройство (LC) на ARDUINO

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

сейчас конструкция такая, трансивер- компорт1 - soft_splitter_порт4-soft_редиректор_порт10 - переходник_USB_UART - ардуина порты(пин 2,3) - Serial_CH340_порт8 - монитор IDE

Половины из вышеперечисленного у меня нет. Тыкаюсь наощюпь.

чтобы не ломать уже существующие библиотеки я переделал поместив всё в одной папки тебе отослал.
Чего нет в библиотеки у тебя - поддержка не только скорости порта но и режим 8N2, для Yaesu именно так, можно сделать в настройках софтового порта этот параметр по умолчанию?
Большой косяк инженеров фирмы Yaesu, что отдаваемые и принимаемые команды были без синхронизирующей последовательности, в новых аппаратах система команд сменилась, сейчас это текстовая строка в угловых скобках - <14450000xx> - как-то так...
Если у тебя 64 битная ОСЬ то собрать такую конфигурацию как у меня можно только за денюжку (я о виртуальных портах) для 32 бит они безвозмездны ну или самому написать программу виртуализации портов, поэтому у меня ОСЬ 32 бита )))

Вижу два пути улучшения

1. Написать небольшой софт отсниферить всё, что прилетает в сериал, в  EEPROM к примеру, посмотреть, как квитируется  посылаемая команда, может прилетаемое - 20 - это косяк разработчика эмулятора трансивера.
Это я сделать смогу, связка реальная - FT-897D, а не эмулятор в виде второй ардуины

2. Доработать твою библиотеку под новую библиотеку софтового сериала указав параметры по умолчанию 8N2

Пушить пока не надо, я вообще подумывал отдавать не флоат а uint32_t и на стороне программы с этим работать

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:
Чего нет в библиотеки у тебя - поддержка не только скорости порта но и режим 8N2, для Yaesu именно так, можно сделать в настройках софтового порта этот параметр по умолчанию?

Я смарю, ты не просто ненастоящий, а вапще не сталевар. Что мешает в функции

void dtsFT897D::Init(const uint32_t ABaudRate)
{
	FPort.begin(ABaudRate);    // настроить скорость Software порта. По умолчанию == 9600
	delay(20);
	SetOperatingMode();                 // после инициализации переключить рабочий режим на ключ (по умолчанию)
	FOutString = new char[OUTSTRING_LENGTH];
}

в строке FPort.begin(...)  прописать все параметры, которые для софтсериала нужны? 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Вопщем, до завтра я сёрно занят.  У тебя есть сегодня целый день, чтобы сформулировать чотыхошь, и что работает неправильно и пожелания всякие, и отправить мне на почту. Завтра разберусь. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Вопщем, до завтра я сёрно занят.  У тебя есть сегодня целый день, чтобы сформулировать чотыхошь, и что работает неправильно и пожелания всякие, и отправить мне на почту. Завтра разберусь. 

хорошо

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:
Чего нет в библиотеки у тебя - поддержка не только скорости порта но и режим 8N2, для Yaesu именно так, можно сделать в настройках софтового порта этот параметр по умолчанию?

Я смарю, ты не просто ненастоящий, а вапще не сталевар. Что мешает в функции

void dtsFT897D::Init(const uint32_t ABaudRate)
{
	FPort.begin(ABaudRate);    // настроить скорость Software порта. По умолчанию == 9600
	delay(20);
	SetOperatingMode();                 // после инициализации переключить рабочий режим на ключ (по умолчанию)
	FOutString = new char[OUTSTRING_LENGTH];
}

в строке FPort.begin(...)  прописать все параметры, которые для софтсериала нужны? 

нашёл, если я правильно понимаю:

void dtsFT897D::Init(const uint32_t ABaudRate, const uint16_t ADataParity)
FPort.begin(ABaudRate, ADataParity); 
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

нашёл, если я правильно понимаю:

void dtsFT897D::Init(const uint32_t ABaudRate, const uint16_t ADataParity)
FPort.begin(ABaudRate, ADataParity); 

Можно, наерна, и так

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Да, поймал я этот неописанный режим WFM - код 06, его установить нельзя, включается автоматом при переводе в диапазон частот 88- 108 (FM вещание), есть еще два режима CWN -82, CWNR - 83, я так понимаю они задействуются если в аппарате установлен узкополосный кварцевый фильтр, тоже можно добавить в хидер

Мои хотелки - чтобы библиотека могла использовать как CustomSoftwareSerial  библиотеку так и обычный Serial, для плат 328pb, mega - где сериалов более одного, и чтобы в библиотеку не надо было лезть шаловливыми ручками.

Рассматриваю вариант: Использовать подправленную обёртку SomeSerial, назови её хоть DtsSerial (выбор типа портов)

Да, трансивер код принятия команды не подтверждает, это видимо ошибка в эмуляторe, CustomSoftwareSerial с порта гонит FF или 00, нули пока по порту не было обмена, если обмен прошёл, то FF

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Надо же... Такое длинное сапщение, и ни одного знакомого слова... 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Надо же... Такое длинное сапщение, и ни одного знакомого слова... 

enum class TOperatingMode : uint8_t {  // режимы работы
	LSB = 0x00,
	USB = 0x01,
	CW  = 0x02,
	CWR = 0x03,
	AM  = 0x04,
       WFM = 0x06,
	FM  = 0x08,
	DIG = 0x0A,
	PKT = 0x0C,
	CWN = 0x82,
      CWNR = 0x83,
	FMN = 0x88,
	Unknown = 0xFF
};

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ладно, вставлю. Через часа два, прмерно

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Ладно, вставлю. Через часа два, прмерно

да и в ответе на запрос 0x00,0x00,0x00,0x00,0x01  - сжирается первый байт частоты, могу присылать дампы в хекс формате - ответы на команды

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

в ответе на запрос 0x00,0x00,0x00,0x00,0x01  - сжирается первый байт частоты

Да, вполне возможно. Посмотрю. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Хвалюсь )))
 

Start...
 Freq   = 7.07400
 Split  = OFF
 PTT    = OFF
 S-Metr    = S8
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF

 Freq   = 7.07400
 Split  = ON
 PTT    = ON
 Power  = 0
 HSWR   = NO
 S-Metr    = S9 + 36_Db
 DISCRIM   = ON
 DCS/CTCSS = ON
 AF/SQL    = ON

 Freq   = 7.07400
 Split  = OFF
 PTT    = OFF
 S-Metr    = S4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF

 Freq   = 7.07400
 Split  = OFF
 PTT    = OFF
 S-Metr    = S1
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF

 Freq   = 7.07400
 Split  = OFF
 PTT    = OFF
 S-Metr    = S9 + 30_Db
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF

 Freq   = 7.07400
 Split  = OFF
 PTT    = OFF
 S-Metr    = S9 + 30_Db
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF


Поправил, внёс все исследованые на сёдня Моды:
 

enum class TOperatingMode : uint8_t {  // режимы работы
  LSB = 0x00,
  USB = 0x01,
  CW  = 0x02,
  CWR = 0x03,
  AM  = 0x04,
  WFM = 0x06,
  FM  = 0x08,
  DIG = 0x0A,
  PKT = 0x0C,
  CWN = 0x82,
  CWNR= 0x83,
  AMN = 0x84,
  FMN = 0x88,
  Unknown = 0xFF
};

 

sadman41
Offline
Зарегистрирован: 19.10.2016

DetSimen пишет:

А вот если бы у них был опщий предок.... 

 


Stream не канает?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Он бы канал, если б у него виртуальный метод begin() был бы. :) 

А так, я не знаю в runtime что мне подсунут, хард или софт сериал. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Он бы канал, если б у него виртуальный метод begin() был бы. :) 

А так, я не знаю в runtime что мне подсунут, хард или софт сериал. 

вот, а в школе учили, что мы все от обезьяны пошли, кругом враньё, сплошное враньё...
PS обернул твою либу работающую под CustomSoftwareSerial - работает, сегодня попробую на 328PB обернуть под Serial1, отпишусь, дамп с порта при запросе частоты нужен? (возвращала неправильную частоту)
Код пока этот:
 

float ftFreq;


void ModeToSerial(const TOperatingMode AMode) {
  switch (AMode)
  {
    case TOperatingMode::LSB:
      Serial.println("LSB");
      break;
    case TOperatingMode::USB:
      Serial.println("USB");
      break;
    case TOperatingMode::CW:
      Serial.println("CW");
      break;
    case TOperatingMode::CWR:
      Serial.println("CWR");
      break;
    case TOperatingMode::AM:
      Serial.println("AM");
      break;
    case TOperatingMode::WFM:
      Serial.println("WFM");
      break;
    case TOperatingMode::FM:
      Serial.println("FM");
      break;
    case TOperatingMode::DIG:
      Serial.println("DIG");
      break;
    case TOperatingMode::PKT:
      Serial.println("PKT");
      break;
    case TOperatingMode::CWN:
      Serial.println("CWN");
      break;
    case TOperatingMode::CWNR:
      Serial.println("CWNR");
      break;     
    case TOperatingMode::FMN:
      Serial.println("FMN");
      break;
    case TOperatingMode::AMN:
      Serial.println("AMN");
      break;
    default:
      Serial.println("Unknown mode");
      break;
  }
}

void setup() {
  Serial.begin(115200);
  delay(250);
  Serial.println("Start...");
  Radio.Init(4800,CSERIAL_8N2);
}

void loop() {
  
  ftFreq = Radio.GetFrequency();
  Serial.print(" Freq   = ");
  Serial.println(ftFreq,5);
  
  TTX_Status tx_status = Radio.ReadTXStatus();
  
  Serial.print(" Split  = ");
  if(tx_status.Split){
  Serial.println("OFF");
  }else{
  Serial.println("ON");
  }

  if(tx_status.PTT){
  Serial.print(" PTT    = ");
  Serial.println("OFF");
  }else{ 
  Serial.print(" PTT    = ");  
  Serial.println("ON");
  Serial.print(" Power  = ");
  Serial.println(tx_status.PowerValue);
  Serial.print(" HSWR   = ");  
  if(tx_status.SWR){
  Serial.println("YES");
  }else{
  Serial.println("NO");}
  }
  
  TRX_Status rx_status = Radio.ReadRXStatus();
  Serial.print(" S-Metr    = S");
  uint8_t s = rx_status.SMValue;
  if(s > 9){
  uint8_t s1 = (s-9)*6;
  Serial.print(9);
  Serial.print(" + ");
  Serial.print(s1);
  Serial.println("_Db");
  }else{
  Serial.println(s);
  }
  
  Serial.print(" DISCRIM   = ");
  if(!rx_status.Discr){
  Serial.println("OFF");
  }else{
  Serial.println("ON");}

  Serial.print(" DCS/CTCSS = ");
  if(!rx_status.Code){
  Serial.println("OFF");
  }else{
  Serial.println("ON");}
    
  Serial.print(" AF/SQL    = ");
  if(!rx_status.SQL){
  Serial.println("OFF");
  }else{
  Serial.println("ON");}

  TOperatingMode trxmode = Radio.GetOperatingMode();
  Serial.print(" MODE = ");
  ModeToSerial(trxmode);
  Serial.println();
  delay(3000);

// Управляем трансивером
/* 
  Radio.Init(9600);
  Radio.SetMainFreq(14.25);
  Radio.ToggleVFO();
  Radio.SetRepeaterOffsetFreq(5.4321);
  Radio.SetCLAR(ON);
  Radio.SetCLARFreq(12.5);
  Radio.SetDCSMode(TDCS_Mode::DCS_ENCODER_ON);
  Radio.SetCTCSSToneFreq(88.0, 100.0);
  Radio.SetDCSCode(50, 9500);
  */
}

Надо понимать, что показания канала передачи при нахождении Трансивера в режиме приёма и наоборот НЕАКТУАЛЬНЫ и в пользовательском коде это придётся обрабатывать ручками, постараюсь на выходных все показания привести в соответствие и дополнить в коде примера.

Измерение уровня приёмного сигнала - соответствует, всё что выше 9 +6dB на единицу, передачу пока не просчитал. но 5 ватт минимальной мощности отдаёт как 2 единицы.

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Правки библиотеки будут? Или надо огласить весь список?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

весь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

весь

я пока протестировал установку частоты и установку режима MODE, перевёл показания S метра и мощности в реальные величины, определился с флагами, PTT он наоборот например, также HSWR, сегодня пойду по списку функций. Что не работает - библиотека SoftwareSerial, в топку!!! CustomSoftwareSerial решил все проблемы, завёрнутая в правленный SomeSerial (в оригинале тоже не поддерживал режимы порта) работает, как с софтваре так и с хардовыми портами...
Может правленную SomeSerial внутрь твоей библиотеки засунуть, для наружи потребуется тогда только установка CustomSoftwareSerial

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ты воду не лей, не растекайся мыслью по древу, пиши конкретно по пунктам, что надо проправить.  Биб-ки SomeSerial у мня нету, что там надо куда оборачивать, я не знаю, расскажешь - посмотрим. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ты воду не лей, не растекайся мыслью по древу, п

первую часть - "будь текуч, как вода" -  выполнил )))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Отписался. 

b707
Offline
Зарегистрирован: 26.05.2017

круто у вас тут...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

круто у вас тут...

а то )))