Все современные спутниковые адаптеры снабжены генератором тонового сигнала 22 кгц. Он подаётся в коаксиальный кабель для переключения конвертера в режим HIGH BAND (диапазон частот выше 11700 мгц). Промодулировав данный тон-сигнал нулями (1 мсек) и единицами (0.5 мсек), можно с помощью такого генератора посылать команды и другим устройствам: коммутаторам, позиционерам, актуаторам и пр. Осуществляется это драйверами программно, т.е. сам по себе адаптер дополнительного хардваре в схемотехнике не требует. Такой протокол носит название DISEqC. В этой заметке я покажу как управлять мотоприводом SG-2100A (и другие подобные) из-под linux-а с помощью Cesbo Astra (возможность реализована начиная с версии 5.64).
Скрин ниже снят анализатором Saleae. Такая посылка должна быть отправлена, чтобы установить мотор в 0°E (по-сути 0°W то же самое) по градации на шкале мотора.
Перечень команд (взят из драйверов):
[E0 31 60] // Stop Positioner movemoment [E0 31 63] // Disable Limits [E0 31 66] // Set East Limit [E0 31 67] // Set West Limit [E0 31 68 00] // Drive Motor East continously [E0 31 68 FF-nn] // Drive Motor East nn steps [E0 31 69 FF-nn] // Drive Motor West nn steps [E0 31 69 00] // Drive Motor West continously [E0 31 6A nn] // Store nn [E0 31 6B nn] // Goto nn [E0 31 6F XX XX XX] // Recalculate Position [E0 31 6A 00] // Enable Limits [E0 31 6E XX XX] // Gotoxx [E0 10 38 F4] // User
diseqc = «[E0 31 6E D4 80]» — 74°W
diseqc = «[E0 31 6E D0 00]» — 0°W
diseqc = «[E0 31 6E E0 00]» — 0°E
diseqc = «[E0 31 6E E4 80]» — 74°E
Высчитываем один шаг: 74° / 0x480 = 0.064236°
Теперь, чтобы например установить на 10.5°E (по шкале мотора):
0xE000 + (10.5° / 0.064236) = 0xE0A3
Конфиг астры:
dvb_tune({ adapter = 0, type = "S", frequency = 12155, -- HIGH band [tone 22 khz] lnb_sharing = false, -- enable voltage lnb polarization = "H", -- 18V symbolrate = 27500, -- lof1 = 9750, -- lof2 = 10600, -- slof = 11700, -- modulation = "QPSK", -- diseqc_mode = "cmd", -- diseqc = "t W50 [E0 31 6E E0 A3] W30 T" -- set 10.5°E });
Команду дисека можно и упростить — «t W50» (снятие и выдержка 50 мсек) можно не указывать. Так тоже будет работать. Но вернуть тон (если он был) в конце обязательно надо. А вот в случае с нижним поддиапазоном несколько попроще картина. Отключать/включать тон 22 кгц и выдерживать таймауты нет необходимости. Поэтому здесь конфиг выглядит так:
dvb_tune({ adapter = 0, type = "S", frequency = 11555, -- LOW band [no tone 22 khz] lnb_sharing = false, -- enable voltage lnb polarization = "H", -- 18V symbolrate = 27500, -- lof1 = 9750, -- lof2 = 10600, -- slof = 11700, -- modulation = "QPSK", -- diseqc_mode = "cmd", -- diseqc = "[E0 31 69 FE]" -- повернуть на один шаг на West });