Re: loop bandwidth

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/21/07, e9hack <e9hack@xxxxxxxxxxxxxx> wrote:
Manu Abraham wrote:
> Hi all,
>
> would it make sense to initially lock with a larger loop bandwidth
> (for a faster lock) and once locked, switch to a smaller loop
> bandwidth (for lower phase noise) ?
>
If you mean the lock of the tuner-pll, I did it for the cinergy DVB-C card:

I wasn't looking at the tuner PLL, but a tuning loop inside the
demodulator which handles a similar functionality.

it should be the same in either case, since the way it is done is the
same. In your case, does this bring in a substantial improvement in
Lock times Vs Phase noise ?

diff -r e625163eba29 linux/drivers/media/dvb/ttpci/budget-av.c
--- a/linux/drivers/media/dvb/ttpci/budget-av.c    Sat Jan 20 15:53:08
2007 -0200
+++ b/linux/drivers/media/dvb/ttpci/budget-av.c    Sun Jan 21 09:54:15
2007 +0100
@@ -633,6 +633,7 @@ static int philips_cu1216_tuner_set_para
    struct budget *budget = (struct budget *) fe->dvb->priv;
    u8 buf[4];
    struct i2c_msg msg = {.addr = 0x60,.flags = 0,.buf = buf,.len =
sizeof(buf) };
+    int i;

 #define TUNER_MUL 62500

@@ -640,7 +641,7 @@ static int philips_cu1216_tuner_set_para

    buf[0] = (div >> 8) & 0x7f;
    buf[1] = div & 0xff;
-    buf[2] = 0x86;
+    buf[2] = 0xce;
    buf[3] = (params->frequency < 150000000 ? 0x01 :
          params->frequency < 445000000 ? 0x02 : 0x04);

@@ -648,6 +649,29 @@ static int philips_cu1216_tuner_set_para
        fe->ops.i2c_gate_ctrl(fe, 1);
    if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
        return -EIO;
+
+    msg.flags = I2C_M_RD;
+    msg.len = 1;
+    for (i = 0; i < 20; i++) {
+        if (fe->ops.i2c_gate_ctrl)
+            fe->ops.i2c_gate_ctrl(fe, 1);
+        if (i2c_transfer(&budget->i2c_adap, &msg, 1) == 1 && (buf[0] &
0x40))
+            break;
+        msleep(10);
+    }
+
+    msg.flags = 0;
+    msg.buf = &buf[2];
+    msg.len = 2;
+    buf[2] &= ~0x40;
+    if (fe->ops.i2c_gate_ctrl)
+        fe->ops.i2c_gate_ctrl(fe, 1);
+    if (i2c_transfer(&budget->i2c_adap, &msg, 1) != 1)
+        return -EIO;
+
+    printk("(%s:%d)Loops %d, Status %02x, Frequency %d.%dMHz\n",
+           __FILE__, __LINE__, i, buf[0], params->frequency / 1000000,
(params->frequency / 100000) % 10);
+
    return 0;
 }

Many pll chips have an auto-switch feature. It isn't necessary to switch
the charge pump current manually. It may be a problem, that many tune
functions do never wait for the lock. This is not a problem if the time
for the lock is lower than the time for initializing the demodulator.


Most PLL based tuners do specify an optimum step size. For this step
size the charge pump settings have to specified for optimum phase
noise

Your modifications to the CU1216 tuner makes it behave better in some way ?


For the patch above, I get one loop for switching some channels forward
or backward. I get 2..3 loops for switching from the highest channel on
VHFH to the lowest channel on UHF.

Another nice feature is the AGC time constant and the AGC take-over
point. The AGC values are never programed for the Cinergy card. The
reset values are used always.

- Hartmut

thanks,
manu

_______________________________________________
linux-dvb mailing list
linux-dvb@xxxxxxxxxxx
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb

[Index of Archives]     [Linux Media]     [Video 4 Linux]     [Asterisk]     [Samba]     [Xorg]     [Xfree86]     [Linux USB]

  Powered by Linux