AnsweredAssumed Answered

34980A:34950A WORD and LWOR outputs only affect first BYTE

Question asked by blawry on Jan 13, 2012
Latest reply on Jan 16, 2012 by tomc
Hi.  I am using a 34980A with a 34950A module in slot 2.  All channels configured with NORMal POLarity, ACTive DRIVe, and a LEVel of 4.0. 
I configure 2101 for a LongWORD WIDTh.  If I write a LWORd to 2101, only the 1st byte of 2101 is changed (2102-2104 never change state).
If I switch to BYTE width for 2101-2104, writes to all 32 channels work as expected so I know the hardware is OK.

This happens from the front panel, when using ...->IO->WriteString(), and when using ...->PutWidth()/->PutDirection()/..->Output->PutDrive(),
...->Output->PutVoltLevel(), and ...->WriteLongWord().  I see the same incorrect behavior with 2201-2204.  I also see similar incorrect
behavior if I use 2 WORDs instead of 1 LWORd.

I have attached IO Monitor data for the following Visual C++ IVI code:
(post continues after the code)
////////////////////////////////////////////////////////////////////////////////////
     lxi->System->IO->WriteString("CONF:DIG:WIDT LWOR,(@2101)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:WIDT? (@2101)\n", VARIANT_TRUE);
     _bstr_t resp = lxi->System->IO->ReadString();

     lxi->System->IO->WriteString("CONF:DIG:POL NORM,(@2101)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:DRIV ACT,(@2101)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:LEV 4,(@2101)\n", VARIANT_TRUE);

     if (enable)
          lxi->System->IO->WriteString("SOUR:DIG:DATA:LWOR #hFFFFFFFF,(@2101)\n", VARIANT_TRUE);
     else
          lxi->System->IO->WriteString("SOUR:DIG:DATA:LWOR 0,(@2101)\n", VARIANT_TRUE);

     ///////////////////////////////////////////////////////////////////////////////

     lxi->System->IO->WriteString("CONF:DIG:WIDT BYTE,(@2201)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:WIDT? (@2201)\n", VARIANT_TRUE);
     resp = lxi->System->IO->ReadString();

     lxi->System->IO->WriteString("CONF:DIG:WIDT BYTE,(@2202)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:WIDT? (@2202)\n", VARIANT_TRUE);
     resp = lxi->System->IO->ReadString();

     lxi->System->IO->WriteString("CONF:DIG:WIDT BYTE,(@2203)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:WIDT? (@2203)\n", VARIANT_TRUE);
     resp = lxi->System->IO->ReadString();

     lxi->System->IO->WriteString("CONF:DIG:WIDT BYTE,(@2204)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:WIDT? (@2204)\n", VARIANT_TRUE);
     resp = lxi->System->IO->ReadString();

     lxi->System->IO->WriteString("CONF:DIG:POL NORM,(@2201)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:POL NORM,(@2202)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:POL NORM,(@2203)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("CONF:DIG:POL NORM,(@2204)\n", VARIANT_TRUE);

     lxi->System->IO->WriteString("SOUR:DIG:DRIV ACT,(@2201)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:DRIV ACT,(@2202)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:DRIV ACT,(@2203)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:DRIV ACT,(@2204)\n", VARIANT_TRUE);

     lxi->System->IO->WriteString("SOUR:DIG:LEV 4,(@2201)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:LEV 4,(@2202)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:LEV 4,(@2203)\n", VARIANT_TRUE);
     lxi->System->IO->WriteString("SOUR:DIG:LEV 4,(@2204)\n", VARIANT_TRUE);

     if (enable)
     {
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE #hFF,(@2201)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE #hFF,(@2202)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE #hFF,(@2203)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE #hFF,(@2204)\n", VARIANT_TRUE);
     }
     else
     {
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE 0,(@2201)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE 0,(@2202)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE 0,(@2203)\n", VARIANT_TRUE);
          lxi->System->IO->WriteString("SOUR:DIG:DATA:BYTE 0,(@2204)\n", VARIANT_TRUE);
     }
////////////////////////////////////////////////////////////////////////////////////
The "CONF:DIG:WIDT?" queries (as well as the front panel) indicate that 2101-2104 are grouped  as a 32-bit LWORd.

Am I misunderstanding how the WORD/LWORd access should work?

TIA.  

Attachments

Outcomes