Home AMX User Forum AMX Technical Discussion

Strings for NEC LCD 4620

Does anyone know the strings to control volume for NEC LCD? They are not available in my manual.

BTW Power ON string is $30,$30,$21,$0D and this works.

Thanks

Comments

  • Thomas HayesThomas Hayes Posts: 1,164
    I have the master RS-232 code commands (just sent to me today from NEC) I'll take a look and post the info for you Thursday.
  • Excellent

    Thanks Thomas
  • staticatticstaticattic Posts: 200
    Yeah, I could use those too. If you have them, I would really like a peek at them, specifically volume up and down commands...
  • yuriyuri Posts: 861
    These commands work for a NEC LCD4020 (40" with small border)

    Power On = "$01,$30,$41,$30,$41,$30,$43,$02,$43,$32,$30,$33,$44,$36,$30,$30,$30,$31,$03,$73,$0D"
    Power Off = "$01,$30,$41,$30,$41,$30,$43,$02,$43,$32,$30,$33,$44,$36,$30,$30,$30,$34,$03,$76,$0D"

    Data 1 = "$01,$30,$41,$30,$41,$30,$43,$02,$43,$32,$30,$33,$44,$36,$30,$30,$30,$32,$03,$70,$0D"
    Video 1 = "$01,$30,$41,$30,$41,$30,$43,$02,$43,$32,$30,$33,$44,$36,$30,$30,$30,$31,$03,$73,$0D"

    try them out :)
  • Chip MoodyChip Moody Posts: 727
    And those commands do what to the volume? :)

    - Chip
  • mpullinmpullin Posts: 949
    Chip Moody wrote: »
    And those commands do what to the volume? :)
    I'm pretty sure I know what Power Off will do to the volume...
  • yuriyuri Posts: 861
    oops, didn't read the part about volume :p

    here is the manual, it's for the LCD4020, as far as i can see, there is no way to do volume up/down, you can only send a range :)
  • The manual is nice but it's somehow hard for me to get a corect commands from it.

    Can anyone please share list of commands or give me a tip how to form a correct command from wall of text they gave us as a documentation?

    Thanks!

    P.s. at least commands how to switch inputs TV,HDMI and RGBHV ;)
  • Volume looks like "$02,$00,$62" plus 4 bytes of parameter ending with "$03" The parameter is just the ASCII of the volume value from 1 to 100. I would just do right_string("'000',itoa(volume):,4). so it would look like this..

    "$02,$00,$62,right_string("'000',itoa(volume):,4),$03"

    Most siginificant byte to least. Just use a level (0-255) and scale it to (0-100) for the volume variable.

    volume = (level.value*100)/255 //only if decimal

    Now the 0 to 100 might be a hex value so ItoHEX might work in this case. I believe this function gives you an ASCII HEX representation. So to give you a 100h the decimal value would be 256. You would not need to scale the level.value in this case.

    "$02,$00,$62,right_string("'000',itohex(volume):,4),$03" //only if HEX

    Again, I'm not totally sure. I'm sure others can verify this...
  • Sorry! I didn't put the Header or Check Sum in this....
  • For NEC - 4020 (Not too sure if it works on 4620 but should not be a problem.)

    {$30,$30,$21,$0D}, //Pwr On
    {$30,$30,$22,$0D}, //Pwr Off
    {$30,$30,$5F,$72,$31,$0D}, //DVI
    {$30,$30,$5F,$72,$32,$0D}, //VGA
    {$30,$30,$5F,$72,$33,$0D}, //RGB/HV
    {$30,$30,$5F,$76,$31,$0D}, //Video
    {$30,$30,$5F,$76,$32,$0D}, //DVD/HD

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$31,$03,$09,$0D}, //Volume mute
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$30,$03,$08,$0D} //Volume unmute

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$30,$03,$70,$0D} //Volume level 0
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$31,$03,$71,$0D} //Volume level 1
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$32,$03,$72,$0D} //Volume level 2
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$33,$03,$73,$0D} //Volume level 3
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$34,$03,$74,$0D} //Volume level 4
    ...... so on
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$46,$03,$06,$0D} //Volume level 15
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$31,$30,$03,$71,$0D} //Volume level 16 and so on til 100. Just see the pattern in it and of cos calculate the checksum :-)
  • Many thanks! :)
  • liviolow wrote: »
    For NEC - 4020 (Not too sure if it works on 4620 but should not be a problem.)

    {$30,$30,$21,$0D}, //Pwr On
    {$30,$30,$22,$0D}, //Pwr Off
    {$30,$30,$5F,$72,$31,$0D}, //DVI
    {$30,$30,$5F,$72,$32,$0D}, //VGA
    {$30,$30,$5F,$72,$33,$0D}, //RGB/HV
    {$30,$30,$5F,$76,$31,$0D}, //Video
    {$30,$30,$5F,$76,$32,$0D}, //DVD/HD

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$31,$03,$09,$0D}, //Volume mute
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$30,$03,$08,$0D} //Volume unmute

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$30,$03,$70,$0D} //Volume level 0
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$31,$03,$71,$0D} //Volume level 1
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$32,$03,$72,$0D} //Volume level 2
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$33,$03,$73,$0D} //Volume level 3
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$34,$03,$74,$0D} //Volume level 4
    ...... so on
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$46,$03,$06,$0D} //Volume level 15
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$31,$30,$03,$71,$0D} //Volume level 16 and so on til 100. Just see the pattern in it and of cos calculate the checksum :-)

    I believe it will work, nice thing about NEC is they don't often change their code. I'm using the same code for 42" as 52" with no issues.
  • Alexander wrote: »
    Many thanks! :)

    No Problem. Cheers!
  • I believe it will work, nice thing about NEC is they don't often change their code. I'm using the same code for 42" as 52" with no issues.


    Well thats true haha! Just don't like their way of doing volume thats all. If you see the protocol on volume, you will realise that their 15 is hex 0F but to put it in the protocol you have to pass ASCII '0' and 'F' which maybe is not I expect it to be.
  • NEC LCD 5220, 4020, 4620 Manuals and remote commands

    I have spend the past 3 days dinking with making a module. These have an optional tuner which you need the remote commands which I have attached.

    From what I can tell the ETX command in the manual shows $03 but in certain commands it is $30. It is sort of a trial and error thing. Understanding the commands header and checksum a large majority of the commands just don't work from the documentation. The Audio 1 also does not work in the speadsheets.

    Example of a remote command for HDMI port:
    "$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $34, $32, $30, $31, $03, $6E, $0D"

    TV Port
    "$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $35, $30, $31, $03, $6D, $0D"

    Here is some cut/paste from my module on the remote commands without having to figure them out.
    //
    // FUNCTION fnDisplayNum0()
    // This function does a button press of 0
    //
    DEFINE_FUNCTION fnDisplayNum0()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $31, $32, $30, $31, $03, $6B, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum1()
    // This function does a button press of 1
    //
    DEFINE_FUNCTION fnDisplayNum1()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30,$30, $38, $30, $31, $03, $60, $0D", GSE_RETURN_TYPE_X_PATTERN,"CR")
    }

    //
    // FUNCTION fnDisplayNum2()
    // This function does a button press of 2
    //
    DEFINE_FUNCTION fnDisplayNum2()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $39, $30, $31, $03, $61, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum3()
    // This function does a button press of 3
    //
    DEFINE_FUNCTION fnDisplayNum3()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $41, $30, $31, $03, $19, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum4()
    // This function does a button press of 4
    //
    DEFINE_FUNCTION fnDisplayNum4()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $42, $30, $31, $03, $1A, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum5()
    // This function does a button press of 5
    //
    DEFINE_FUNCTION fnDisplayNum5()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $43, $30, $31, $03, $1B, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum6()
    // This function does a button press of 6
    //
    DEFINE_FUNCTION fnDisplayNum6()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $44, $30, $31, $03, $1C, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum7()
    // This function does a button press of 7
    //
    DEFINE_FUNCTION fnDisplayNum7()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $45, $30, $31, $03, $1D, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum8()
    // This function does a button press of 8
    //
    DEFINE_FUNCTION fnDisplayNum8()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $30, $46, $30, $31, $03, $1E, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayNum9()
    // This function does a button press of 9
    //
    DEFINE_FUNCTION fnDisplayNum9()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $31, $30, $30, $31, $03, $69, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayDash()
    // This function does a button press of Dash
    //
    DEFINE_FUNCTION fnDisplayDash()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30,$34, $34, $30, $31, $03, $68, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayEnter()
    // This function does a button press of Enter.
    //
    DEFINE_FUNCTION fnDisplayEnterKeypad()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30,$34, $35, $30, $31, $03, $69, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayUp()
    // This function does a button press of Up
    //
    DEFINE_FUNCTION fnDisplayUp()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $31, $35, $30, $31, $03, $6C, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayDown()
    // This function does a button press of Down
    //
    DEFINE_FUNCTION fnDisplayDown()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $31, $34, $30, $31, $03, $6D, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayLeft()
    // This function does a button press of Left
    //
    DEFINE_FUNCTION fnDisplayLeft()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $32, $31, $30, $31, $03, $6B, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayRight()
    // This function does a button press of Right
    //
    DEFINE_FUNCTION fnDisplayRight()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $32, $32, $30, $31, $03, $68, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayEnter()
    // This function does a button press of Enter
    //
    DEFINE_FUNCTION fnDisplayEnter()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $32, $33, $30, $31, $03, $69, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayMenu()
    // This function does a button press of Menu
    //
    DEFINE_FUNCTION fnDisplayMenu()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $32, $30, $30, $31, $03, $6A, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayReturn()
    // This function does a button press of Menu
    //
    DEFINE_FUNCTION fnDisplayReturn()
    {
    GSE_AddToQueue("$01, $30, $2A, $30, $41, $30, $43, $02, $43, $32, $31, $30, $30, $30, $31, $46, $30, $31, $03, $1F, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayChannelUp()
    // This function does a button press of Channel Up.
    //
    DEFINE_FUNCTION fnDisplayChannelUp()
    {
    GSE_AddToQueue("$01, $30, $41, $30, $45, $30, $41, $02, $30, $30, $38, $42, $30, $30, $30, $31, $03, $0F, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }

    //
    // FUNCTION fnDisplayChannelDown()
    // This function does a button press of Channel Down.
    //
    DEFINE_FUNCTION fnDisplayChannelDown()
    {
    GSE_AddToQueue("$01, $30, $41, $30, $45, $30, $41, $02, $30, $30, $38, $42, $30, $30, $30, $32, $03, $0C, $0D", GSE_RETURN_TYPE_X_PATTERN, "CR")
    }
  • DHawthorneDHawthorne Posts: 4,584
    Alexander wrote: »
    The manual is nice but it's somehow hard for me to get a corect commands from it.

    Can anyone please share list of commands or give me a tip how to form a correct command from wall of text they gave us as a documentation?

    Thanks!

    P.s. at least commands how to switch inputs TV,HDMI and RGBHV ;)

    I hate that ... it seems a lot of protocol documents are like that. They are perfectly accurate if you already know how the protocol works, and horribly ambiguous if you don't. I often need to play around with the commands a bit until I know what is going on.
  • Great job jgreer9514!

    to DHawthorne:

    Well sometimes when I get new device I feel myself like Indiana Johnes. First you need to find RS-232 manual, which is hidden in a secret temple of the non-tech-informant manufactures site or check it world wide, then you look into it and find yourself staring at hieroglyphs :)))

    Some manufactures make things for people and some for themselves...
  • Volume

    After looking at the volume code I came to the realization that NEC's use 16 count HEX. I had never heard of it. Basically for volume levels I was thinking 0-9 follows standard hex $30-$39. When you get over 9 it then goes A-F. $41 - $46 before it increments to the next set of numbers. So once over 15 the 1st volume parameter increments. Can you say frustrating? Know I know why my automated checksum worked sometimes.

    0 = $30, $30
    1 = $30, $31

    16 = $31, $30
    17 = $31, $31
  • jgreer9514 wrote: »
    After looking at the volume code I came to the realization that NEC's use 16 count HEX. I had never heard of it. Basically for volume levels I was thinking 0-9 follows standard hex $30-$39. When you get over 9 it then goes A-F. $41 - $46 before it increments to the next set of numbers. So once over 15 the 1st volume parameter increments. Can you say frustrating? Know I know why my automated checksum worked sometimes.

    0 = $30, $30
    1 = $30, $31

    16 = $31, $30
    17 = $31, $31

    The volume is a decimal range of 0-100 but the protocol wants to see it in hex represented in ASCII. The function of ITOHEX is perfect for this. If you need a zero padding just do right_string("'00',ITOHEX(volume)",2) Volume should be 0 to 100.
  • liviolow wrote: »
    For NEC - 4020 (Not too sure if it works on 4620 but should not be a problem.)

    {$30,$30,$21,$0D}, //Pwr On
    {$30,$30,$22,$0D}, //Pwr Off
    {$30,$30,$5F,$72,$31,$0D}, //DVI
    {$30,$30,$5F,$72,$32,$0D}, //VGA
    {$30,$30,$5F,$72,$33,$0D}, //RGB/HV
    {$30,$30,$5F,$76,$31,$0D}, //Video
    {$30,$30,$5F,$76,$32,$0D}, //DVD/HD

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$31,$03,$09,$0D}, //Volume mute
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$38,$44,$30,$30,$30,$30,$03,$08,$0D} //Volume unmute

    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$30,$03,$70,$0D} //Volume level 0
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$31,$03,$71,$0D} //Volume level 1
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$32,$03,$72,$0D} //Volume level 2
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$33,$03,$73,$0D} //Volume level 3
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$34,$03,$74,$0D} //Volume level 4
    ...... so on
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$46,$03,$06,$0D} //Volume level 15
    {$01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$31,$30,$03,$71,$0D} //Volume level 16 and so on til 100. Just see the pattern in it and of cos calculate the checksum :-)

    This looks more complicated than it is
    Hex version
    $01,$30,$41,$30,$45,$30,$41,$02,$30,$30,$36,$32,$30,$30,$30,$32,$03,$72,$0D
    ASCII version
    $01,'0A0E0A',$02,00620002,$03,<CS>,$0D

    So it looks like a Header with <stx> command 0062 data 0002 <etx><cs><cr>
Sign In or Register to comment.