Автор Тема: ADF4350  (Прочитано 167253 раз)

R3GC Владимир и 2 Гостей просматривают эту тему.

Оффлайн Alegz

  • Постоялец
  • ***
  • Сообщений: 59
  • Репутация: +17/-0
  • Подпись находится в стадии разработки
  • QRA: KN
Re: ADF4350
« Ответ #585 : 24 Декабрь 2024, 21:12:44 »
В общем, провёл сегодня лабораторную работу, тоже с первой попытки скетч не взлетел. Буду пытаться разобраться, где собака порылась, но уже как получится.

Оффлайн R3VE Дмитрий

  • Ветеран
  • *****
  • Сообщений: 1483
  • Репутация: +176/-35
  • 144-14эл+LNA+PA,430-26эл+LNA+PA,1296-50el+LNA+PA
  • QRA: lo16bf
Re: ADF4350
« Ответ #586 : 24 Декабрь 2024, 21:24:04 »
Буду пытаться разобраться
Привет!тоже думаю что где то ,че то не то в скетче!

Оффлайн R3VE Дмитрий

  • Ветеран
  • *****
  • Сообщений: 1483
  • Репутация: +176/-35
  • 144-14эл+LNA+PA,430-26эл+LNA+PA,1296-50el+LNA+PA
  • QRA: lo16bf
Re: ADF4350
« Ответ #587 : 25 Декабрь 2024, 12:42:16 »
Не понятно зачем для запуска манипуляции cw ,надо замыкать D5 c наны на корпус adf4153 ,потом на пин CE ???

Оффлайн Alegz

  • Постоялец
  • ***
  • Сообщений: 59
  • Репутация: +17/-0
  • Подпись находится в стадии разработки
  • QRA: KN
Re: ADF4350
« Ответ #588 : 25 Декабрь 2024, 19:56:42 »
Не понятно зачем для запуска манипуляции cw ,надо замыкать D5 c наны на корпус adf4153 ,потом на пин CE ???
Теперь понятно.
Собака порылась здесь:
void setup() {
  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);
                         ^^^^

Должно быть  digitalWrite(5, HIGH);
При D5 LOW, он же СЕ, все установки пишутся в отключенный чип, который на эти попытки рисует фигвам. У Вас при опытах с проводками получается, что в какой-то момент на CE возникает логическая единица, которая запускает ADF на запись установок в чип. С этого момента и начинается работа чипа до следующего ресета.

Оффлайн R3VE Дмитрий

  • Ветеран
  • *****
  • Сообщений: 1483
  • Репутация: +176/-35
  • 144-14эл+LNA+PA,430-26эл+LNA+PA,1296-50el+LNA+PA
  • QRA: lo16bf
Re: ADF4350
« Ответ #589 : 27 Декабрь 2024, 13:14:29 »
Должно быть  digitalWrite(5, HIGH)
Привет!После этого все нормально заработало сразу после подачи питания?

Оффлайн Alegz

  • Постоялец
  • ***
  • Сообщений: 59
  • Репутация: +17/-0
  • Подпись находится в стадии разработки
  • QRA: KN
Re: ADF4350
« Ответ #590 : 27 Декабрь 2024, 13:54:11 »
Должно быть  digitalWrite(5, HIGH)
Привет!После этого все нормально заработало сразу после подачи питания?
Это точно была главная причина. Возможно, ещё ноги перенумеровал, не помню, т.к. разбирался без заметок, чисто с логическим анализатором. К вечеру доберусь домой, внимательней гляну, что точно менял. У меня скетч теперь запускается с подачи питания.

Оффлайн Alegz

  • Постоялец
  • ***
  • Сообщений: 59
  • Репутация: +17/-0
  • Подпись находится в стадии разработки
  • QRA: KN
Re: ADF4350
« Ответ #591 : 27 Декабрь 2024, 19:12:26 »
Проверил. Вроде кроме D5 HIGH отличий нет. На всякий случай - то, что у меня рабтает на Nano. Подключение через делитель 560 Ом + 1 кОм. Запускается при подаче питания. Светодиод моргает в такт CW. RTL-SDR принимает. Что не получается - говорите, будем сравнивать


/*
  ARDUINO   ADF4351
   D5       CE
   D10      LE
   D13      CLK
   D12      LD
   D11      DAT
   GND      GND
   +5V      +5V
*/

#include <SPI.h>

const char message[] = "SOS";

const int point_time = 80; // SPEED (ms)
const unsigned char freq_div = 1;
struct s_abc {
  char letter;
  char sign[7];
};

