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.

DAC8740H: Can't transmit data stream from UART_IN to MOD_OUT and then to PA bus

Part Number: DAC8740H
Other Parts Discussed in Thread: PROFIBUS

I am now using DAC8740H to realize PROFIBUS PA application on Pressure sensor.

Now I can receive frame from PROFIBUS PA bus correctly, I can check it in my MCU as UART_OUT is connected to the RX pin of my MCU.

But I can't transmit frame to the PROFIBUS PA bus through DAC8740H UART_IN.

Detail description:

1. My schematic is based on DAC8740H_PAFF.SchDoc offered by TI E2E website. 

2. To avoid PROFIBUS PA master unexpected interfere, I only connected PA+ and PA- to 30V and GND from a DC source.

3. Duplex pin is set to low level by MCU, before RST(pin5) is set to high. So half-duplex is used!

4. what's the deep of transmit FIFO of DAC8740H? 16 bytes or others?Could I transmit 16 bytes continuously once to UART_IN of DAC8740H firstly? 

5. I see in the datasheet, a start delimiter is need before the user data stream, is start delimiter must be 0x2D or there is some rule to define?

6. I first transmit frame stream "EA 8B 00 AE FF FF FF FF 2D 10 00 02 00 35 30" to UART_IN of DAC8740H,

in which

