Post Go back to editing

why ad9889b can not output signals?

i explain my system first. it consist of adv7441a, ad9889b and a mcu. the mcu controls adv7441a and ad9889b by i2c. now cvbs signal goes through ad7441 and outputs 24bit rgb signal which is input to ad9889b, but ad9889b can not output dvi signal, i do not know why.

  The hpd pin of ad9889b is pulled hign by me.  I read back the registers values below. and you could check my schematic. Please give me some advice. Thaks.

initialize i/o

change to cvbs pal mode!

test 9889

[get_register_value]   register address=

0x0

value=

0x0

[get_register_value]   register address=

0x1

value=

0x0

[get_register_value]   register address=

0x2

value=

0x0

0x0[get_register_value]   register address=

0x3

value=

0x0

[get_register_value]   register address=

0x4

value=

0x0

[get_register_value]   register address=

value=

0x0

[get_register_value]   register address=

0x6

value=

0x0

[get_register_value]   register address=

0x7

value=

0x0

[get_register_value]   register address=

0x8

[get_register_value]   register address=

0x9

value=

0x0

[get_register_value]   register address=

0xa

value=

0x41

[get_register_value]   register address=

0xb

value=

0xe

[get_register_value]   register address=

0xc

value=

0x3c

[get_register_value]   register address=

0xd

value=

0x18

[get_register_value]   register address=

0xe

value=

0x1

[get_register_value]   register address=

0xf

value=

0x13

[get_register_value]   register address=

0x10

value=

0x25

[get_register_value]   register address=

0x11

value=

0x37

[get_register_value]   register address=

0x12

value=

0x0

[get_register_value]   register address=

0x13

value=

0x0

[get_register_value]   register address=

0x14

value=

0x0

[get_register_value]   register address=

0x15

value=

0x0

[get_register_value]   register address=

0x16

value=

0x40

[get_register_value]   register address=

0x17

value=

0x8

[get_register_value]   register address=

0x18

value=

0x8

[get_register_value]   register address=

0x19

value=

0x0

[get_register_value]   register address=

0x1a

value=

0x0

[get_register_value]   register address=

0x1b

value=

0x0

[get_register_value]   register address=

0x1c

value=

0x0

[get_register_value]   register address=

0x1d

value=

0x0

[get_register_value]   register address=

0x1e

value=

0x0

[get_register_value]   register address=

0x1f

value=

0x0

[get_register_value]   register address=

0x20

value=

0x0

[get_register_value]   register address=

0x21

value=

0x0

[get_register_value]   register address=

0x22

value=

0x8

[get_register_value]   register address=

0x23

value=

0x0

[get_register_value]   register address=

0x24

value=

0x0

[get_register_value]   register address=

0x25

value=

0x0

[get_register_value]   register address=

0x26

value=

0x0

[get_register_value]   register address=

0x27

value=

0x0

[get_register_value]   register address=

0x28

value=

0x0

[get_register_value]   register address=

0x29

value=

0x0

[get_register_value]   register address=

0x2a

value=

0x0

[get_register_value]   register address=

0x2b

value=

0x0

[get_register_value]   register address=

0x2c

value=

0x8

[get_register_value]   register address=

0x2d

value=

0x0

[get_register_value]   register address=

0x2e

value=

0x0

[get_register_value]   register address=

0x2f

value=

0x0

[get_register_value]   register address=

0x30

value=

0x0

[get_register_value]   register address=

0x31

value=

0x0

[get_register_value]   register address=

0x32

value=

0x0

[get_register_value]   register address=

0x33

value=

0x0

[get_register_value]   register address=

0x34

value=

0x0

[get_register_value]   register address=

0x35

value=

0x0

[get_register_value]   register address=

0x36

value=

0x0

[get_register_value]   register address=

0x37

value=

0x0

[get_register_value]   register address=

0x38

value=

0x0

[get_register_value]   register address=

0x39

value=

0x0

[get_register_value]   register address=

0x3a

0x0

[get_register_value]   register address=

0x3b

value=

0x81

[get_register_value]   register address=

0x3c

value=

0x0

