Easily adds stepped IR volume control to any audio project.







Shown above in volume / mute configuration with pre-programmed remote and dc power supply.
Uses codes: Power (2069), Volume Up (2066), Volume Down (2067), Volume Mute (2068).
All quality parts including gold jacks, silver plated FR4 board, Mircochip PIC16F18323 micro-controller, Vishay TSOP34440 IR receiver, Texas Instruments SN754410 motor driver and Bourns 100k motorized pot.
Completely passive audio path with non shorting mute circuit.
Dry contact outputs follow power status. Ideal for triggering external devices/amps. Contacts rated 1A @ 12Vdc.
Precise 2 speed motor control step rate. Click – Hold – Release will increment / decrement volume in small steps (100 steps). Rapidly clicking and releasing will increment / decrement volume at a high rate (11 steps).
Intelligent features include instruction received feedback via power led and return to low volume on shutdown.
Long range reliability of +30ft.
Compatible with any remote that supports Sony codes. (DAV10)
Also available as volume only or volume, mute and up to 4 sources.
Uses just 6 codes: Power (2069), Volume Up (2066), Volume Down (2067), Volume Mute (2068), Source UP (2173), and Source Down (2158).
Schematic and code for full version shown below.


Simple SONY IR receiver (DAV10) beta V1 :
'EULA: Licensed under the MIT License agreement.
'Copyright (2020) PJL Electronics LLC
'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal
'in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
'of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
'THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
'FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
'IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
'Simple IR receiver (SONY DAV10 beta 1):
' PICBASIC PRO
; V1.0 BETA
define OSC 32
' SETUP I/O IN ASEMBLY
asm
;The A port
BANKSEL PORTA ;
CLRF PORTA ;Clear PORTA
BANKSEL LATA ;Data Latch for A
CLRF LATA ;
BANKSEL ANSELA ;
CLRF ANSELA ; select digital I/O
BANKSEL TRISA ;
MOVLW B'00000000' ;Set all to out
MOVWF TRISA
;The C port
BANKSEL PORTC ;
CLRF PORTC ;Clear PORTC
BANKSEL LATC ;Data Latch for C
CLRF LATC ;
BANKSEL ANSELC ;
CLRF ANSELC ;select digital I/O
BANKSEL TRISC ;
MOVLW B'00000001' ;Set RC<0 AND 1> as inputs, remaining will be out
MOVWF TRISC
endasm
low portc
low porta.4
low porta.5
'high porta.5
'pause 9000
'low porta.5
''''''''''''''''''''''''''''''''''' inits
initIR:
define PULSEIN_MAX 2600
IR_Sense var portc.0
ST var word
IR_Word var word
bits var byte
ID var word
power var bit
source var byte
temp var byte
power = 0
read 0, source
if source = 0 or source > 4 then source = 1
''''''''''''''''''''''''''''''''''''''Main Program
top:
ir_word = 0
ID = 0
gosub irin
If ir_word > 0 then
if ir_word = 2069 then gosub powerset
if power = 0 then goto top
if ir_word = 2173 then gosub sourceup
if ir_word = 2158 then gosub sourcedown
if ir_word = 2066 then gosub volup
if ir_word = 2067 then gosub voldown
if ir_word = 2068 then gosub volmute
endif
goto top
powerset:
if power = 1 then
power = 0
low portc.1
low portc.2
low portc.3
low portc.4
low portc.5
high porta.5
gosub longpause
low porta.5
write 0, source
else
power = 1
high porta.4
gosub shortpause
low porta.4
high portc.5
gosub setsource
endif
gosub debouncelong
return
sourceup:
source = source + 1
if source = 5 then source = 1
gosub setsource
gosub debounce
return
sourcedown:
source = source - 1
if source = 0 then source = 4
gosub setsource
gosub debounce
return
setsource:
low portc.1
low portc.2
low portc.3
low portc.4
if source = 1 then high portc.1
if source = 2 then high portc.2
if source = 3 then high portc.3
if source = 4 then high portc.4
pause 100
return
volup:
high porta.4
gosub debouncelong
low porta.4
return
voldown:
high porta.5
gosub debouncelong
low porta.5
return
volmute:
low portc.5
pause 2000
high portc.5
return
longpause:
for temp = 1 to 18
high portc.5
pause 250
low portc.5
pause 250
next
return
shortpause:
for temp = 1 to 3
high portc.5
pause 250
low portc.5
pause 250
next
return
irin:
pulsin portc.0, 0, st
IF ST < 1200 or st >2500 Then Return' If not valid then exit
For bits=0 to 11
Pulsin portc.0,0,Id ' Receive the IR bit pulse
ir_word.0[bits] = 0
If id >=600 then ir_word.0[bits] = 1 ' If its >= 600 then we've received a 1
Next
return
debounce:
pulsin portc.0, 1, st
'LCDOUT $FE, $C0, #st
IF (st >560) or (ST = 0) Then Return
goto debounce
debouncelong:
ir_word = 0
pulsin portc.0, 1, st
'LCDOUT $FE, $C0, #st
IF (ST = 0) Then Return
goto debouncelong