This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LMX2582: Programming using NODE MCU

Part Number: LMX2582


Hi team,

We are planning to program LMX2582 using Node MCU using SPI Interface .

Below are the register values we are planning to write in the LMX 

R70 0x460000
R69 0x450000
R68 0x440089
R64 0x400077
R62 0x3E0000
R61 0x3D0001
R59 0x3B0000
R48 0x3003FC
R47 0x2F08CF
R46 0x2E1FA3
R45 0x2D0384
R44 0x2C0000
R43 0x2B0000
R42 0x2A0000
R41 0x2903E8
R40 0x280000
R39 0x278204
R38 0x26002C
R37 0x254000
R36 0x240011
R35 0x23021B
R34 0x22C3EA
R33 0x212A0A
R32 0x20210A
R31 0x1F0401
R30 0x1E0034
R29 0x1D0084
R28 0x1C2924
R25 0x190000
R24 0x180509
R23 0x178842
R22 0x162300
R20 0x14012C
R19 0x130965
R14 0x0E018C
R13 0x0D4000
R12 0x0C7001
R11 0x0B0018
R10 0x0A10D8
R9 0x090302
R8 0x081084
R7 0x0728B2
R4 0x041943
R2 0x020500
R1 0x010808
R0 0x00221C

Can you confirm me is it possible to write using NODE MCU

  • Hi Manasa, 
    If the MCU can perform SPI writes with the timing requirements in the DS than there should be no issue. 

    Regards, 

    Vicente 

  • Hi team,

    I am programming using NODE MCU (ESP8266)

    We Verified the functionality of LMX2582 using Tics pro software .Its working fine .

    But we are unable to lock the frequency using Node MCU (only default frequency we observed)

    It would be helpful if you verify the code and guide us what we are missing in the code to control the LMX2582

    #include <SPI.h>
    
    // Define LMX2582 control pins
    #define LMX_CS_PIN 15 // Adjust to your CS pin
    #define LMX_CLK_PIN 14 // Adjust to your CLK pin
    #define LMX_MOSI_PIN 13 // Adjust to your MOSI pin
    
    // LMX2582 register addresses (16-bit addresses)
    #define REG_R0  0x00
    #define REG_R1  0x01
    #define REG_R2  0x02
    #define REG_R4  0x04
    #define REG_R7  0x0728B2
    #define REG_R8  0x081084
    #define REG_R9  0x090302
    #define REG_R10 0x0A10D8
    #define REG_R11 0x0B0018
    #define REG_R12 0x0C7001
    #define REG_R13 0x0D4000
    #define REG_R14 0x0E018C
    #define REG_R19 0x130965
    #define REG_R20 0x14012C
    #define REG_R22 0x162300
    #define REG_R23 0x178842
    #define REG_R24 0x180509
    #define REG_R25 0x190000
    #define REG_R28 0x1C2924
    #define REG_R29 0x1D0084
    #define REG_R30 0x1E0034
    #define REG_R31 0x1F0401
    #define REG_R32 0x20210A
    #define REG_R33 0x212A0A
    #define REG_R34 0x22C3EA
    #define REG_R35 0x23021B
    #define REG_R36 0x240011
    #define REG_R37 0x254000
    #define REG_R38 0x26002C
    #define REG_R39 0x278204
    #define REG_R40 0x280000
    #define REG_R41 0x2903E8
    #define REG_R42 0x2A00
    #define REG_R43 0x2B00
    #define REG_R44 0x2C00
    #define REG_R45 0x2D0384
    #define REG_R46 0x2E1FA3
    #define REG_R47 0x2F08CF
    #define REG_R48 0x3003FC
    #define REG_R59 0x3B0000
    #define REG_R61 0x3D0001
    #define REG_R62 0x3E0000
    #define REG_R64 0x400077
    #define REG_R68 0x440089
    #define REG_R69 0x450000
    #define REG_R70 0x460000
    
    // Function to write to an LMX2582 register
    void writeLMXRegister(uint8_t regAddr, uint16_t data) {
      // Combine regAddr and data into a 24-bit value
      uint32_t regData = ((uint32_t)regAddr << 16) | (uint32_t)data;
    
      // Write R/W bit and address MSB
      SPI.transfer((regData >> 23) & 0x01);  
      SPI.transfer((regData >> 16) & 0xFF);  
    
      // Write address LSB and data MSB
      SPI.transfer((regData >> 8) & 0xFF);   
      
      // Write data LSB
      SPI.transfer(data & 0xFF);  
    }
    
    void setup() {
      Serial.begin(115200);
    
      // Initialize SPI communication
      SPI.begin();
      
      // Configure LMX_CS_PIN as an output
      pinMode(LMX_CS_PIN, OUTPUT);
    
      // Set CS pin high initially
      // digitalWrite(LMX_CS_PIN, HIGH);
      
      // Configure SPI settings for 1 MHz speed (adjust as needed)
      SPI.beginTransaction(SPISettings(25000, MSBFIRST, SPI_MODE0));  
    
      digitalWrite(LMX_CS_PIN, LOW);
    
      writeLMXRegister(REG_R70, 0x460000);
      writeLMXRegister(REG_R69, 0x450000);
      writeLMXRegister(REG_R68, 0x440089);
      writeLMXRegister(REG_R64, 0x400077);
      writeLMXRegister(REG_R62, 0x3E0000);
      writeLMXRegister(REG_R61, 0x3D0001);
      writeLMXRegister(REG_R59, 0x3B0000);
      writeLMXRegister(REG_R48, 0x3003FC);
      writeLMXRegister(REG_R47, 0x2F08CF);
      writeLMXRegister(REG_R46, 0x2E1FA3);
      writeLMXRegister(REG_R45, 0x2D0384);
      writeLMXRegister(REG_R44, 0x2C00);
      writeLMXRegister(REG_R43, 0x2B00);
      writeLMXRegister(REG_R42, 0x2A00);
      writeLMXRegister(REG_R41, 0x2903E8);
      writeLMXRegister(REG_R40, 0x280000);
      writeLMXRegister(REG_R39, 0x278204);
      writeLMXRegister(REG_R38, 0x26002C);
      writeLMXRegister(REG_R37, 0x254000);
      writeLMXRegister(REG_R36, 0x240011);
      writeLMXRegister(REG_R35, 0x23021B);
      writeLMXRegister(REG_R34, 0x22C3EA);
      writeLMXRegister(REG_R33, 0x212A0A);
      writeLMXRegister(REG_R32, 0x20210A);
      writeLMXRegister(REG_R31, 0x1F0401);
      writeLMXRegister(REG_R30, 0x1E0034);
      writeLMXRegister(REG_R29, 0x1D0084);
      writeLMXRegister(REG_R28, 0x1C2924);
      writeLMXRegister(REG_R25, 0x190000);
      writeLMXRegister(REG_R24, 0x180509);
      writeLMXRegister(REG_R23, 0x178842);
      writeLMXRegister(REG_R22, 0x162300);
      writeLMXRegister(REG_R20, 0x14012C);
      writeLMXRegister(REG_R19, 0x130965);
      writeLMXRegister(REG_R14, 0x0E018C);
      writeLMXRegister(REG_R13, 0x0D4000);
      writeLMXRegister(REG_R12, 0x0C7001);
      writeLMXRegister(REG_R11, 0x0B0018);
      writeLMXRegister(REG_R10, 0x0A10D8);
      writeLMXRegister(REG_R9, 0x090302);
      writeLMXRegister(REG_R8, 0x081084);
      writeLMXRegister(REG_R7, 0x0728B2);
      writeLMXRegister(REG_R4, 0x041943);
      writeLMXRegister(REG_R2, 0x020505);
      writeLMXRegister(REG_R1, 0x010808);
      writeLMXRegister(REG_R0, 0x00221C);
    
      // Bring CS pin high to deselect the LMX2582 slave
      digitalWrite(LMX_CS_PIN, HIGH);
    }
    
    void loop() {
      // Bring CS pin low to select the LMX2582 slave
      // Example: Write data to LMX2582 registers
      // Optional delay
      // delay(1000);
    }
    

    #include <SPI.h>

    // Define LMX2582 control pins
    #define LMX_CS_PIN 15 // Adjust to your CS pin
    #define LMX_CLK_PIN 14 // Adjust to your CLK pin
    #define LMX_MOSI_PIN 13 // Adjust to your MOSI pin

    // LMX2582 register addresses (16-bit addresses)
    #define REG_R0 0x00
    #define REG_R1 0x01
    #define REG_R2 0x02
    #define REG_R4 0x04
    #define REG_R7 0x0728B2
    #define REG_R8 0x081084
    #define REG_R9 0x090302
    #define REG_R10 0x0A10D8
    #define REG_R11 0x0B0018
    #define REG_R12 0x0C7001
    #define REG_R13 0x0D4000
    #define REG_R14 0x0E018C
    #define REG_R19 0x130965
    #define REG_R20 0x14012C
    #define REG_R22 0x162300
    #define REG_R23 0x178842
    #define REG_R24 0x180509
    #define REG_R25 0x190000
    #define REG_R28 0x1C2924
    #define REG_R29 0x1D0084
    #define REG_R30 0x1E0034
    #define REG_R31 0x1F0401
    #define REG_R32 0x20210A
    #define REG_R33 0x212A0A
    #define REG_R34 0x22C3EA
    #define REG_R35 0x23021B
    #define REG_R36 0x240011
    #define REG_R37 0x254000
    #define REG_R38 0x26002C
    #define REG_R39 0x278204
    #define REG_R40 0x280000
    #define REG_R41 0x2903E8
    #define REG_R42 0x2A00
    #define REG_R43 0x2B00
    #define REG_R44 0x2C00
    #define REG_R45 0x2D0384
    #define REG_R46 0x2E1FA3
    #define REG_R47 0x2F08CF
    #define REG_R48 0x3003FC
    #define REG_R59 0x3B0000
    #define REG_R61 0x3D0001
    #define REG_R62 0x3E0000
    #define REG_R64 0x400077
    #define REG_R68 0x440089
    #define REG_R69 0x450000
    #define REG_R70 0x460000

    // Function to write to an LMX2582 register
    void writeLMXRegister(uint8_t regAddr, uint16_t data) {
    // Combine regAddr and data into a 24-bit value
    uint32_t regData = ((uint32_t)regAddr << 16) | (uint32_t)data;

    // Write R/W bit and address MSB
    SPI.transfer((regData >> 23) & 0x01);
    SPI.transfer((regData >> 16) & 0xFF);

    // Write address LSB and data MSB
    SPI.transfer((regData >> 8) & 0xFF);

    // Write data LSB
    SPI.transfer(data & 0xFF);
    }

    void setup() {
    Serial.begin(115200);

    // Initialize SPI communication
    SPI.begin();

    // Configure LMX_CS_PIN as an output
    pinMode(LMX_CS_PIN, OUTPUT);

    // Set CS pin high initially
    // digitalWrite(LMX_CS_PIN, HIGH);

    // Configure SPI settings for 1 MHz speed (adjust as needed)
    SPI.beginTransaction(SPISettings(25000, MSBFIRST, SPI_MODE0));

    digitalWrite(LMX_CS_PIN, LOW);

    writeLMXRegister(REG_R70, 0x460000);
    writeLMXRegister(REG_R69, 0x450000);
    writeLMXRegister(REG_R68, 0x440089);
    writeLMXRegister(REG_R64, 0x400077);
    writeLMXRegister(REG_R62, 0x3E0000);
    writeLMXRegister(REG_R61, 0x3D0001);
    writeLMXRegister(REG_R59, 0x3B0000);
    writeLMXRegister(REG_R48, 0x3003FC);
    writeLMXRegister(REG_R47, 0x2F08CF);
    writeLMXRegister(REG_R46, 0x2E1FA3);
    writeLMXRegister(REG_R45, 0x2D0384);
    writeLMXRegister(REG_R44, 0x2C00);
    writeLMXRegister(REG_R43, 0x2B00);
    writeLMXRegister(REG_R42, 0x2A00);
    writeLMXRegister(REG_R41, 0x2903E8);
    writeLMXRegister(REG_R40, 0x280000);
    writeLMXRegister(REG_R39, 0x278204);
    writeLMXRegister(REG_R38, 0x26002C);
    writeLMXRegister(REG_R37, 0x254000);
    writeLMXRegister(REG_R36, 0x240011);
    writeLMXRegister(REG_R35, 0x23021B);
    writeLMXRegister(REG_R34, 0x22C3EA);
    writeLMXRegister(REG_R33, 0x212A0A);
    writeLMXRegister(REG_R32, 0x20210A);
    writeLMXRegister(REG_R31, 0x1F0401);
    writeLMXRegister(REG_R30, 0x1E0034);
    writeLMXRegister(REG_R29, 0x1D0084);
    writeLMXRegister(REG_R28, 0x1C2924);
    writeLMXRegister(REG_R25, 0x190000);
    writeLMXRegister(REG_R24, 0x180509);
    writeLMXRegister(REG_R23, 0x178842);
    writeLMXRegister(REG_R22, 0x162300);
    writeLMXRegister(REG_R20, 0x14012C);
    writeLMXRegister(REG_R19, 0x130965);
    writeLMXRegister(REG_R14, 0x0E018C);
    writeLMXRegister(REG_R13, 0x0D4000);
    writeLMXRegister(REG_R12, 0x0C7001);
    writeLMXRegister(REG_R11, 0x0B0018);
    writeLMXRegister(REG_R10, 0x0A10D8);
    writeLMXRegister(REG_R9, 0x090302);
    writeLMXRegister(REG_R8, 0x081084);
    writeLMXRegister(REG_R7, 0x0728B2);
    writeLMXRegister(REG_R4, 0x041943);
    writeLMXRegister(REG_R2, 0x020505);
    writeLMXRegister(REG_R1, 0x010808);
    writeLMXRegister(REG_R0, 0x00221C);

    // Bring CS pin high to deselect the LMX2582 slave
    digitalWrite(LMX_CS_PIN, HIGH);
    }

    void loop() {
    // Bring CS pin low to select the LMX2582 slave
    // Example: Write data to LMX2582 registers
    // Optional delay
    // delay(1000);
    }

  • Hi Manasa, 
    We cannot help with drivers/MCU code. 
    You can export the raw registers in TICSpro: 

    Regards, 

    Vicente