Initialization Bytes Sequence = EA 8B 00 AE, that means D2M_LEVEL = 01, JABBER is disable.
but just when transmit few bytes, the CD goes high, and when monitored with oscilloscope I see no output on MOD_OUT pin of DAC8740H.
Orange line is CD and blue line is UART_IN.
I see also there is error action about UART_RTS.
Orange line is UART_IN and blue line is UART_RTS.
please help me and give some suggestions where the problem may be.
Thank you very much.
Shanghai Hurry Electronic Tech Co Ltd.
Hurry

  • Hi,

    Are there any changes to the schematic you have made?

    4. what's the deep of transmit FIFO of DAC8740H? 16 bytes or others?Could I transmit 16 bytes continuously once to UART_IN of DAC8740H firstly? 

    Yes, the depth of the transmit FIFO is 16 bytes. You should be able to transmit 16 bytes relatively continuous as well.

    Let me verify with a designer the rest of your questions and I will get back to you.

    Thanks,
    Lucas

  • Hi,

    Can you try setting the jabber timeout to a very high value (0xFF) and see if you get a similar no output?

    Thanks,
    Lucas

  • I don't need jabber function.

  • Yes, I made some changes: I couple the MOD_OUT to PA+. TI eval. board couple the MOD_OUT to PA-.

  • Hi,

    I'm interested in seeing in changing the value to a non-zero value has any affect on the transmit output.

    Thanks,
    Lucas

  • Hello, picture Q1Q3.png is the schematic of TI DAC8742 Eva. What Q1 and Q2 should be used?

    I used MMBT2907ALT1-D.

    This schematic is mine.

    Now, the data stream I transmit can reach pin3 of Q3. but I can't capture the carrier signal pin3 of Q1( or pin1 of Q1, or pin1 of Q2) by oscilloscope, which means my signal can't pass R2(2K resistor).

    Are the chips Q1 and Q2 in my schematic I used MMBT2907ALT1-D is not qualified for this application?

  • Hi,

    In the BOM, MMBT2907ALT1G was used for Q1 and Q3.

    I see that your Q2 pin 2 net is connected to 5V. In the TI Design, this is connected to REG 3.3V.
    Do you have the ability to change this out and try the 3.3V net?

    Thanks,
    Lucas

  • Sorry, actually Q2 pin 2 is connected to 3.3V, there is Designator error here.

    The transmit carrier wave can reach pin3 of Q3, see the orange part.

    I don't know why the wave can't pass through R2(2KR), and finally coupled to PA+ line, which I want to captured by oscilloscope.

    I am sure Q1 and Q2 chip is good chips.

  • Questions:

    1、The data stream on the bus from the PLC is "AA D2 10 02 01 49 2F 41 D5", which means DAC8740H MOD_IN pin detect this data stream, then UART_OUT pin just send "10 02 01 49 2F 41" to the RX pin of my MCU, the first two bytes AA D2 and the final byte D5 are not sent to my MCU.

    It's right!

    2、When I want to transmit data stream "10 01 02 00 11 8C", should I add "AA D2" and "D5" to the data stream? Does the DCA8740H can add this automatively?

    I mean should I from mcu tx send as "EA 8B 00 AE FF FF FF FF 2D 10 01 02 00 11 8C", or should I send "EA 8B 00 AE FF FF FF FF 2D AA D2 10 01 02 00 11 8C D5" to DAC8740H?

    3、 I see in the datasheet, a start delimiter is need before the user data stream, is start delimiter must be 0x2D or there is some rule to define?

  • Captured by oscilloscope, the DAC8740H transmit too longer than expected"AA D2 10 01 02 00 11 8C D5".

    The UART_IN received data stream is  "EA 89 00 AE FF FF 2D 10 01 02 00 11 8C" or "EA 89 00 AE FF FF 2D AA D2 10 01 02 00 11 8C D5", the DAC8740H transmit wave on the Bus PA+ is longer than expected.

    What should I send data stream to UART_IN to make the transmit wave on the Bus PA+ is "AA D2 10 01 02 00 11 8C D5"?

  • Hi,

    When sending UART to the device, can you try sending EA 89 00 AE 10 01 02 00 11 8C?

    It might be any bytes after the 4 init bytes gets stored in the FIFO and the device takes care of the preamble and start delimiter.



    Thanks,
    Lucas

  • Hi,

    Also, can you try switching R8 with a 100kΩ RES? 

    In my simulation of your circuit, I am seeing modulation on the output once making that change.

    Thanks,
    Lucas

  • Hello, I can send data stream to PA+ bus when the whole lenght is <= 16(FIFO depth).

    But meet questions when the data stream length is longer than 16 bytes.

    1. The UART_RTS is connected to one interrupt input line of my MCU, and is set as falling edge will trigger the interrupt. I name this as UART_RTS_Int.

    2. I first transfer 16 bytes(EA 89 00 AE 68 0B 0B 68 81 82 08 3E 3C 02 05 00) to DAC8740H, and wait for the UART_RTS_Int, then send final 5 byes( FF 11 8C 04 3A) to DAC8740H, but failed, because I find that before the UART_RTS falling, the CD has gone high already.

    Orange Line is CD and blue line is UART_RTS.

    So the final 5 bytes can't send out through DAC8740H.

    Is there some suggestions?

  • I see one problem: the UART_RTS is not controlled by D2M_LEVEL. In my application D2M_LEVEL = 01, that means Alarm on UART_RTS when transmit FIFO has less than 4 bytes loaded. As I first send 16 bytes to DAC8740H, user data stream length is 12 bytes, the UART_RTS should fall low level just after FIFO has switch out 8 bytes. But actually, the data stream still been sent to UART_IN, UART_RTS has fall low level! It's very strange!

    picture 1: send 16 bytes once to DAC8740H( 4 bytes Init. + 12 bytes user data stream)

    And I find a rule about UART_RTS, it will fall to low level just about 1.2ms after the UART_IN start receiving data stream

    picture 2: send 10 bytes once to DAC8740H( 4 bytes Init. + 6 bytes user data stream)

    Questions:

    If I want to send more than 16 bytes to DAC8740H, the useful sequence is what?

    Originally I use UARAT_RTS to judge the time to send remmaining bytes, but obviously it doesn't work!

    Should I use CD to judge? What's the detail sequence?

  • Hi,

    The UART_RTS goes low when there is more data in the FIFO than the limit you set, so it should be the same for two different cases.
    You can see it remains low for longer in the case with more data bytes, since it has more data to remove from the FIFO before getting to <4 bytes.

    Once you send the first 4 init bytes and then your data bytes, the PA output should start sending the specified number of preamble bytes and start delimiter.
    During this time, the FIFO will begin to fill up with data, since the PA output hasn't started sending data bytes.

    Based on my calculation of the two baud rates and 4 preamble and 1 start, the PA output should start transmitting data around the time when the FIFO has 7 or 8 bytes in it.
    Next, even with continuous PA transmission, the FIFO would start filling at about 1 bytes for every 2 bytes sent on the PA output, since the UART is faster.

    Because of this timing, I would recommend using the highest D2M_LEVEL "11" so you get notified when there is less than 8 bytes in the FIFO and this would give you the most time to respond.
    You could try sending 16 bytes at first, and then follow up with 8 bytes. 

    Thanks,
    Lucas

  • Thank you very much!

    Another questions:

    For PA protocol: there should be frame pre-delimiter "AA D2" before user frame "10 01 02 00 11 8C"; and there also should be end delimiter "D5" after user frame.

    My questions is, does DAC8740H automatively add these delimiter, or should I add the delimiter to my whole data stream?

    Detaily, if I want to send "10 01 02 00 11 8C", should I send "EA 99 00 AE AA D2 10 01 02 00 11 8C D5", or should I just send "EA 99 00 AE 10 01 02 00 11 8C"?

    Today I use a bus monitoring tool to capture, I found this:

    and I enter the line 17 to see detail, it's this: Obviously, the frame I put on the bus is not correct.

    For correct bus, it's like following:

  • I tried send by my MCU to DAC8740H: "EA 99 00 AE AA D2 10 01 02 00 11 8C D5", length = 13 bytes, check the picture following:

    The bus monitor tool can't indentify it as a valid PA frame.( Pre delimiter error, length error ect.)

    Then I tried send by my MCU to DAC8740H: "EA 99 00 AE 10 01 02 00 11 8C", length = 10 bytes, check the picture following:

    The bus monitor tool still can't indentify it as a valid PA frame.( Pre delimiter error, length error ect.)

    This is the MOD_OUT way to PA+ bus.

    Why the frame I send out can't be indentified as a valid PA frame?

    Is there some careless point that I ignored?

  • I think my transmit wave is good.

    I see in the bus monitor tool, the wave I sent, can't be identiified as hex format data stream.

    I don't know where the problem stayed.

    could you give me some suggetion?

  • hello e! My project is nearly at deadline. I need more support. Thank you very much for your continue support all the time. My QQ is 157454269, my e-mail is hurry@hurry-tech.cn, could you support me directly

  • Hi,

    I can reach out through email if that is easier for you.

    The device will insert the preamble, start & stop delimiter.

    You only need to provide B3-B0 and the data bytes.

    Thanks,
    Lucas

  • Hi,

    Just taking note of the possible solutions we found for future cases:

    Use DM_LVL '11' for maximum timeframe for sending multiple/longer messages.

    Preamble Byte field is already val+1, so set it to 0 to send only 1 preamble.

    The DAC8740H takes care of sending the PAFF Preamble, Start, and Stop.
    UART message should just be B3-B0 + Data.

    Normal Manchester starts with Falling Edge, Inverted starts with Rising Edge.

    Checking external non-TI components on board

    Closing this thread.

    Thanks,
    Lucas