i2c-tuner kontrol

Başlatan ei, 20 Eylül 2012, 17:34:16

ei

Merhaba,
Bir Philips FI1216 tuneri 16f628 ile kontrol etmek istiyorum.
FI1216'nın veri kağıdına göre sırasıyla:
1) Adres byte'ı
2) Bölücünün yüksek değerli byte'ı
3)  Bölücünün düşük değerli byte'ı
4) Kontrol byte'ı
5) Kontrol byte'ı
Tunere gönderilmeli.

Bunun için şöyle bir kod yazdım (Örnek kod tek bir sabit frekans (88 MHz) için, gereksiz kısımlar yoktur)
---------
Device = 16F628A
Xtal = 4
CMCON= 7
TRISB = %01110000

Dim bolmeorani  As Word
Dim adres          As Byte                                                                 '
Dim LO              As bolmeorani.LowByte    'bölmeoranı değişkeninin düşük byte'ı
Dim HI              As bolmeorani.HighByte    'bölmeoranı değişkeninin yüksek byte'ı

Symbol SDA = PORTB.1                 
Symbol SCL = PORTB.2                                                                    '
Declare SDA_Pin   PORTB.1
Declare SCL_Pin   PORTB.2

adres  = $C2                                            'Tunerin adresi
bolmeorani=2428                                     '88.000 kHz alma frekansı+33.400 kHz arafrekans =121400/50 (adımlar 50kHz)
             
I2cout SDA,SCL,adres, [HI,LO,$88,$05]   'Bilgiler tunere gönderiliyor         
End
-----------------------------
$88 ve $05, 4. ve 5. sıradaki kontrol byte'ları.
Bu kod çalışmadı maalesef.
Nerede yanlış yapmış olabilirim?
Teşekkürler.
                         '                                                    '

ei

Hatayı buldum. Kontrol byte'larını yanlış hesaplıyormuşum.

ipek

bizde öğrensek olmazmı?? nasıl yaptığını

ei

Kontrol baytının nasıl hesaplandığını mı?

ipek

evet hesaplamayı öğrenmek istiyorum. zira bu tunerde birde adres select ayağı var ve default olarak içinden biryerlere bağlı ,pic basicle bir kaç deneme yaptım lock detect geri dönmedi.benim niyetim bunun lokal osilatörünü kullanmak AD9854 DDS çip'im var buna 80 mhz verip içindeki clok rate multiplerini 400 mhz ye ayarlıyorum, çıkan sinus sinyalinde azda olsa jitter ve glitc mevcut içindeki çarpıcı devre üretilirken oluşan gürültülermiş bunlar eğer sen yukarıdaki parçacığı çalıştırabildi isen senin, yazılım ile 400mhz'ye fixleyip osilatörü bir mmic yada  hempt buffer ile dışarı almayı düşünüyorum kolaylıklar dilerim...

ei

FI1216 tuner kullandığınızı varsayalım.

Tunerin çalışacağı frekans: 400.000 MHz
50 kHz için bölme oranı: 400000/50=8000
AS (address select) bacağını boş bırakırsanız tunerin adresi: C2 (hex)
400 MHz tunerin orta bandına denk gelir.

Tuneri kontrol etmek için 5 byte bilgi göndermek gerekiyor:
1. byte tunerin adresi
2. byte:Bölme oranının yüksek anlamlı byte'ı
3. byte:Bölme oranının düşük anlamlı byte'ı
4. byte: 1. kontrol byte'ı (Charge pump akımı,step büyüklüğü gibi değerler)
5. byte: 2. kontrol byte'ı (tunerin band bilgisi)

FI1216 tuneri için band kontrol bilgisi şöyledir:

En düşük band için : 160 ($A0)
Orta band için : 144 ($90)
Yüksek band için : 48 ($30)


Bu bilgilere göre siz şu kodla bu işi yapabilirsiniz:
--------------------------------------------

Dim bolmeorani     As Word
Dim adres          As Byte                                                                 '
Dim LO              As bolmeorani.LowByte    'bölmeoranı değişkeninin düşük byte'ı
Dim HI              As bolmeorani.HighByte    'bölmeoranı değişkeninin yüksek byte'ı

Symbol SDA = PORTB.1     'Hangi pin'i SDA ve SCL için kullanacaksanız onu seçeceksiniz               
Symbol SCL = PORTB.2                                                                    '
Declare SDA_Pin   PORTB.1
Declare SCL_Pin   PORTB.2

adres  = $C2                                            'Tunerin adresi
bolmeorani=8000                                     '88.000 kHz alma frekansı+33.400 kHz arafrekans =121400/50 (adımlar 50kHz)
             
I2cout SDA,SCL,adres, [HI,LO,$C8,$90]   'Bilgiler tunere gönderiliyor.

---------------------------------
Kolay gelsin.
(Bu arada, DDS için tunerle uğraşmak yerine 80 MHz'lik bir osilatörün frekansını helikal filtreyle 5. harmoniğe ayarlayıp kullanmayı deneyebilirsiniz.)

askuzucu

@ipek hocam;
tunerde kullanılan osilatör tipi de, tuner içerisindeki TSA5512 vs. pll entegreleri de öyle düşk gürültülü şeyler değiller.Devreyi mb1502 etrafında kurmanızı, osilator olarakta  hazır birşey bulamazsanız eski video modülatorlerde kullanılan trimer ayarlı osilatorleri varikap takarak kullanmanızı öneririm.


ipek

ei ilgine teşekkür ederim..

askuzucu  günün en parlak fikri senden geldi bulunması kolay vaktiyle onları spectrum ile gözlemiştim  bir saatte 250khz falan kayıyorlardı tv'nin afc devresi  bu telafi edebiliyordu gördüğüm spectral çok temizdi denemelerimi bununla yapayım kilitlemesi sonraya kalır 73..