RaspberryPi + Pioneer System Remote

У статті коротко описана шина Pioneer System Remote (SR), представлені схема підключення RaspberryPi до шини System Remote і CLI програма мовою C для RaspberryPi, керуюча підсилювачем Pioneer M-10X через GPIO. В якості викриття наведено спосіб застосування цієї програми.
 
 У двох словах про Pioneer System Remote
Деякі домашні аудіо / відео компоненти виробництва Pioneer Corporation можуть бути з'єднані один з одним шиною управління, яка називається SR (абревіатурне скорочення від System Remote). Метою такого об'єднання окремих компонентів у єдину систему є, звичайно ж, зручність споживача, адже при цьому цілою грядкою пристроїв можна керувати з одного пульта ДУ.
 
 Коннектори цієї шини позначаються як CONTROL IN і CONTROL OUT і виконані у вигляді моно гнізд mini jack 3.5мм. Тому з'єднання блоків по шині SR можна виробляти звичайними двоконтактними аудіо кабелями з моно штекерами mini plug 3.5мм (роз'єм типу TS, від Tip-Sleeve). Пристрої з'єднуються послідовно, гірляндою: вихід CONTROL OUT одного компонента з'єднується з входом CONTROL IN іншого. Контакт Tip роз'єму несе власне сигнал шини SR, а от з контактом Sleeve справа трохи складніше. На деяких компонентах (наприклад, підсилювач M-10X) тут чесна «земля», і тоді все як годиться: Tip — сигнал, Sleeve — «земля». Але є компоненти (як правило, програвачі), які використовують контакт Sleeve роз'єму шини SR для передачі цифрового аудіо сигналу. У цьому випадку «земля» береться з корпусу компоненту або з «землі» аналогового аудіо роз'єми. Насправді, якщо «землі» компонентів будь-яким чином з'єднані, то про контакт Sleeve роз'єму шини SR можна взагалі забути.
 
Керуючі коди шини SR є ні чим іншим, як демодулювати сигналами пульта ДУ. Тобто шина SR це попросту провідний ретранслятор очищених від несучої частоти IR команд. (В IR пультах модуляція кодів управління несучою частотою ~ 40кГц застосовується для того, щоб, по-перше, знизити енерговитрати на передачу і збільшити термін служби батарейок пульта, а по-друге, мати можливість відбудовуватися від сигналів чужих пультів ДУ). При надходженні IR команди від пульта ДУ активний SR-приймач здійснює ретрансляцію цієї команди по шині SR. Команду бачать всі пристрої, підключені до шини. Компоненти виробництва Pioneer Corporation можуть бути оснащені одним роз'ємом шини SR (тільки входом або тільки виходом), або двома — і входом, і виходом. Вхід, CONTROL IN , характеризується наявністю інтерпретатора команд (спеціальної мікросхеми; наприклад, в підсилювачі M-10X це мікросхема PD5637A), який і відповідає за декодування і виконання команд пристроєм. Однак слід зауважити, що System Remote є саме загальною шиною, і коди управління ретранслюються як на виходи CONTROL OUT , так і на входи CONTROL IN .
 
У простому випадку керуючі коди є двобайтовими, де перший байт це тип пристрою, а другий байт — власне код команди для виконання на цьому типі пристроїв. Нижче для довідки наведено список типів пристроїв шини SR (перший байт команди управління):
 
 
     
0x73 Projectors
 0xA1 Tape decks (Blu-ray Players)
 0xA2 CD Players
 0xA3 DVD Players
 0xA4 Tuners
 0xA5 Amplifiers (AV Receivers)
 0xA8 Laserdisc Players
 0xAB Video Recorders (DVD Recorders)
 0xAA Plasma Displays
 
Пристрої на шині SR не мають виділених адрес, шина не є адресною. Тому, наприклад, якщо до шини підключені два CD програвача, то багато команд з типом пристрою 0xA2 виконуватимуть обидва програвача одночасно. Кодів команд багато, набори команд залежать від типу пристрою, року випуску і навіть від моделі компонента. На одному з сайтів Pioneer Corporation, в розділі Custom Install з цієї посиланням можна скачати коди пристроїв і команд управління для деяких конкретних моделей.
 
 
Протокол передачі інформації по шині System Remote досить простий. Кожен компонент на контакті Tip роз'ємів шини підтримує +5 В (TTL логіка). Для відправки фрейму інформації потрібно в певній послідовності і з певною тривалістю подавати на контакт Tip шини SR потенціал «землі» (0В). Pioneer, як і багато японські виробники, використовує в IR командах схему кодування тривалістю біта (bit-width codification), коли логічний нуль кодується імпульсом тривалістю 0,56 мс а потім паузою 0,56 мс, а логічна одиниця кодується імпульсом тривалістю 0,56 мс а потім паузою 1,68 мс.
 
 Малюнок 1. Кодування тривалістю бита.
 
Структура фрейма шини SR для двобайтових команд наступна:
 
 
     
заголовок фрейма: впродовж 9мс на шині утримується потенціал 0В (пульс), потім протягом 4,5 мс потенціал +5 В (пауза)
 8 біт: код типу пристрою
 8 біт: побітовое заперечення коду типу пристрою
 8 біт: код команди
 8 біт: побітовое заперечення коду команди
 1 біт: стоп-біт
 
