GitXplorerGitXplorer
I

Sony_SLink

public
28 stars
8 forks
2 issues

Commits

List of commits on branch master.
Verified
df17fdd32b6d4c089c88de214e7a27bd3b66effb

Add note on STR-DA1000ES volume controls

IIrcama committed 7 years ago
Verified
2b96173373c36b600c013a5df4cbe58fb8608f3e

Add support of STR-DA1000ES (3V TTL; 112 AMP device ID)

IIrcama committed 7 years ago
Verified
0e2f2bfdd8151ca7baba8c1f7ed00feb5d83ce48

Formatting

IIrcama committed 7 years ago
Verified
cce3610533f2f0df8f595472ec4b0cf5b5e6087e

Merge pull request #1 from per1234/keywords-separator

IIrcama committed 7 years ago
Verified
50a9d7288bb1bd695dbe9768b83beea7c739da62

Use correct separator in keywords.txt

pper1234 committed 7 years ago
Unverified
4d2dfdcc6a27cc83c574cc91adf8166c7440edcf

Update README.md

IIrcama committed 8 years ago

README

The README file for this repository.

Sony_SLink

Arduino SONY S-LINK/Control-A1 Protocol Library.

This library allows to drive Sony audio consumer devices connected through the Sony S-Link bus-system.

It also includes trivial monitoring capabilities for the S-Link interface, to test and dump received sequences.

(C) Ircama, 2017, CC-BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/

In standard operation, the code is targeted to the ATtiny85 microcontroller (e.g. Digispark ATtiny85). As the ATtiny85 USB interface does not allow confortable monitoring and debugging features, dumping the S-Link interface can be achieved through an ATmega328P micro (e.g., Arduino Nano).

Examples of sketches using this library:

For Digispark ATTINY85 check also this note: https://gist.github.com/Ircama/22707e938e9c8f169d9fe187797a2a2c


Installation

Create a new folder called "Sony_SLink" under the folder named "libraries" in your Arduino sketchbook folder. Create the folder "libraries" in case it does not exist yet. Place all the files in the "Sony_SLink" folder.

Usage

To use the library in your own sketch, select it from Sketch > Import Library.

Example

Simplest example of using this library:

#define SLINK_PIN 2 // S-Link Control-A1 pin

#include "Sony_SLink.h"
Slink slink;

void setup() {
  slink.init(SLINK_PIN); // Set-up S-Link pin
  slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_POWER_ON);
}

void loop() {
}

Check the examples directory for further examples.

Description of the functions

slink.init(slinkPin) - set-up S-Link pin

slink.sendCommand(device, command) - send a command to the device; check Sony_SLink.h for available commands

Examples:

slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_VOLUME_UP);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_VOLUME_DOWN);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_POWER_OFF);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_POWER_OFF);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_POWER_ON);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_SET_INPUT_CHAN, SLINK_CMDP_IN_TV);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_MUTE_ON);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_MUTE_OFF);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_SET_INPUT_CHAN, SLINK_CMDP_IN_TUNER);
slink.sendCommand(SLINK_DEVICE_AMP, SLINK_CMD_AMP_SET_INPUT_CHAN, SLINK_CMDP_IN_CD);
slink.sendCommand(SLINK_DEVICE_TUNER, SLINK_CMD_TUNER_PRESET_UP);
slink.sendCommand(SLINK_DEVICE_TUNER, SLINK_CMD_TUNER_PRESET_DOWN);
slink.sendCommand(SLINK_DEVICE_TUNER, SLINK_CMD_TUNER_PRESET_STATION, 1, 1);

slink.inputMonitor - monitor SLink input Available options:

slink.inputMonitor(0); // measure timing of mark periods in microseconds (sync should be 2400, one about 1200, zero ab. 600)
slink.inputMonitor(1); // monitor bytes displaying binary and HEX format of each byte
slink.inputMonitor(2); // monitor bytes displaying HEX dump
slink.inputMonitor(0, true); // measure timing of idle periods (e.g., delimiter; all idle periods should be about 600 microseconds)

Interfacing STR-DA1000ES

The STR-DA1000ES receiver (3V TTL, 112 AMP device ID) needs some amount of wait time between the volume up and down codes (20 and 21) to actually change the volume. From some experimentation, timing seems to be between 3ms and 1960ms. Any shorter or longer and the volume won't change.

Example:

void loop() {
slink.sendCommand(112, 20);
delay(3); //up to delay(1960);
}

Notes

Code heavily based on:

Reference documents:

Tested with a Sony STR-DA50ES receiver/amplifier. Service manual: http://sportsbil.com/sony/STR/STR-D/STR-DA30ES_DA50ES_V55ES_v1.1.pdf

This protocol is very slow: average 355 bps half duplex for a standard two-byte send transmission taking 45 millisecs (355=16/0,045).

Feel free to share this source code, but include explicit mention to the author. Licensed under creative commons - see http://creativecommons.org/licenses/by-sa/4.0/