[get_register_value]   register address=

0x3d

value=

0x0

[get_register_value]   register address=

0x3e

value=

0x54

[get_register_value]   register address=

0x3f

value=

0x0

[get_register_value]   register address=

0x40

value=

0x0

[get_register_value]   register address=

0x41

value=

0x10

[get_register_value]   register address=

0x42

value=

0x40

[get_register_value]   register address=

0x43

value=

0x7e

[get_register_value]   register address=

0x44

value=

0x78

[get_register_value]   register address=

0x45

value=

0x60

[get_register_value]   register address=

0x46

value=

0x4

[get_register_value]   register address=

0x47

value=

0x0

[get_register_value]   register address=

0x48

value=

0x0

[get_register_value]   register address=

0x49

value=

0x0

[get_register_value]   register address=

0x4a

value=

0x0

[get_register_value]   register address=

0x4b

value=

0x0

[get_register_value]   register address=

0x4c

value=

0x0

[get_register_value]   register address=

0x4d

value=

0x0

[get_register_value]   register address=

0x4e

value=

0x0

[get_register_value]   register address=

0x4f

value=

0x0

[get_register_value]   register address=

0x50

value=

0x0

[get_register_value]   register address=

0x51

value=

0x0

[get_register_value]   register address=

0x52

value=

0x0

[get_register_value]   register address=

0x53

value=

0x0

[get_register_value]   register address=

0x54

value=

0x0

[get_register_value]   register address=

0x55

value=

0x0

[get_register_value]   register address=

0x56

value=

0x0

[get_register_value]   register address=

0x57

value=

[get_register_value]   register address=

0x58

value=

0x0

[get_register_value]   register address=

0x59

value=

0x0

[get_register_value]   register address=

0x5a

value=

0x0

[get_register_value]   register address=

0x5b

value=

0x0

[get_register_value]   register address=

0x5c

value=

0x0

[get_register_value]   register address=

0x5d

value=

0x0

[get_register_value]   register address=

0x5e

value=

0x0

[get_register_value]   register address=

0x5f

value=

0x0

[get_register_value]   register address=

0x60

value=

0x0

[get_register_value]   register address=

0x61

value=

0x0

[get_register_value]   register address=

0x62

value=

0x0

[get_register_value]   register address=

0x63

value=

0x0

[get_register_value]   register address=

0x64

value=

0x0

[get_register_value]   register address=

0x65

value=

0x0

[get_register_value]   register address=

0x66

value=

0x0

[get_register_value]   register address=

0x67

value=

0x0

[get_register_value]   register address=

0x68

value=

0x0

[get_register_value]   register address=

0x69

value=

0x0

[get_register_value]   register address=

0x6a

value=

0x0

[get_register_value]   register address=

0x6b

value=

0x0

[get_register_value]   register address=

0x6c

value=

0x0

[get_register_value]   register address=

0x6d

value=

0x0

[get_register_value]   register address=

0x6e

value=

0x0

[get_register_value]   register address=

0x6f

value=

0x0

[get_register_value]   register address=

0x70

value=

0x0

[get_register_value]   register address=

0x71

value=

0x0

[get_register_value]   register address=

0x72

value=

0x0

[get_register_value]   register address=

0x73

value=

0x0

[get_register_value]   register address=

0x74

value=

0x0

[get_register_value]   register address=

0x75

value=

0x0

[get_register_value]   register address=

0x76

value=

0x0

[get_register_value]   register address=

0x77

value=

0x0

[get_register_value]   register address=

0x78

value=

0x0

[get_register_value]   register address=

0x79

value=

0x0

[get_register_value]   register address=

0x7a

value=

0x0

[get_register_value]   register address=

0x7b

value=

0x0

[get_register_value]   register address=

0x7c

value=

0x0

[get_register_value]   register address=

0x7d

value=

0x0

[get_register_value]   register address=

0x7e

value=

0x0

[get_register_value]   register address=

0x7f

value=

0x0

[get_register_value]   register address=

0x80

value=

0x0

[get_register_value]   register address=

0x81

value=

0x0

[get_register_value]   register address=