const s_abc abc[] = {
  'A', ".-", 'B', "-...", 'W', ".--", 'G', "--.", 'D', "-..",
  'E', ".", 'V', "...-", 'Z', "--..", 'I', "..",
  'J', ".---", 'K', "-.-", 'L', ".-..", 'M', "--", 'N', "-.",
  'O', "---", 'P', ".--.", 'R', ".-.", 'S', "...",
  'T', "-", 'U', "..-", 'F', "..-.", 'H', "....", 'C', "-.-.",
  'Q', "--.-", 'Y', "-.--", 'X', "-..-", '1', ".----",
  '2', "..---", '3', "...--", '4', "....-", '5', ".....",
  '6', "-....", '7', "--...", '8', "---..", '9', "----.",
  '0', "-----", '.', "......", ',', ".-.-.-", ':', "---...",
  ';', "-.-.-.", '(', "-.--.-", '`', ".----.",
  '"', ".-..-.", '-', "-....-", '/', "-..-.", '?', "..--..",
  '!', "--..--", '@', ".--.-.", '\\', "..-.-"
};
unsigned char abc_size = sizeof(abc) / sizeof(abc[0]);
int press = 0;
int mdbm = 3;  // mdbm0 = -4dBm  mdbm = 3 = +5dBm
const int slaveSelectPin = 10;
long Freq  = 14530000; // FREQUENCY 145.300 MHz (2m band)
long refin = 2500000; // REF OSCILLATOR
unsigned long Reg[6];
const int CLK = 13;
const int DATA = 11;


void setup() {
  pinMode(5, OUTPUT);
  //digitalWrite(5, LOW);
  digitalWrite(5, HIGH);
  pinMode (slaveSelectPin, OUTPUT);
  digitalWrite(slaveSelectPin, LOW);
  SPI.setDataMode(SPI_MODE0);
  SPI.setBitOrder(MSBFIRST);
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  pinMode(6, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);
  SPI.begin();
  delay(50);
  SetFreq(Freq);
}


void loop() {
  for (int n = 0; message[n] != 0; n++)
    send_letter(message[n]);
  delay(1000);  //  TIME PAUSE
}





void send_letter(char l) {
  if (l == ' ') {
    delay(point_time * 7);
    return;
  }
  unsigned char idx = 255;
  for (unsigned char i = 0; i < abc_size; i++)
    if (abc[i].letter == l) {
      idx = i;
      break;
    }
  if (idx == 255) return;
  const char *s = abc[idx].sign;
  for (unsigned char c = 0; s[c] != 0; c++) {
    char q = s[c];
    DDRB |= 1 << 1;
    digitalWrite(5, HIGH);
    if (q == '.') delay(point_time);
    else delay(point_time * 3);
    DDRB &= ~(1 << 1);
    digitalWrite(5, LOW);
    delay(point_time);
  }
  delay(point_time * 2);
}

void SetFreq(long Frequ) {
  ConvertFreq(Reg);
  WriteADF2(5);
  delayMicroseconds(250);
  WriteADF2(4);
  delayMicroseconds(250);
  WriteADF2(3);
  delayMicroseconds(250);
  WriteADF2(2);
  delayMicroseconds(250);
  WriteADF2(1);
  delayMicroseconds(250);
  WriteADF2(0);
  delayMicroseconds(250);
}

void WriteADF2(int idx) {
  byte buf[4];
  for (int i = 0; i < 4; i++)
    buf[i] = (byte)(Reg[idx] >> (i * 8));
  WriteADF(buf[3], buf[2], buf[1], buf[0]);
}

int WriteADF(byte a1, byte a2, byte a3, byte a4) {
  digitalWrite(slaveSelectPin, LOW);
  delayMicroseconds(10);
  SPI.transfer(a1);
  SPI.transfer(a2);
  SPI.transfer(a3);
  SPI.transfer(a4);
  Toggle();
}

int Toggle() {
  digitalWrite(slaveSelectPin, HIGH);
  delayMicroseconds(5);
  digitalWrite(slaveSelectPin, LOW);
}

