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

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

И замени в *.cpp срочна

float dtsFT897D::GetFrequency(void)
{
	const uint8_t MAX_LENGTH = 0x09;

	if (!ReadLongStatus(2000)) return 0.0f;

	char buf[MAX_LENGTH];
	memset(buf, 0, MAX_LENGTH);

	uint8_t* ptr = (uint8_t*)(&FCommand.Byte0);

	uint8_t idx = 0;

	for (uint8_t i = 0; i < 4; ++i) {
		buf[idx] = (ptr[i] >> 4) + '0';
		buf[idx+1] = (ptr[i] & 0x0F) + '0';
		idx += 2;
	}

	uint32_t result = atol(buf);

	return (result / 100000.0f);
}

Ну, или с git-а возьми update, шо я ночью выклалъ

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

яйца не подействовали )))
 

Start...
Freq = 0.07
Freq = 20.07
Freq = 20.07
Freq = 20.07
Freq = 20.10
Freq = 20.10
Freq = 20.10
Freq = 20.14
Freq = 20.18
Freq = 20.18
Freq = 20.21
Freq = 20.25
Freq = 20.28
Freq = 20.28
Freq = 20.50
Freq = 21.45
Freq = 24.34
Freq = 20.02
Freq = 20.04

 

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

Да, у YAESU интерфейс работает по протоколу Serial(4800,8N2)
оно может ни на что и не влияет но всё же, по крайней мере
в программах на винде ставлю 8N1  и сбоев нет

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

Ты хоть напиши, матьие, сколько должно быть. Чтоб я хоть знал, куда копать

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

DetSimen пишет:

Ты хоть напиши, матьие, сколько должно быть. Чтоб я хоть знал, куда копать

вот так правильно, при переключении диапазонов, у тебя сначала показывает правильно, а потом спереди лепит 20
 

Резетю тюнер 
In WORK
FREQ = 1.94
FREQ = 1.94
FREQ = 1.94
FREQ = 3.55
FREQ = 7.08
FREQ = 10.24
FREQ = 14.15
FREQ = 18.08
FREQ = 21.02
FREQ = 24.90
FREQ = 28.02
FREQ = 29.50
FREQ = 50.07
FREQ = 145.50
FREQ = 434.15

Если включена ардуина и включаю трансивер, то показания начинают работать правильно, а вот если включен трансивер и включаю ардуину, то спереди лепит 20 или 200, (лепил до изменения)
В альтернативной библиотеке без разницы, пока ардуина  не смогла прочитать из сериала лепит 1666ххххх, как только смогла сразу выводит правильно, очерёдность включения не играет роли, инициализируется за одно обращение, менее 100 миллисекунд не ставил, то-есть сразу

 

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

в буфере команд D0 -D4 (в D3) что-то остаётся (20) выходит...

точнее в переменной в которую читаешь?

Нет, хрень какая-то получается, я же диапазоны переключаю вплоть до 430 мегагерц, двойка не затирается

D1-D4 = frequency
D5 = mode (same as set mode)
 
Eg: {0x00,0x00,0x00,0x00,0x03} gets the current freq & mode
 
Result from radio is:
{0x43,0x97,0x00,0x00,0x08}
which means:

439.700MHz in mode 08 (FM)

Data:
Read the frequency and mode as: {0x00,0x00,0x00,0x00,03}

 

 

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

До завтра я занят, к сожалению.

Хотя, мошт, вечером время выкрою

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

DetSimen пишет:

До завтра я занят, к сожалению.

Хотя, мошт, вечером время выкрою

о, у меня есть время поковыряться в твоём коде, хоть и ничёнипанимаю, но всёж )))

Чуток поковырял, обернул в SomeSerial, на софтовом работает, на хардовом еще не попробовал, начинаю понимать как это работает )))

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

тебе чо, комментариев накомментировать?

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

DetSimen пишет:

тебе чо, комментариев накомментировать?

не, давай лучше про 20 разберёмсси, чего это оно спереди печатает

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

ua6em пишет:

не, давай лучше про 20 разберёмсси, чего это оно спереди печатает

Я сёдня уже неразборчивый. Завтра со с ранья. 

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

DetSimen пишет:

ua6em пишет:

не, давай лучше про 20 разберёмсси, чего это оно спереди печатает

Я сёдня уже неразборчивый. Завтра со с ранья. 

везёт тебе )))

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

char buf[9];
uint8_t idx = 0;  
uint8_t FCommand[5] = {0x43,0x55,0x25,0x00,0x08};
uint32_t result;
float freq;

void setup() {
  Serial.begin(115200);
  memset(buf, 0, 9);

  uint8_t* ptr = (uint8_t*)(&FCommand);
  uint8_t idx = 0;

  for (uint8_t i = 0; i < 4; ++i) {
    buf[idx++] = (ptr[i] >> 4) + '0';
    buf[idx++] = (ptr[i] & 0x0F) + '0';
  }
 
  result = atol(buf);
  freq = (result / 100000.0f);
  Serial.print("FREQ = ");
  Serial.println(freq,3);
}


void loop() {
  
}

А вот это не понимаю, вкуда оно считывает?

 TTX_Status tx_status = Radio.ReadTXStatus();
 TRX_Status rx_status = Radio.ReadRXStatus();

PS понял, в структуру, сейчас попытаю )))

 

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

Git updated

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

увидел - проверяю

Может добавить и ключевые слова из структур?

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

ua6em пишет:

Может добавить и ключевые слова из структур?

А я знаю?  У мня этого убогого IDE нетю, а VS и так всё понимаеть. 

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

DetSimen пишет:

ua6em пишет:

Может добавить и ключевые слова из структур?

А я знаю?  У мня этого убогого IDE нетю, а VS и так всё понимаеть. 

Докладаю!!!

Работает как швейцарские часы (получение частоты)
 

Start...
Freq = 24.90
Freq = 28.03
Freq = 29.50
Freq = 50.07
Freq = 145.50
Freq = 434.15
Freq = 1.95
Freq = 3.55
Freq = 7.08
Freq = 10.24
Freq = 14.15
Freq = 18.08
Freq = 21.02
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 0.00
Freq = 24.90
Freq = 24.90
Freq = 24.90
Start...
Freq = 24.90
Freq = 24.90
Freq = 24.90
Freq = 24.90

 

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

Бывает...

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

Ну, значить, это нигде не написано, но после любой комманды устройство пхает в Сериал 1 байт ответа, и, по-видимому - 20. 

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

DetSimen пишет:

Ну, значить, это нигде не написано, но после любой комманды устройство пхает в Сериал 1 байт ответа, и, по-видимому - 20. 

оно работает мастер-слэйв, твоя библиотека как раз слэйв

вот теперь думаю по DCS и CTCSS частоты там строго регламентированы куда как пямятку их вынести в скетч или библиотеку?

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

ua6em пишет:

вот теперь думаю ... куда ... их вынести в скетч или библиотеку?

Как говорил мой сын, када ему 3 года было: "Мне пасёравну".

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

DetSimen пишет:

ua6em пишет:

вот теперь думаю ... куда ... их вынести в скетч или библиотеку?

Как говорил мой сын, када ему 3 года было: "Мне пасёравну".

Хорошо пишешь код, даже с моими познаниями С++ обернуть в библиотеку SomeSerial.h оказалось как два пальца об асфальт )))
 

Start...
Freq = 434.15
 Power  = 0
 Split    ON
 HSWR   = NO
 PTT    = OFF
 S-Metr   = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF

Осталось с режимом разобраться от строки 57, не могу понять, как вывести...
 

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

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

  Serial.print(" HSWR   = ");
    if(tx_status.SWR){
    Serial.println("YES");
    }else{
    Serial.println("NO");}

  Serial.print(" PTT    = ");
    if(tx_status.PTTis){
    Serial.println("ON");
    }else{
    Serial.println("OFF");}
  
  TRX_Status rx_status = Radio.ReadRXStatus();
  Serial.print(" S-Metr   = ");
  Serial.println(rx_status.SMValue);
  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.NR){
    Serial.println("OFF");
    }else{
    Serial.println("ON");}
  Serial.println(); 

  TOperatingMode trxmode = Radio.GetOperatingMode();

  delay(3000);

 

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