0x82

value=

0x0

[get_register_value]   register address=

0x83

value=

0x0

[get_register_value]   register address=

0x84

value=

0x0

[get_register_value]   register address=

0x85

value=

0x0

[get_register_value]   register address=

0x86

value=

0x0

[get_register_value]   register address=

0x87

value=

0x0

[get_register_value]   register address=

0x88

value=

0x0

[get_register_value]   register address=

0x89

value=

0x0

[get_register_value]   register address=

0x8a

value=

0x0

[get_register_value]   register address=

0x8b

value=

0x0

[get_register_value]   register address=

0x8c

value=

0x0

[get_register_value]   register address=

0x8d

value=

0x0

[get_register_value]   register address=

0x8e

value=

0x0

[get_register_value]   register address=

0x8f

value=

0x0

[get_register_value]   register address=

0x90

value=

0x0

[get_register_value]   register address=

0x91

value=

0x0

[get_register_value]   register address=

0x92

value=

0x0

[get_register_value]   register address=

0x93

value=

0x0

[get_register_value]   register address=

0x94

value=

0xc0

[get_register_value]   register address=

0x95

value=

0x0

[get_register_value]   register address=

0x96

value=

0xa0

[get_register_value]   register address=

0x97

value=

0x80

[get_register_value]   register address=

0x98

value=

0xb

[get_register_value]   register address=

0x99

value=

0x2

[get_register_value]   register address=

0x9a

value=

0x0

[get_register_value]   register address=

0x9b

value=

0x18

[get_register_value]   register address=

0x9c

value=

0x5a

[get_register_value]   register address=

0x9d

value=

0x60

[get_register_value]   register address=

0x9e

value=

0x10

[get_register_value]   register address=

0x9f

value=

0x0

[get_register_value]   register address=

0xa0

value=

0x0

[get_register_value]   register address=

0xa1

value=

0x38

[get_register_value]   register address=

0xa2

value=

0x80

[get_register_value]   register address=

0xa3

value=

0x80

[get_register_value]   register address=

0xa4

value=

0x8

[get_register_value]   register address=

0xa5

value=

0x4

[get_register_value]   register address=

0xa6

value=

0x0

[get_register_value]   register address=

0xa7

value=

0x0

[get_register_value]   register address=

0xa8

value=

0x0

[get_register_value]   register address=

0xa9

value=

0x0

[get_register_value]   register address=

0xaa

value=

0x0

[get_register_value]   register address=

0xab

value=

0x40

[get_register_value]   register address=

0xac

value=

0x0

[get_register_value]   register address=

0xad

value=

0x0

[get_register_value]   register address=

0xae

value=

0x40

[get_register_value]   register address=

0xaf

value=

0x14

[get_register_value]   register address=

0xb0

value=

0x5c

[get_register_value]   register address=

0xb1

value=

0x64

[get_register_value]   register address=

0xb2

value=

0xda

[get_register_value]   register address=

0xb3

value=

0x32

[get_register_value]   register address=

0xb4

value=

0x10

[get_register_value]   register address=

0xb5

value=

0x85

[get_register_value]   register address=

0xb6

value=

0x8a

[get_register_value]   register address=

0xb7

value=

0x94

[get_register_value]   register address=

0xb8

value=

0x90

[get_register_value]   register address=

0xb9

value=

0x0

[get_register_value]   register address=

0xba

value=

0x60

[get_register_value]   register address=

0xbb

value=

0x0

[get_register_value]   register address=

0xbc

value=

0x0

[get_register_value]   register address=

0xbd

value=

0x0

[get_register_value]   register address=

0xbe

value=

0x0

[get_register_value]   register address=

0xbf

value=

0x0

[get_register_value]   register address=

0xc0

value=

0x0

[get_register_value]   register address=

0xc1

value=

0x0

[get_register_value]   register address=

0xc2

value=

0x0

[get_register_value]   register address=

0xc3

value=

0x0

[get_register_value]   register address=

0xc4

value=

0x0

[get_register_value]   register address=

0xc5

value=

0x80

[get_register_value]   register address=

