Technical Forum Moderator
  • Content count

  • Joined

  • Last visited

  • Days Won


attila last won the day on September 6

attila had the most liked content!


About attila

  • Rank
    Prolific Poster

Profile Information

  • Gender
    Not Telling

Recent Profile Visitors

3,088 profile views
  1. Hi @tutu The dwf lib requires files in the firmware path which are the firmware images for various devices. The dwf also depends on the adept runtime. At the moment dwf app bundle options are supported on Windows and OS-X, but I will add for Linux too.
  2. TDM Protocol with Digital Discovery

    Hi @ninjit You could use custom interpreter to decode multiple TDM microphones.
  3. Noise output when changing freq.

    Hi @suktan Changing any option in the Wavegen interface the AWG is restarted, so the earlier running function is suddenly stopped and this could result a steep edge.
  4. Import audio file size limitation

    Hi @suktan The WaveForms application WaveGen "import to play" has a sample limitation of 100M on 64bit and 10M on 32bit system.
  5. Hi @Jonboy Special sub-addressing is only required for read operations. In this process the sub-address write is followed by a restart and read. For write operations you can just concatenate the "sub-address" with the array of data you have to write. var a = [1,2] // sub-address var b = [3,4] // data var c = a.concat(b) Protocol.I2C.Write(0x48, c)
  6. Digital Discovery API

    Hi @Souther Just typecast the integer value to floating point for DIOPE/PP, like: FDwfAnalogIOChannelNodeSet(hdwf, 0, 2, c_double(0x00FF)) #DIOPE
  7. Sending CTRL-Z with the Protocol UART

    Hi @Randy Select Ending Custom and enter "\x1A" and you can also enter escape characters in TX field.
  8. Hi @tutu The AD(1) is supported. To have more detail about failures use the FDwfGetLastErrorMsg: szerr = create_string_buffer(512) dwf.FDwfGetLastErrorMsg(szerr) print szerr.value
  9. Hi @peter64 The VIO output is limited to 100mA and high capacitive loads might cause overcurrent. Try connecting your circuit to VIO before enabling the output.
  10. Hi @Jonboy You have in private message a beta version fixing the return value problem. The I2C Read/Write functions are slightly different for the Script. For subaddress and write data it requires array. In Read function the count and subaddress arguments are reverse order compared to Custom. Protocol.I2C.Read(address, optional count of bytes, [optional array of subaddress]) Protocol.I2C.Read(0x40, 3, [0,1]) > Start, h80 [ h40 | WR ], h00, h01, > Restart, h81 [ h40 | RD ], h39, h9F, h1E NAK, Stop Protocol.I2C.Write(address, optional [array of data]) Protocol.I2C.Write(0x40, [0,1]) > Start, h80 [ h40 | WR ], h00, h01, Stop
  11. TDM Protocol with Digital Discovery

    Hi @Douglas I just notice the I2S decoder can also process TDM data and decoding with this is much faster. Just add a filter to the Event view to show the values for one channel, like starts with L. tdm2.dwf3work
  12. TDM Protocol with Digital Discovery

    Hi @Douglas The attached project generates SCK/WS signals on DIO25/24, 64/1 clocks from 128 custom samples at 6.25MHz, 48.8khz sample rate. Remove the DIO26 from pattern and connect it to SD. The Logic Analyzer is configured to store the SCK transitions and custom interpreter to decode the first 24 SD bits on SCK falling edge after WS. To see only the decoded data open View/Events and select TDM. This data can also be exported. With this method you could record up to 500k samples. The decoding of such number of samples (64M raw data) with custom script could take a few minutes. For longer streaming to file a custom application based on WaveForms SDK is needed. tdm.dwf3work Decoder: // rgData: input, raw digital sample array // rgValue: output, decoded data array // rgFlag: output, decoded flag array var c = rgData.length // c = number of raw samples var pClock = false; // previous cock signal level var iStart = 0; // used to keep track on word start index var cByte = 0; // byte count per transmission var cBits = -1; // bit counter var bValue = 0; // value variable for(var i = 0; i < c; i++){ // for each sample var s = rgData[i]; // current sample var fSelect = 1&(s>>0); // pin0 is the select signal var fClock = 1&(s>>1); // pin1 is the clock signal var fData = 1&(s>>2); // pin2 is the data signal if(pClock==fClock) continue; // no clock edge pClock = fClock; // previous clock level if(fClock==0 && cBits>=0 && cBits<24){ // sample data on clock falling edge, first 24 bits bValue <<= 1; // serial data bit, MSBit first if(fData) bValue |= 1; cBits++; } if(fClock!=0 && fSelect!=0){ // select high on clock rising edge if(cBits>0){ // store earlier collected data cByte++; // store rgValue/Flag from word start index to current sample position for(var j = iStart; j < i; j++){ // Flag change will be visible on plot even when data remains constant. // This is useful in case we get more consecutive equal values. rgFlag[j] = cByte; rgValue[j] = bValue; } } // reset our counters/variables iStart = i; cByte = 0; cBits = 0; bValue = 0; } } Value to Text for hex: // value: value sample // flag: flag sample function Value2Text(flag, value){ switch(flag){ case 0: return "X"; default: return "0x"+value.toString(16) } } Value2Text(1,66)
  13. Hi @kojak See the following post:
  14. Sending CTRL-Z with the Protocol UART

    Hi @Randy With the currently released version (v3.6.8) this is only possible using send file. You have in private message a beta version adding support for escape characters and custom ending for Protocol/UART
  15. Hi @Richard Withers 1. First configure the proper trigger in the interface for your signal. For time base above 100ms/div the interface switches to scan mode but you can set acquisition mode back to Repeated. 2. Set trigger mode to normal, to prevent entering auto mode. 3. Open View/Logging, configure path, maximum... set execute to each (triggered) acquisition 4. Press Run. The acquisition will continue but the logging will stop after reaching the specified maximum value.