Я тебе писал как вывести, в #100. Возьми за основу. 

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

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

Остальное работает?  Установки там всякие?

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

DetSimen пишет:

Я тебе писал как вывести, в #100. Возьми за основу. 

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

это то я взял, но этого оказалось мало, надо же еще и понять, со вторым не складывается )))

PS "Леночка, яица подействовали..." (врубился, получаем и передаём на разбор функции)
 

// Разбора и вывода текщего режима работы трансивера
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::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::FMN:
      Serial.println("FMN");    
      break;   
  default:
    Serial.println("Unknown mode");
    break;
  }
}

и вызов:
 

 TOperatingMode trxmode = Radio.GetOperatingMode();
 ModeToSerial(trxmode);

 

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

Так, есть баг в определении MODE, думаю, как в железе реализовать, чтобы отлаживаться
 

Start... резет ардуины
 Freq   = 18.08
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = CW

 Freq   = 18.08
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = CW

 Freq   = 0.00   резет трансивера
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = LSB

 Freq   = 18.08 частоту принял нормально
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = LSB  - режим остался прежний

 Freq   = 18.08
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = LSB

Start... делаю резет ардуины снова
 Freq   = 18.08
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = CW - режим снова обновился

 Freq   = 18.08
 Power  = 0
 Split  = ON
 HSWR   = NO
 PTT    = OFF
 S-Metr    = 4
 DISCRIM   = OFF
 DCS/CTCSS = OFF
 AF/SQL    = OFF
 Mode = CW

 

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

Даже не знаю, што тебе пацказать, в коде явных косяков нет. 

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

DetSimen пишет:

Даже не знаю, што тебе пацказать, в коде явных косяков нет. 

я тут посмотрел посмотрел, это не баг, всё правильно, в твоей библиотеке при включении выставляется МОДА CW, далее она принимает моду трансивера, а он при рестарте выставляет LSB )))
подумаю как переделать проверочный скетч и сохранять всё (в трансивере) в EEPROM.
Пора пускать в продакшен? )))
Просто смотрю, американцы по быстрому скидают код, плату разработают и наборами двигают на рынок, в коде масса детских ошибок но это им не мешает...другая культура однако...
Чтобы проверить с реальным девайсом надо сделать переходник с уарта на рс232, мелкосхемку надо прикупить max232 или виртуальнык порты поставить и через uart-usb соединить, вообщем буду решать, как попытать щастья далее

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

ua6em пишет:

в твоей библиотеке при включении выставляется МОДА CW, далее она принимает моду трансивера, а он при рестарте выставляет LSB )))

найди в *.h файле строку 

void SetOperatingMode(const TOperatingMode AMode = TOperatingMode::CW);

да поменяй на 

void SetOperatingMode(const TOperatingMode AMode = TOperatingMode::LSB); 

делов-то

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

ua6em пишет:

Пора пускать в продакшен? )))

Пускай. 

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

DetSimen пишет:

ua6em пишет:

в твоей библиотеке при включении выставляется МОДА CW, далее она принимает моду трансивера, а он при рестарте выставляет LSB )))

найди в *.h файле строку 

void SetOperatingMode(const TOperatingMode AMode = TOperatingMode::CW);

да поменяй на 

void SetOperatingMode(const TOperatingMode AMode = TOperatingMode::LSB); 

делов-то

ничего менять не надо...

объясни мне, вот ты принял байт статуса и отправляешь его в структуру, как он там правильно разложится?
 

struct TRX_Status {
	uint8_t SMValue	: 4;
	bool	unused	: 1;
	bool	Discr	: 1;
	bool	Code	: 1;
	bool	NR	: 1;
};

 

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

От меня еще надо чонить?

Morroc
Offline
Зарегистрирован: 24.10.2016

ua6em пишет:

Просто смотрю, американцы по быстрому скидают код, плату разработают и наборами двигают на рынок, в коде масса детских ошибок но это им не мешает...другая культура однако...

С тех пор, как стало возможно перепрошить девайс в любой момент, все по моему забили на ошибки в любительских девайсах, куда страшнее дорожку не туда развести или номинал r/c неподходящий влепить куда нибудь.

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

