Portál AbcLinuxu, 8. května 2025 15:53
-patch
+int setup_unicable (int frontend_fd, const uint32_t frequency, int unicable_chan, int unicable_freq, int pol, int band)
+{
+ struct dvb_diseqc_master_cmd cmd = { { 0xe0, 0x10, 0x5a, 0x00, 0x00, 0x00 }, 5 };
+ unsigned int t = (frequency / 1000 + unicable_freq + 2) / 4 - 350;
+ uint32_t ret = (t + 350) * 4000 - frequency;
+ cmd.msg[3] = (t >> 8) | /* highest 3 bits of t */
+ (unicable_chan << 5) | /* adress */
+ (0x00 << 4) | /* input 0/1 */
+ (pol << 3) | /* horizontal == 0x08 */
+ (band) << 2; /* high_band == 0x04 */
+ cmd.msg[4] = t & 0xFF;
+ ioctl(frontend_fd, FE_SET_TONE, SEC_TONE_OFF);
+ ioctl(frontend_fd, FE_SET_VOLTAGE, SEC_VOLTAGE_18);
+ usleep(15 * 1000);
+ ioctl(frontend_fd, FE_DISEQC_SEND_MASTER_CMD, cmd);
+ usleep(50 * 1000);
+ ioctl(frontend_fd, FE_SET_VOLTAGE, SEC_VOLTAGE_13);
+ return ret;
-príklad
D1:
(7..5) Benutzer-Band
(4) Satelliten Position: 'A' = 0, 'B' = 1
(3) Polarisation: 'V' = 0, 'H' = 1
(2) High Band: low = 0, high = 1
(1..0) Tuning Word MSB
D2:
(7..0) Tuning Word LSB:
TuningWord = round(fVCO/4MHz - 350) = round((abs(fSat - fLO) + fUser)/4 - 350)
D3:
(7..0) PIN
example:
fSat = 11837MHz, Horizontal, LNB = (9750/10600/11700)MHz, PIN=20
User freq = 1400MHz auf Kanal-ID = 0.
1. do we use highband? what LO freq?
11837MHz > 11700MHz -> fLO = 10600MHz, hiband = 1
2. calculate vco freq
f_vco_goal = abs(f_transponder - f_LO) + f_userband = abs(11837MHz - 10600MHz) + 1400MHz = 2637MHz
3. calculate 4MHz divider and substract constant value 350)
(f_vco_goal / 4MHz) - 350 = 659.0 - 350 = 309.0
4. round value to hit middle of userband as near as possible
round(309.0) = 309 = 0x0135
5. program lnb vco value
D1 : bit(7..5) = 0 (id); bit(0..1) = (309 >> 8) & 0x3
D3 : bit(7..0) = PIN -> D1 D2 D3 = 0x01 0x35 0x14
hiband = 1 -> D1 D2 D3 = 0x05 0x35 0x14
horizontal -> D1 D2 D3 = 0x0D 0x35 0x14
send DISEQC seq = 0xE0 0x00 0x5C 0x0D 0x35 0x14 oder mit Diseqc Adresse: 0xE0 0x10 0x5C 0x0D 0x35 0x14
6. as the vco is programmed in 4MHz steps, and we did rounding, we will get up to +/-2MHz frequency offset rel. to middle of user band
f_vco_real = 4MHz * (tuning_word + 350) = 2636MHz
7. freq_offset = f_vco_real - f_vco_goal = 2636MHz - 2637MHz = -1MHz
8. tune dvb tuner
f_userband + freq_offset = (1400MHz - 1MHz) = 1399MHz
neviem dopočítať(ručne) ten tretí byt(D1).
Pre ID1 mi vychádza D1=00110101,teda 0x35,čo je správna(overená hodnota).
No a pre ID2 a ID3 sa už neviem dopočítať správneho výsledku.
5. program lnb vco value
D1 : bit(7..5) = 0 (id); bit(0..1) = (309 >> 8) & 0x3
malo byť skôr
...(id); bit(1..0)...
Takisto neviem prečo mi šlo ladenie(na H transp.,hiband) na ID1 s D1=0x35(pol.V,sat.pos B-to by až tak nevadilo),keďže správne by malo byť 001 0 1 1 01=0x2D.To ale mohla byť "chyba merania".
Takže analogicky by pre parametre napr.:11836MHz,H malo platiť,D1=:
ID0->0D
ID1->2D
ID2->4D
ID3->6D
kedže bit(1..0) sa nemení.Uvidíme,ako by povedal slepý.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.