Fitipower: Difference between revisions
(Pre vco selection) |
(should be fairlt complete now) |
||
(One intermediate revision by the same user not shown) | |||
Line 4: | Line 4: | ||
=Specifications= |
=Specifications= |
||
Don't trust this blindly. Division is always integer division. |
Don't trust this blindly. Division is always integer division. Set means prepare a place holder with value. Write means actually transmit the value from the placeholder. |
||
==Tuner general info == |
==Tuner general info == |
||
Line 152: | Line 152: | ||
=== Fix for low frequency's === |
=== Fix for low frequency's === |
||
if frequency < 45000 |
*if frequency < 45000 |
||
* set tuner registry 1 to 0x06 |
** set tuner registry 1 to 0x06 |
||
* set tuner registry 2 to 0x11 |
** set tuner registry 2 to 0x11 |
||
=== Fix clock out === |
=== Fix clock out === |
||
Line 163: | Line 163: | ||
=== VCO calibration === |
|||
vco_cali is a 8bit wide parameter, |
|||
vco_sel is a pre-calculated parameter |
|||
Restart VCO calibration |
|||
* write 0x80 to tuner register 14 |
|||
Run VCO calibration |
|||
* write 0x00 to tuner register 14 |
|||
Read VCO calibration value |
|||
* write 0x00 to tuner register 14 |
|||
wait 10 milliseconds |
|||
* read tuner register 14 into vco_cali |
|||
Select VCO |
|||
* set vco_cali equal to vco_cali bitwise anded with 0x3f |
|||
* if vco_sel is equal to 0 |
|||
** if vco_cali < 0x08 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
*** write 0x80 to tuner register 14 |
|||
*** write 0x00 to tuner register 14 |
|||
** if vco_cali >= 0x08 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x00 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
* if vco_sel is equal to 1 |
|||
** if vco_cali < 0x05 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x08 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
*** write 0x80 to tuner register 14 |
|||
*** write 0x00 to tuner register 14 |
|||
** if 0x05<= vco_cali <= 0x30 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
** if vco_cali > 0x30 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x00 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
*** write 0x80 to tuner register 14 |
|||
*** write 0x00 to tuner register 14 |
|||
* if vco_sel is greater then 1 |
|||
** if vco_cali > 0x35 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
*** write 0x80 to tuner register 14 |
|||
*** write 0x00 to tuner register 14 |
|||
** if vco_cali <= 0x35 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x08 |
|||
*** set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20 |
|||
*** write tuner registry 6 |
|||
* set tuner registry 16 equal to 0x0b |
|||
wait 10 milliseconds |
|||
* read tuner registry 13 |
|||
* set registry 13 equal to registry 13 ored with 0x10 |
|||
* write tuner registry 13 |
|||
* write tuner registry 16 |
|||
[[Category:Tuners]] |
[[Category:Tuners]] |
Latest revision as of 20:54, 6 December 2009
Tuner used together with AF9035. http://www.fitipower.com.tw/main.htm?pid=9&ID=57
Specifications
Don't trust this blindly. Division is always integer division. Set means prepare a place holder with value. Write means actually transmit the value from the placeholder.
Tuner general info
I2C address is 0xC0. There are 18 8bit large tuner registers indexed from 0.
Index | Name |
---|---|
1 | FA |
2 | FP |
3,4 | XIN |
5 | VCO |
6 | VCO_SELECT |
14 | VCO_CALIBRATE |
Init/Reset
Enable tuner:
- write 1 to GPIO 0xD8EB
- write 1 to GPIO 0xD8EC
- write 1 to GPIO 0xD8ED
Enable led:
- write 1 to GPIO 0xD8D1
- write 1 to GPIO 0xD8D0
UnInit
Disable led:
- write 0 to GPIO 0xD8D1
- write 0 to GPIO 0xD8D0
Tune
Tuning is based on 2 parameters:
- bandwidth in Hz, can be 6000,7000 or 8000
- frequency in Hz, can be the regular DVB-T frequency's
Init tuning
- write 0x0F to tuner register 7
- write 0x3E to tuner register 8
- write 0xB8 to tuner register 10
- write 0x80 to tuner register 11
- write 0x04 to tuner register 13
Generate the frequency of VCO and the VCO divider
fvco is a parameter
- if frequency < 54000
- set fvco to frequency * 64
- set tuner registry 5 to 0x82
- if 54000 =< frequency < 108000
- set fvco to frequency * 32
- set tuner registry 5 to 0x42
- if 108000=< frequency < 216000
- set fvco to frequency * 16
- set tuner registry 5 to 0x22
- if 216000=< frequency < 432000
- set fvco to frequency * 8
- set tuner registry 5 to 0x12
- if frequency > 432000
- set fvco to frequency * 4
- set tuner registry 5 to 0x0A
Calculate XIN
fraction is a 16bit unsigned parameter, xin is a parameter, fvco is a pre-calculated parameter, xdiv is a parameter
- set xdiv equal to fvco / 18000
- set fraction equal to fvco minus xdiv multiplied by 18000
- set fraction equal to fraction left shifted 15 times and then divided by 18000
- if fraction is greater or equal to 16384
- set fractional equal to fractional plus 32768
- if fraction is equal to 0
- set xin equal to 0
- if 0 < fraction < 511
- set xin equal to 0x200
- if 511 < fraction <= 65025
- set xin equal to fraction
- if 65025 < fraction
- set xin equal to 0xfe00
- write xin right shifted 8 times to tuner register 3
- write xin only 8 low bits to tuner register 4
Calculate FP and FA
fvco is a pre-calculated parameter, xdiv is a pre-calculated parameter, xdivr is a parameter, fp is a 8 bit wide parameter, fa is a parameter
- set xdivr equal to xdiv
- if fvco minus xdiv multiplied by 18000 is greater equal to 9000
- set xdivr equal to xdiv + 1
- set fp equal to xdivr / 8
- set fa equal to xdivr minus fp left shifted 3 times
- if fa is less then 2
- set fp equal fp minus 1
- set fa equal fa plus 8
- write fa to tuner register 1
- write fp to tuner register 2
Select bandwidth
- if bandwidth = 8000
- set tuner registry 6 to 0x0
- if bandwidth = 7000
- set tuner registry 6 to 0x40
- if bandwidth = 6000
- set tuner registry 6 to 0x80
Pre VCO selection
fvco is a pre-calculated parameter, vco_sel is a parameter
- if fvco < 2320000
- set vco_sel equal to 0
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- if 2320000 <= fvco < 3080000
- set vco_sel equal to 1
- set tuner registry 6 equal to tuner registry 6 bitwise or'ed with 0x10
- if 3080000 <= fvco
- set vco_sel equal to 1
- set tuner registry 6 equal to tuner registry 6 bitwise or'ed with 0x08
Fix for low frequency's
- if frequency < 45000
- set tuner registry 1 to 0x06
- set tuner registry 2 to 0x11
Fix clock out
- set tuner registry 6 to the result of a bitwise OR between tuner registry 6 and 0x20
Write frequency parameters
- write tuner registry 0-6
VCO calibration
vco_cali is a 8bit wide parameter, vco_sel is a pre-calculated parameter
Restart VCO calibration
- write 0x80 to tuner register 14
Run VCO calibration
- write 0x00 to tuner register 14
Read VCO calibration value
- write 0x00 to tuner register 14
wait 10 milliseconds
- read tuner register 14 into vco_cali
Select VCO
- set vco_cali equal to vco_cali bitwise anded with 0x3f
- if vco_sel is equal to 0
- if vco_cali < 0x08
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- write 0x80 to tuner register 14
- write 0x00 to tuner register 14
- if vco_cali >= 0x08
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x00
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- if vco_cali < 0x08
- if vco_sel is equal to 1
- if vco_cali < 0x05
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x08
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- write 0x80 to tuner register 14
- write 0x00 to tuner register 14
- if 0x05<= vco_cali <= 0x30
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- if vco_cali > 0x30
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x00
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- write 0x80 to tuner register 14
- write 0x00 to tuner register 14
- if vco_cali < 0x05
- if vco_sel is greater then 1
- if vco_cali > 0x35
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x10
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- write 0x80 to tuner register 14
- write 0x00 to tuner register 14
- if vco_cali <= 0x35
- set tuner registry 6 equal to tuner registry 6 bitwise anded with the bitwise complement of 0x18
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x08
- set tuner registry 6 equal to tuner registry 6 bitwise ored with 0x20
- write tuner registry 6
- if vco_cali > 0x35
- set tuner registry 16 equal to 0x0b
wait 10 milliseconds
- read tuner registry 13
- set registry 13 equal to registry 13 ored with 0x10
- write tuner registry 13
- write tuner registry 16