void ConvertFreq(unsigned long R[]) {
  int P_Phase = 1;
  int Prescal = 0;
  int PhaseAdj = 0;
  int U1_CountRes = 0;
  int U2_Cp3state = 0;
  int U3_PwrDown = 0;
  int U4_PDpola = 1;
  int U5_LPD = 0;
  int U6_LPF = 1;
  int CP_ChgPump = 7;
  int D1_DoublBuf = 0;
  int R_Counter = 2;
  int RD1_Rdiv2 = 1;
  int RD2refdoubl = 0;
  int M_Muxout = 0;
  int LoNoisSpur = 0;
  int D_Clk_div = 150;
  int C_Clk_mode = 0;
  int F1_Csr = 0;
  int F2_ChgChan = 0;
  int F3_ADB = 0;
  int F4_BandSel = 0;
  int D_out_PWR = mdbm;
  int D_RF_ena = 1;
  int D_auxOutPwr = mdbm;
  int D_auxOutEna = 1;
  int D_auxOutSel = 1;
  int D_MTLD = 0;
  int D_VcoPwrDown = 0;
  int B_BandSelClk = 200;
  int D_RfDivSel = 3;
  int D_FeedBck = 1;
  int D_LdPinMod = 1;
  long RFout = Freq;
  int outdiv = 1;
  if (RFout >= 220000000) {
    outdiv = 1;
    D_RfDivSel = 0;
  } if (RFout < 220000000) {
    outdiv = 2;
    D_RfDivSel = 1;
  } if (RFout < 110000000) {
    outdiv = 4;
    D_RfDivSel = 2;
  } if (RFout < 55000000) {
    outdiv = 8;
    D_RfDivSel = 3;
  } if (RFout < 27500000) {
    outdiv = 16;
    D_RfDivSel = 4;
  } if (RFout < 13800000) {
    outdiv = 32;
    D_RfDivSel = 5;
  } if (RFout < 6900000) {
    outdiv = 64;
    D_RfDivSel = 6;
  }
  float PFDFreq = refin * ((1.0 + RD2refdoubl) / (R_Counter * (1.0 + RD1_Rdiv2)));
  float N = ((RFout) * outdiv) / PFDFreq;
  int N_Int = N; long M_Mod = (PFDFreq * 100) / 100000; int F_Frac = round((N - N_Int) * M_Mod);
  R[0] = (unsigned long)(0 + F_Frac * pow(2, 3) + N_Int * pow(2, 15));
  R[1] = (unsigned long)(1 + M_Mod * pow(2, 3) + P_Phase * pow(2, 15) + Prescal * pow(2, 27) + PhaseAdj * pow(2, 28));
  R[2] = (unsigned long)(2 + U1_CountRes * pow(2, 3) + U2_Cp3state * pow(2, 4) + U3_PwrDown * pow(2, 5) + U4_PDpola * pow(2, 6) + U5_LPD * pow(2, 7) + U6_LPF * pow(2, 8) + CP_ChgPump * pow(2, 9) + D1_DoublBuf * pow(2, 13) + R_Counter * pow(2, 14) + RD1_Rdiv2 * pow(2, 24) + RD2refdoubl * pow(2, 25) + M_Muxout * pow(2, 26) + LoNoisSpur * pow(2, 29));
  R[3] = (unsigned long)(3 + D_Clk_div * pow(2, 3) + C_Clk_mode * pow(2, 15) + 0 * pow(2, 17) + F1_Csr * pow(2, 18) + 0 * pow(2, 19) + F2_ChgChan * pow(2, 21) +  F3_ADB * pow(2, 22) + F4_BandSel * pow(2, 23) + 0 * pow(2, 24));
  R[4] = (unsigned long)(4 + D_out_PWR * pow(2, 3) + D_RF_ena * pow(2, 5) + D_auxOutPwr * pow(2, 6) + D_auxOutEna * pow(2, 8) + D_auxOutSel * pow(2, 9) + D_MTLD * pow(2, 10) + D_VcoPwrDown * pow(2, 11) + B_BandSelClk * pow(2, 12) + D_RfDivSel * pow(2, 20) + D_FeedBck * pow(2, 23));
  R[5] = (unsigned long)(5 + 0 * pow(2, 3) + 3 * pow(2, 19) + 0 * pow(2, 21) + D_LdPinMod * pow(2, 22));
}

Оффлайн R3VE Дмитрий

  • Ветеран
  • *****
  • Сообщений: 1483
  • Репутация: +176/-35
  • 144-14эл+LNA+PA,430-26эл+LNA+PA,1296-50el+LNA+PA
  • QRA: lo16bf
Re: ADF4350
« Ответ #592 : 27 Декабрь 2024, 22:07:18 »
Что не получается - говорите, будем сравнивать!
Хорошо!

Оффлайн R3VE Дмитрий

  • Ветеран
  • *****
  • Сообщений: 1483
  • Репутация: +176/-35
  • 144-14эл+LNA+PA,430-26эл+LNA+PA,1296-50el+LNA+PA
  • QRA: lo16bf
Re: ADF4350
« Ответ #593 : Вчера в 21:04:10 »
Залил исправленный скетч и все норм работает !