Morroc пишет:
ua6em пишет:
Просто смотрю, американцы по быстрому скидают код, плату разработают и наборами двигают на рынок, в коде масса детских ошибок но это им не мешает...другая культура однако...
С тех пор, как стало возможно перепрошить девайс в любой момент, все по моему забили на ошибки в любительских девайсах, куда страшнее дорожку не туда развести или номинал r/c неподходящий влепить куда нибудь.

Я его ошибки какие смог поправил, на гитхабе анонсировал, смотрю - поправил )))

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

DetSimen пишет:

От меня еще надо чонить?

пост 130 и
хочу написать скетч полной проверки
моды могу переключать в цикле от 1 до х и как setMode подсунуть правильные значения?

Да и реквесты мои посмотри, я привёл обозначения переменных и файл ключевых слов с общепринятыми
 

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

ua6em пишет:

объясни мне, вот ты принял байт статуса и отправляешь его в структуру, как он там правильно разложится?
 

struct TRX_Status {
	uint8_t SMValue	: 4;
	bool	unused	: 1;
	bool	Discr	: 1;
	bool	Code	: 1;
	bool	NR	: 1;
};

 

Разложится как в даташите написано

NR это 7й бит, все остальные по уменьшению

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

keywords.txt пришли мне на почту, я его запхаю в git

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

DetSimen пишет:

keywords.txt пришли мне на почту, я его запхаю в git

Докладываю!

Так как мелкосхемы max232 у меня пока нет,  в переделанной твоей библиотеке под SomeSerial, завернул работу скетча в SERIAL, то-есть сейчас он по сериалу (USB порт) пытается соединится с FT-897D который у меня подключен на COM-1, быстренько запустил эмулятор: нам нужен SPLITTER (расшарить FT-897) и редиректор, соединить порт ардуины и порт YAESU. Запустил. Работает. При резете ардуины устанавливает режим CW.
Можно дописать функции валкодера для перестройки частоты трансивера для дальнейшей отладки. Что посоветуешь?

 

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

ua6em пишет:

Можно дописать функции валкодера для перестройки частоты трансивера для дальнейшей отладки.

Можно. Благословляю. 

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

DetSimen пишет:

ua6em пишет:

Можно дописать функции валкодера для перестройки частоты трансивера для дальнейшей отладки.

Можно. Благословляю. 

Ну раз Сам автор благословил, тогда за дело, правда много букв получится, думаю за 1000 строк скетч перепрыгнет с моими то способностями )))
 

#ifdef FT-8
  Radio.SetOperatingMode(TOperatingMode::LSB); 
  Radio.SetMainFreq(1.840);
  delay(2000);
  Radio.SetMainFreq(1.908);
  delay(2000);
  Radio.SetMainFreq(3.573);
  delay(2000);
  Radio.SetMainFreq(7.074);
  delay(2000);
  Radio.SetOperatingMode(TOperatingMode::USB); 
  Radio.SetMainFreq(10.136);
  delay(2000);
  Radio.SetMainFreq(14.074);
  delay(2000);
  Radio.SetMainFreq(18.100);
  delay(2000);
  Radio.SetMainFreq(21.074);
  delay(2000);
  Radio.SetMainFreq(24.915);
  delay(2000);
  Radio.SetMainFreq(28.074);
  delay(2000);
  Radio.SetMainFreq(50.313);
  delay(2000);
  Radio.SetMainFreq(144.174);
  delay(2000);
  Radio.SetMainFreq(433.174);
  delay(2000);
  
  #else

 

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

Дмитрий! Глань! Глаз замылился, не пойму почему на 119.3 мегагерца код по условию не отрабатывает?

  Radio.SetMainFreq(119.300); // Авиа диапазон 118.0 - 137.0 Минводы - подход 119.3
  /*  Radio.SetMainFreq(121.900); //  Минводы руление, (АТИС - 127.400) */
  delay(400);
  ftFreq = Radio.GetFrequency(); 
 // Radio.SetOperatingMode(TOperatingMode::AM); // если так, то переключается в режим AM
  if(ftFreq >= 118.000f && ftFreq <= 137.000f) Radio.SetOperatingMode(TOperatingMode::AM); 
  delay(10000);  

 

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