На малюнку нижче приведена осциллограмма фрейма 0xA55A38C7 шини SR, передавального команду power toggle (код команди 0x38) підсилювача (код типу пристрою 0xA5):
 
 
 Малюнок 2. Фрейм 0xA55A38C7 шини System Remote.
 
 Підсилювач Pioneer M-10X
 Це підсилювач потужності, з органів управління він має всього дві кнопки: механічну кнопку Power і електронну кнопку Standby. Не густо. Але, на щастя, ще він обладнаний входом CONTROL IN шини System Remote і розуміє три команди:
     
цикл живлення (power toggle) 0xA538
 включити живлення (power on) 0xA558
 вимкнути живлення (power off) 0xA5D8
 
 
 Підключення RaspberryPi до шини Pioneer System Remote
Шина System Remote має TTL логіку, напруга змінюється в діапазоні від 0В до +5 В. На висновках же GPIO RaspberryPi напруга може змінюватися в діапазоні від 0В до +3,3 В, при цьому захисту від перенапруги для цих висновків на платі не передбачено. Тому безпосередньо управляти шиною SR з виведення GPIO не можна, необхідно використовувати перетворювач рівня.
 
Представлена ​​тут схема і є таким перетворювачем. База транзистора Q1 через резистор R1 підключається до ніжки P1-11 (GPIO17) RPi, колектор транзистора через резистор R2 — до ніжки P1-02 (5V) RPi, а емітер транзистора — до ніжки P1-20 (GND) RPi. Програмно керуючи висновком GPIO17 (база транзистора Q1), на контакті Tip клемника J1 (колектор транзистора Q1) отримуємо сигнал потрібного рівня для керуючих команд шини System Remote. Резистор R1 служить обмежувачем струму бази, а резистор R2 — обмежувачем струму колектора транзистора. Коли на базі транзистора 0В (GPIO17 = 0), транзистор закритий і на емітер утримується потенціал +5 В; коли на базі транзистора +3,3 В (GPIO17 = 1), транзистор відкритий і на емітер утримується потенціал 0В. Тому, строго кажучи, ця схема є інвертором сигналу з перетворенням рівня. На Малюнку 2 вище показані осцилограми працюючої схеми: на верхньому графіку — сигнал на колекторі транзистора (шина SR), на нижньому графіку — сигнал на базі транзистора (ніжка GPIO17; реальний діапазон цього сигналу від 0В до +3,3 В).
 
 
 
 
 
Для реалізації схеми знадобляться:
 
 
     
контактна макетна плата
 транзистор КТ3102 (Q1)
 резистор 1кОм (R1)
 резистор 10кОм (R2)
 клеммник з кроком контактів 2,54 мм, для установки в макетну плату (J1)
 моно штекер mini plug 3.5мм (роз'єм типу TS)
 дроти
 
Щоб не возитися з пайкою штекера, можна замість нього взяти готовий моно кабель з mini plug 3.5мм, відрізати коннектор з одного боку, а провідники підключити до клемника J1.
 
Увага! Будьте дуже обережні з пятівольтового ніжками RaspberryPi (P1-02 і P1-04), ні в якому разі не закоротити випадково ці контакти з іншими ніжками плати, так як це виведе її з ладу.
 
 Програма управління живленням підсилювача Pioneer M-10X для RaspberryPi
Вихідний код програми для платформи Raspbian знаходиться за цією посиланням . Код містить виклик nice (-19) , тому програма повинна викликатися суперкористувачем root. Для складання програми потрібно використовувати команду:
 
 
gcc -o m10xptgl m10xptgl.c

Після складання потрібно створити дві символічні посилання з альтернативними іменами m10xpon і m10xpoff на виконуваний файл:
 
 
ln -s m10xptgl m10xpon
ln -s m10xptgl m10xpoff

Програма генерує на ніжці GPIO17 фрейм керуючої команди для підсилювача Pioneer M-10X. Фактичне дію програми (генерований фрейм) залежить від імені, під яким програма запущена:
 
 
     
при запуску з ім'ям m10xpon відбувається включення підсилювача (вихід зі стану Standby, фрейм 0xA55A58A7)
 при запуску з ім'ям m10xpoff відбувається вимикання підсилювача (перехід в стан Standby, фрейм 0xA55AD827)
 при запуску з ім'ям m10xptgl відбувається перемикання стану харчування підсилювача (команда power toggle, фрейм 0xA55A38C7)
 
В якості необов'язкового аргументу програмі можна вказати ціле число, в цьому випадку фрейм буде послідовно повторений стільки разів, скільки задано аргументом командного рядка.
 
Загалом проект простий, не складніше навчального проекту з миганню світлодіодом, тільки тут ми «кліпаємо» цілим підсилювачем Pioneer.
 
 Застосування
 
Описані в статті схему і програму зручно використовувати, наприклад, разом з проектом shairport , тому що при цьому ми отримуємо не тільки функцію AirPlay на старому підсилювачі, але й автоматичне включення і виключення підсилювача on demand.
 
Зібрати проект shairport з вихідних кодів можна за допомогою послідовності наступних команд:
 
 
apt-get install avahi-daemon mdns-scan libssl-dev libavahi-client-dev libasound2-dev
apt-get install libao4 libao-dev
apt-get install pulseaudio libpulse-dev
cd /root/src; git clone --depth 1 https://github.com/abrasive/shairport.git shairport
cd shairport
./configure
make

А запускати так:
 
 
shairport -v --name="M10X" --on-start="/usr/local/sbin/m10xpon 10" --on-stop="/usr/local/sbin/m10xpoff 10"

Спасибі за увагу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.