0xc6

value=

0x0

[get_register_value]   register address=

0xc7

value=

0x0

[get_register_value]   register address=

0xc8

value=

0x41

[get_register_value]   register address=

0xc9

value=

0x0

[get_register_value]   register address=

0xca

value=

0x0

[get_register_value]   register address=

0xcb

value=

0x1

[get_register_value]   register address=

0xcc

value=

0x2

[get_register_value]   register address=

0xcd

value=

0x0

[get_register_value]   register address=

0xce

value=

0x0

[get_register_value]   register address=

0xcf

value=

0x70

NT100_VIDEO_V0.1.pdf
  • 1) Can you get any video through in any format?

    2) U3-74 pin needs pull down resistor, not just an ESD diode, not the problem, just a note

    3) How are you setting up the 7441?  Scripts are in design support files. Normally CVBS is transported as YCbCr, not RGB

    4) Does the pixel clock (LLC) show the right frequency?

    5) Is there activity on HS and VS?

    I'd need to see the complete schematic to see how the AD9889B is set up and if it's connected to the ADV7441B correctly.

  • 1) CVBS goes through 7441,and outputs signals which i detect by oscilloscope. As I configured 7441 with a manual named ADV7441A_ADV7441A@_ADV7441AVDP_ADV7441AHDMI_ADV7341-VER.MB3.0.TXT,  the output signals should be 24 bits RGB.  I just used CVBS for input to 7441, i does not test any other format.

    2) U3-74 pin , I will change it.

    3) I set up the 7441 as the official doc ADV7441A_ADV7441A@_ADV7441AVDP_ADV7441AHDMI_ADV7341-VER.MB3.0.TXT which you can find in ADV7441A_Evaluation_Board_Documents. I set up the 7441 registers as below:

    42 00 0E ; CVBS INPUT ON Ain6

    42 03 15 ; 24 bit 444 out, AV Code DUP

    42 3C AD ; Setup SOG Sync level for divided down SOG

    42 17 41 ; Select SH1

    42 1D 40 ; Disable TRI_LLC.

    42 31 18 ; New AV Mode

    42 32 81 ; V Sync position control

    42 33 84 ; V Sync position control

    42 34 00 ; H Sync position control

    42 35 14 ; H Sync position control

    42 36 92 ; H Sync position control

    42 3A 07 ; Power down ADC 1 & ADC2 & ADC3

    42 3C A8 ; SOG Sync level for attenuated sync, PLL Qpump to default

    42 37 A1 ; Hsync & Vsync out Positive Polarity 

    42 47 0A ; Enable Automatic PLL_Qpump and VCO Range

    42 F3 0F ; Enable Anti-Alias Filters

    24 bit 444 out means RGB, right?

    4) I test LLC by oscilloscope, the frequency is 27MHz. Is that right?

    5) HS and VS is active.

    The attachment NT100_VIDEO_V0.1.pdf  at my first discussion is  my complete schematic. In schematic, you could see how AD9889B(the U5 IC)  connected to the ADV7441A(the U3 IC).

    The system is as below:

    VGA

    AV(CVBS) -----> ADV7441A------>AD9889B--------->DVI-D Divider----->two DVI output ports

    Y/PB/PR                              |                                   |   

                      |-------------|                                

                            |     I2C

    |

    Mcu( M052 U10 in schematic)

    The attachment ad9889b.c is my ad9889b code which  modified according to official AD9x89A SW Driver Rel 1.3. You can check it up.

  • helllo.GuenterL

         I work out the problem: I didn't connect a display. After I connet 9889 to a Lenovo LCD,  I can detect signals on TMDS Clock pin which frequency is about 74Mhz, but my LCD could display nothing. I detect TMDS Data lines whose waves are  moving,but the waves cycle is milisecends, is that right?But why LCD displays nothing?

    Another question: I detect adv7441a's pins,  LLC  frequency is 27 Mhz, HS is 15.62 Khz, VS is  50HZ,DE is 15.62 Khz. You said cvbs signals goes through 7441 and output YCBCR signals, I doubt it. I think it is RGB. You could see my last  reply carefully.

  • helllo.GuenterL

         I work out the problem: I didn't connect a display. After I connet 9889 to a Lenovo LCD,  I can detect signals on TMDS Clock pin which frequency is about 74Mhz, but my LCD could display nothing. I detect TMDS Data lines whose waves are  moving,but the waves cycle is milisecends, is that right?But why LCD displays nothing?

    Another question: I detect adv7441a's pins,  LLC  frequency is 27 Mhz, HS is 15.62 Khz, VS is  50HZ,DE is 15.62 Khz. You said cvbs signals goes through 7441 and output YCBCR signals, I doubt it. I think it is RGB. You could see my last  reply carefully.

  • helllo.GuenterL

         I work out the problem: I didn't connect a display. After I connet 9889 to a Lenovo LCD,  I can detect signals on TMDS Clock pin which frequency is about 74Mhz, but my LCD could display nothing. I detect TMDS Data lines whose waves are  moving,but the waves cycle is milisecends, is that right?But why LCD displays nothing?

    Another question: I detect adv7441a's pins,  LLC  frequency is 27 Mhz, HS is 15.62 Khz, VS is  50HZ,DE is 15.62 Khz. You said cvbs signals goes through 7441 and output YCBCR signals, I doubt it. I think it is RGB. You could see my last  reply carefully.

  • helllo.GuenterL

         I work out the problem: I didn't connect a display. After I connet 9889 to a Lenovo LCD,  I can detect signals on TMDS Clock pin which frequency is about 74Mhz, but my LCD could display nothing. I detect TMDS Data lines whose waves are  moving,but the waves cycle is milisecends, is that right?But why LCD displays nothing?

    Another question: I detect adv7441a's pins,  LLC  frequency is 27 Mhz, HS is 15.62 Khz, VS is  50HZ,DE is 15.62 Khz. You said cvbs signals goes through 7441 and output YCBCR signals, I doubt it. I think it is RGB. You could see my last  reply carefully.

  • 1)  444 does not necessarily mean RGB, it could be YCbCr.

    Here's a simple table to determine what the bus looks like for a CVBS input

    Bus Width Mode Color formats possible LLC Frequncy (MHz)
    8/10 422 YCbCr 27
    16/20 422 YCbCr 13.5
    24/30 444 RGB or YCbCr 13.5




    looking at post 2, you should be outputting 24 bits ate 13.5MHz however you measure 27MHz which does not correlate.

    For the AD9889B if the output TMDS clock matches the pixel rate of the image.  In this case it looks like it is trying to output 729p50 (74.5MHz).

    It appears there still is a mismatch between  what the 7441 is outputting and what the 9889 is expecting. 

    The AD9889B tmds clock should be 27MHz regardless if the input clock is 13,5MHz or 27MHz.  Since the effective pixel rate is only 13.5MHz the AD9889B will use pixel repetition and double the pixel clock.  Note the HDMI is not spec'd below 20MHz so it can't transmit a 13.5MHz rate.

    Again I'd need to look at a complete schematic is see how things are connected.

  • hi,

    I describe my system acording to the schematic. As you see, signal stream goes to modules acording to the arrow. The  Module 4 controls the Module 1 and Module 2 by I2C and other gpio pins. Now I explain the process.

    The pin 24 of the MCU of Module 4 outputs high. Pins from 20 to 23 are set input directions and would not be controled after that and because I do not know how to control,maybe cannot cause problems. Pin 19 is a RST pin for 7441, and output a reset signal.

    I configure the 7441a with scripts below:

               {0x42, 0x00, 0x0E},                     //CVBS INPUT ON Ain6

               {0x42, 0x03, 0x15},                     // 24 bit 444 out, AV Code DUP

               {0x42, 0x3C, 0xAD},                     //Setup SOG Sync level for divided down SOG

               {0x42, 0x17, 0x41},                     //Select SH1

               {0x42, 0x1D, 0x40},                     //Disable TRI_LLC.

               {0x42, 0x31, 0x18},                     //New AV Mode

               {0x42, 0x32, 0x81},                     //V Sync position control

               {0x42, 0x33, 0x84},                     //V Sync position control

               {0x42, 0x34, 0x00},                     //H Sync position control

               {0x42, 0x35, 0x14},                     //H Sync position control

               {0x42, 0x36, 0x92},                     //H Sync position control

               {0x42, 0x3A, 0x07},                     //Power down ADC 1 & ADC2 & ADC3

               {0x42, 0x3C, 0xA8},                     //SOG Sync level for attenuated sync, PLL Qpump to default

               {0x42, 0x37, 0xA1},                     //Hsync & Vsync out Positive Polarity

               {0x42, 0x47, 0x0A},                     //Enable Automatic PLL_Qpump and VCO Range

               {0x42, 0xF3, 0x0F},                     //Enable Anti-Alias Filters

    And I readback registers, the values are below:

    0x42 0x0 0xe

    0x42 0x3 0x15

    0x42 0x3c 0xa8                              ////I set value 0xad, but why the value readback is 0xa8???

    0x42 0x17 0x41

    0x42 0x1d 0x40

    0x42 0x31 0x18

    0x42 0x32 0x81

    0x42 0x33 0x84

    0x42 0x34 0x0

    0x42 0x35 0x14

    0x42 0x36 0x92

    0x42 0x3a 0x7

    0x42 0x3c 0xa8

    0x42 0x37 0xa1

    0x42 0x47 0xa

    0x42 0xf3 0xf

    You said the LLC frequency shoule be 13.5MHz in 24bits 444 mode, but the results I test is 27MHz. How can I correct it? If you find out my software problem, could you give e a script which can turn CVBS signals into 24 bits 444 signal? If schematic has problem, please give me some advice. Thank you!

    The attachment is complete schematic. Last time I send you schematic but I do not konw why the website cannot display it. I will send the schematic to you with an e-mail. If you cannot see my attachment on the website, just check your e-mail. Thank you!

  • The reason I needed to see the full schematic was to see how the two parts are connected.  a lot depends on the bus width and the justification.

    This scripts should get CVBS in on Ain10 -> YCbCr, 24 bit bus at 13.5MHz, separate syncs -> HDMI out 422 YCbCr.

    ;7441a setup

    42 00 0E ; CVBS INPUT ON Ain10

    42 03 15 ; mode 5, 24 bit 444 out, AV Code DUP

    42 3C AD ; Setup SOG Sync level for divided down SOG

    42 1D 40 ; Disable TRI_LLC.

    42 31 18 ; New AV Mode

    42 32 81 ; V Sync position control

    42 33 84 ; V Sync position control

    42 34 00 ; H Sync position control

    42 35 22 ; H Sync position control

    42 36 9E ; H Sync position control

    42 3A 07 ; Power down ADC 1 & ADC2 & ADC3

    42 3C A8 ; SOG Sync level for atenuated sync, PLL Qpump to default

    42 37 A1 ; Hsync & Vsync out Positive Polarity 

    42 47 0A ; Enable Automatic PLL_Qpump and VCO Range

    42 E5 27 ; V Sync position control

    42 E6 4F ; V Sync position control

    42 F3 0F ; Enable Anti-Alias Filters

    ;9889b setup

    ; fixed power up writes

    72 41 00

    72 0A 00

    72 98 07

    72 9C 38

    72 9D 01

    72 A2 84

    72 A3 84

    ; video input mode

    72 15 00 ; 24 bit YCbCr

    72 16 F0 ; 11110000, 8-bit, style 1, YCbCr 422 output mode

    72 17 00 ; 4:3, no embedded syncs

    ;video output mode

    72 18 00 ; no CSC

    ;HDCP

    72 BA 00 ; 000  default clock delay, AD9889 selected

    72 AF 14 ; *** check this for dvi/hdmi modes with monitor

    72 97 40 ; handle hdcp interrupt, need to check hdcp

  • hi,Guenterl

          As you have seen the full schematic, and gave me the  scripts. I test your scripts, but the LLC is still 27MHz. Why? I readback the registers, the values are the same as I set. My schematic has problems? Could you give help?