Значить, ftFreq в 4й строке получается не в этом диапаносе

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

DetSimen пишет:

Значить, ftFreq в 4й строке получается не в этом диапаносе

Сейчас проверю, отправлю её на передачу )))
Для FT-847 может добавишь?
Есть еще режим WFM только не знаю, как его поймать, в доках код не описан
 

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

поймал глюк:

частоту устанавливает правильно - 119.300, а получает 1.19299

А если так, то вообще 811.311
 

  Radio.SetMainFreq(119.300); // Авиа диапазон 118.0 - 137.0 Минводы - подход 119.3
  /*  Radio.SetMainFreq(121.900); //  Минводы руление, (АТИС - 127.400) */
  delay(400);
  ftFreq = Radio.GetFrequency();
  delay(400);
  ftFreq = Radio.GetFrequency();
  delay(400);
  ftFreq = Radio.GetFrequency();
  Radio.SetMainFreq(ftFreq);
//  Radio.SetOperatingMode(TOperatingMode::AM); 
  if(ftFreq >= 118.000f && ftFreq <= 137.000f) Radio.SetOperatingMode(TOperatingMode::AM); 
  delay(10000);  

 

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

Да, я понял где касяк. Завтра проправлю

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

Получается с приёмом у него беда:
 

Start...
Freq = 0.00
Freq = 0.00
Freq = 8.40
Freq = 108.40
Freq = 21.08   // это правильная частота
Freq = 0.00
Freq = 0.00
Freq = 0.00
Freq = 21.08  // это правильная частота
Freq = 0.00
Freq = 0.00
Freq = 0.00
Freq = 8.40
Freq = 108.40
Freq = 21.08  // это правильная частота точнее она 21.084
Freq = 0.00
Freq = 8.40

Библиотека самая свежая, твоя, не переделанная мной и пример оттуда же

я вообще не представляю как ты аппендикс по телефону удаляешь )))
 

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

По умолчанию, Сериал выводит float с двумя цифрами после запятой. Если нада больше, используй dtostrf(). 

Нада, наерна, частоту сразу строкой отдавать из биб-ки, дабы избежать...

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

DetSimen пишет:

По умолчанию, Сериал выводит float с двумя цифрами после запятой. Если нада больше, используй dtostrf(). 

Нада, наерна, частоту сразу строкой отдавать из биб-ки, дабы избежать...

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

Могу сделать еще один редиректор, и к нему присоединить программу управления трансивером, отследить всю цепочку
(в программе управления трансивером всё ОК)

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

Под библиотекой CustomSoftwareSerial работает и приём и передача.
Может под неё адаптируешь?
Выходит штатная SoftwareSerial весьма кривая ...

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

переделал на 

char *const dtsFT897D::GetFrequency(void)
{
	const uint8_t MAX_LENGTH = 0x09;

	float value = 0.0f;

	if (ReadLongStatus(2000)) {

		char buf[MAX_LENGTH];
		memset(buf, 0, MAX_LENGTH);

		uint8_t* ptr = (uint8_t*)(&FCommand.Byte0);

		uint8_t idx = 0;

		for (uint8_t i = 0; i < 4; ++i) {
			buf[idx] = (ptr[i] >> 4) + '0';
			buf[idx + 1] = (ptr[i] & 0x0F) + '0';
			idx += 2;
		}

		value = atol(buf) / 100000.0f;
	}

	ClearOutString();
	return dtostrf(value, 9, 5, FOutString);
}

теперь отдаёт не float, а строку, с 5 знаками после запятой.  Пушить эти изменения? Или няхай float отдаёт? 

Кста, у меня преобразовывается правильно и 1.23456 МГц и 123.45678 Мгц. Главное, из порта 5 правильных байт получить. 

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

ua6em пишет:

Под библиотекой CustomSoftwareSerial работает и приём и передача.
Может под неё адаптируешь?

Там адаптировать нечего. В *.h файле замени 

SoftwareSerial& FPort;

на 

CustomSoftwareSerial& FPort;

 

Да в конструкторе тип параметра поменяй  в *.h и *.cpp файлах

dtsFT897D(CustomSoftwareSerial& ASerialPort); 

 

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

 

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

ua6em пишет:

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

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