TEA5767 PIC16F628 Dijital PLL kontrollü FM Radyo Alıcı Sistemi

Uzun zamandır yeni bir proje yayınlamamıştım. Bunun sebepleri var elbette. Proje çok ama yayınlama isteğim yok.
Çünkü sürekli olarak projelerimi ticari mal haline getirip satıyorlar. Diyeceksiniz ki ne karışıyorsun sen açık kodu veriyorsun devreyide veriyorsun gerisi yapanın insafına kalmış. Ama durum öyle değil. İş ticarete gelince yapanın hakkınıda düşünmek gerekir. Her neyse hiç bir projemin ticari mal olarak satılmasına razı değilim bunu herkesin bilmesini istiyorum. Satmak isteyen banden izin alması gerekir.
![]()
Evet gelelim yeni projeye, bir “Dijital ve PLL kontrollü FM Radyo Alıcı Sistemi“ vereceğim. Bazılarına basit bir proje gibi gelebilir. Ama sistem geliştirmeye çok açık bir proje. Şu anda piyasada olan en modern radyoların tüm özelliklerini taşımasına rağmen kısıtlı imkanlar nedeni ile basite indirgeyerek yaptım bu projeyi. Bu bir tam digital PLL kontrollü FM radyo projesidir.
Proteus isis devre şeması ve pcb baskı devre alt, üst resimleri;
Radyo-57_YEN.bas yazılım içeriği;
'******************************************************** '* Name : UNTITLED.BAS * '* Author : [E.T.E] * '* Notice : Copyright (c) 2006 [Ete] * '* : All Rights Reserved * '* Date : 21.12.2006 * '* Version : 1.0 * '* Notes : İLERİ VE GERİ TARAMA TUŞLARI İLE ÇALIŞIR * '* : OTOMATİK BANT SONUNA GİTME VAR '* * '******************************************************** @ DEVICE pic16F628 @ DEVICE pic16F628, WDT_ON @ DEVICE pic16F628, PWRT_ON @ DEVICE pic16F628, PROTECT_OFF @ DEVICE pic16F628, MCLR_OFF @ DEVICE pic16F628, INTRC_OSC_NOCLKOUT DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı? DEFINE LCD_DBIT 0 'LCD data bacakları hangi bitten başlıyor? DEFINE LCD_RSREG PORTA 'LCD RS Bacağı Hangi Porta bağlı ? DEFINE LCD_RSBIT 3 'LCD RS bacağı Hangi Bite bağlı ? 'define lcd_RWREG PORTB 'define LC_RWBIT 2 DEFINE LCD_EREG PORTA 'LCD Enable Bacağı Hangi Porta bağlı? DEFINE LCD_EBIT 4 'LCD Enable Bacağı Hangi bite bağlı ? DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı? DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor DEFINE SHIFT_PAUSEUS 3500 'shift komutunda gecikme süresi PORTA=0 'PORTA yı sıfırladık PORTB=240 'PortB=%11110000 = 240 yapıldı TRISA=%11100100 'A portu giriş çıkış düzenlemesi yapıldı TRISB=0 'B portu tamamı çıkış olarak ayarlandı CMCON=7 'komparatörler iptal edildi '--------------kullanılan değişkenlerimiz ------------ DATA_BIR var byte DATA_IKI var BYTE DATA_UC VAR BYTE DATA_DORT VAR BYTE DATA_BES VAR BYTE FREKANS VAR WORD FREQ VAR WORD PLL VAR WORD TEMP VAR word SES VAR BYTE VOL VAR BYTE SAYI VAR BYTE VERI3 VAR BYTE Z VAR BYTE I VAR BYTE TEST VAR BYTE SIRA VAR BYTE SISTEM VAR BIT YON VAR BIT POZ VAR BIT ACIK CON 1 'ACIK=1 yapıldı sabit değer değişmez KAPALI CON 0 'KAPALI=0 yapıldı sabit değer değişmez symbol DTA =PORTA.0 'I2C DATA PİNİ SYMBOL CLK =PORTA.1 'I2C CLK PİNİ SYMBOL ILERI =PORTA.6 'YUKARI TARAMA TUSU SYMBOL GERI =PORTA.7 'AŞAĞI TARAMA TUSU SYMBOL SES_AC =PORTA.5 'SES AÇMA TUSU SYMBOL SES_KAPA=PORTA.2 'SES KAPATMA TUSU SES=5 'default ses değeri DTA=1 'Radyo modülü data hattı=1 yapıldı CLK=0 ' Radyo modülü CLK hattı=0 yapıldı GOSUB STOP_VER 'Radyo modülüğne STOP bilgisi verildi GOSUB STOP_VER 'emniyet için tekrar stop bilgisi verildi GOSUB STOP_VER 'emniyet için tekrar stop bilgisi verildi POZ=1 '1=HIGHSIDE TARAMA , 0=LOW SIDE TARAMA frekans=8700 'default açılış frekansı 88 MHz olarak verildi FREQ=FREKANS:GOSUB EKRAN gosub hesap gosub UP_SCAN BASLA: if ILERI =0 then 'şayet tarama_ileri tuşuna basılmış ise FREKANS=frekans+5 IF FREKANS>10800 THEN FREKANS=10800 IF POZ=1 THEN GOSUB HIGHSIDE ELSE GOSUB LOWSIDE ENDIF TEST=TEST+1 'Otomatik bant sonuna gitme için test değerini bir artır IF TEST>6 THEN pll=13211 'ileri tuşuna hala basılı tutyor isek pll=bant sonu değeri DATA_BIR=PLL.BYTE1+$50 '1 nolu data registerine PLL değerini ve $C0 değerini DATA_IKI=PLL.BYTE0 'iki nolu data registerine PLL low bayt'ını yükle gosub UP_SCAN 'yüklenen değeri radyoya ver ve ilgili frekansı çaldır gosub ISTASYON 'İstasyon bulundumu bak GOTO CIK 'CIK etiketine git. ENDIF IF GERI=0 then 'şayet geri tarama tuşuna basılmış ise FREKANS=FREKANS-5 IF FREKANS<8700 then FREKANS=8700 IF POZ=1 THEN GOSUB HIGHSIDE ELSE GOSUB LOWSIDE ENDIF TEST=TEST+1 'tuşa hala basılı ise test değerini bir artır IF TEST>6 THEN PLL=10653 'hala basılı ise otomatik bant sonu değerini al DATA_BIR=PLL.BYTE1+$50 'data registerlerine yükle DATA_IKI=PLL.BYTE0 gosub DWN_SCAN 'geri tarama bölümüne git ve değerleri modüle yükle gosub ISTASYON 'istasyon bulundumu bak GOTO CIK 'CIK etiketine git. endif TEST=0 'şayet ileri ve geri tuşlarına basılmıyor ise Test=0 yap CIK: GOSUB SES_BAK 'ses değeri artırılıyormu git bak GOTO BASLA 'aynı işlemleri için başa git. UP_SCAN: 'İleri tarama alt programı YON=0 gosub START_VER 'Radyo modülüne start komutunu ver ShiftOut dta,clk,1,[$C0] ' Modüle Yazma yapılacağını bildir mute iptal olursa $40 verilecek GOSUB ACK_AL 'Byte yazıldı teyid (ACK) al. ShiftOut dta,clk,1,[DATA_BIR] ' Data-1 gönderildi GOSUB ACK_AL 'Byte gönderildi teyidini al ShiftOut dta,clk,1,[DATA_IKI] ' Data-2 gönderildi GOSUB ACK_AL 'Byte gönderildi teyidini al IF POZ=1 THEN VERI3=$D0 'HIGHSIDE ELSE VERI3=$C0 'LOWSIDE ENDIF ShiftOut dta,clk,1,[VERI3] ' Data-3 gönderildi B0=LOW A0 - D0=Mid C0 -F0=HIGH E0 GOSUB ACK_AL 'Byte gönderildi teyidini al & 1011 0000 ShiftOut dta,clk,1,[$11] ' Data-4 gönderildi GOSUB ACK_AL 'Byte gönderildi teyidini al ShiftOut dta,clk,1,[$00] ' Data-5 gönderildi ' GOSUB ACK_AL 'son bölümde teyid almaya gerek yok artık gosub STOP_VER 'işlem tamam modüle stop bilgisini ver return 'geri dön. ACK_AL: Input dta ' DATA hatı giriş olarak ayarlandı , ack alınacak While dta=1 'ack=1 ise sıfır oluncaya kadar bekle Wend PulsOut clk,1 ' bu konuma ack alınınca geçilir, ack alındı bir clk palsi gönder RETURN ACK_VER: OUTPUT DTA 'DATA hattı çıkış olarak ayarlandı ACK gönderilecek LOW DTA 'DATA hattı LOW a çekildi HIGH CLK 'CLK High yapıldı LOW CLK 'CLK low yapıldı yani bir pals verilmiş oldu HIGH DTA 'DATA hattı HIGH yapıldı return 'ACK verilmesi tamamlandı geri dön. ISTASYON: pause 50 GOSUB RADYO_OKU LCDOUT $fe,$80,dec1 DATA_BIR.7 IF DATA_BIR.7=1 then PLL.byte1=DATA_BIR & %00111111 PLL.Byte0=DATA_IKI PLL=(PLL/10)*10 IF POZ=0 then TEMP=PLL+28 else TEMP=PLL-28 ENDIF TEMP=TEMP*1024 freq=div32 1250 freq=(freq/10)*10 ' freq=freq+5 ' temp=freq dig 0 ' temp=(temp/5)*5 ' freq=(freq/10)*10+temp DATA_BIR=PLL.BYTE1 DATA_IKI=PLL.BYTE0 If yon=0 then GOSUB UP_SCAN GOTO ATLA ENDIF GOSUB DWN_SCAN 'şayet geri tarama modunda isek ATLA: 'geri tarama değerleri module yazıldı GOSUB EKRAN frekans=freq RETURN endif goto ISTASYON 'istasyon henüz bulunmadı tekrar bak EKRAN: LCDOUT $FE,$81," ",DEC FREq/100,",",DEC2 (FREq//100)," MHz " LCDOUT $FE,$8F,dec poz 'poz=1 ise HIGH side Poz=0 ise LOW side tarama yapılıyor lcdout $fe,$c7," PL:",dec5 PLL RETURN RADYO_OKU: gosub START_VER 'okuma için modüle start ver ShiftOut dta,clk,1,[$C1] ' okuma emri modüle gönderildi GOSUB ACK_AL 'ACK yani teyid al. GOSUB BYTEAL:DATA_BIR=SAYI 'ilk byte modülden alındı GOSUB ACK_VER 'aldığının teyidini ver GOSUB BYTEAL:DATA_IKI=SAYI 'ikinci byte alındı GOSUB ACK_VER 'aldığının teyidini ver GOSUB BYTEAL:DATA_UC=SAYI 'üçüncü byte alındı GOSUB ACK_VER 'aldığının teyidini ver GOSUB BYTEAL:DATA_DORT=SAYI 'dördüncü byte alındı GOSUB ACK_VER 'aldığının teyidini ver GOSUB BYTEAL:DATA_BES=SAYI 'beşinci byte alındı ' GOSUB ACK_VER 'son byte için teyid vermeye gerek yok GOSUB STOP_VER 'işlem sona erdi stop komutunu ver. pause 50 RETURN DWN_SCAN: YON=1 'yon=1 geri tarama yapılıyor gosub START_VER 'start komutunu ver ShiftOut dta,clk,1,[$C0] ' yazma yapılacak komut verildi GOSUB ACK_AL 'byte yazıldı ack al. ShiftOut dta,clk,1,[data_bir] ' Data-1 gönderildi GOSUB ACK_AL 'byte yazıldı ack al. ShiftOut dta,clk,1,[data_iki] ' Data-2 gönderildi GOSUB ACK_AL 'byte yazıldı ack al. IF POZ=1 THEN 'HIGHSIDE VERI3=$50 ELSE VERI3=$40 ENDIF ShiftOut dta,clk,1,[VERI3] ' Data-3 gönderildi $20=Low - $40=Mid - $60=High GOSUB ACK_AL 'byte yazıldı ack al. ShiftOut dta,clk,1,[$11] ' Data-4 gönderildi GOSUB ACK_AL 'byte yazıldı ack al. ShiftOut dta,clk,1,[$00] ' Data-4 gönderildi ' GOSUB ACK_AL 'son bölümde teyid almaya gerek yok artık gosub STOP_VER 'işlem tamam stop komutu ver. return START_VER: HIGH CLK HIGH DTA LOW DTA LOW CLK HIGH DTA RETURN STOP_VER: low dta high CLK HIGH DTA RETURN SES_BAK: IF SES_AC=0 then SES=SES+1 IF SES=16 then SES=15 PAUSE 230 endif IF SES_KAPA=0 then SES=SES-1 IF SES=255 THEN SES=0 PAUSE 230 endIF VOL=ses<<4 PORTB=VOL 'pic in bacaklarına bağlı olarak 4066 ya değer gönder lcdout $fe,$C0,"Ses:",dec2 (15-ses) ' lcdout $FE,$C0,rep $FF(16-SES),rep 32ses RETURN HESAP: ARA: temp=FREKANS *1250 pll=div32 1024 IF POZ=1 THEN pll=pll+28 else pll=pll-28 endif DATA_BIR=PLL.BYTE1 DATA_IKI=PLL.BYTE0 gosub ekran PAUSE 10 RETURN GERIYE: goto ara BYTEAL: 'bit bazında radyo modülünden bilgi almak için yazıldı Z=128:SAYI=0 'sayı=0 ve karşılaştırma bit değeri 128 input DTA 'Data hattı giriş olarak ayarlandı FOR I=0 to 7 '0-7 arasında toplam 8 adet döngü kur HIGH CLK ' CLK=High yapıldı if dta=1 then SAYI=SAYI | Z 'Data hattı 1 ise Sayının Z bitini high yap LOW CLK 'clk low yapıldı Z=Z>>1 'bir sonraki bite geç NEXT output dta 'data hattı yeniden çıkış olarak ayarlandı HIGH DTA 'data hattı High yapıldı RETURN HIGHSIDE: temp=FREKANS *1250 pll=div32 1024 pll=pll+28 return LOWSIDE: temp=FREKANS *1250 pll=div32 1024 pll=pll-28 return
Sistemin Radyo alıcı katı Phillips firmasının üretmiş olduğu TEA5767 entegresine dayanmaktadır. Söz konusu entegre asgari malzemelr kullanılarak bir modül haline getirilmiş ve ve bu sistemde bu modül kullanılmıştır.
Söz konusu entegre hem I2C hemde SPI modunda haberleşme yapabilmekte olup ben SPI modunu kullandım.
Piyasada bulunabilecek en kaliteli digital radyolarda ne özellik var ise hepsini barındırmaktadır.
Vermiş olduğum projede ben hem yer darlığı hem seçtiğim işlemci nedeni ile kısıtlı imkanlarını kullandım. Projemde yalnızca sağa sola otomatik tarama yapmakta sistem. Uzun basılınca bant sonuna atlamaktadır.
Bu modül ile aşağıdaki işlemleri yaptırmak mümkündür;
1. Tuş takımından girilen bir frekans değerini çaldırmak
2. Bulunan istasyonları otomatik Ya da manuel kayda almak. 1-10 arası butonlarınız olursa ve bu butonların herhangi birisine 5 sn den fazla basarsanız istasyon otomatik kayda alınabilir. Daha sonra bu tuşa kısa basılarak o istasyonun çaldırılması sağlanabilir.
3. Bir tarafa doğru zayıf istasyonları diğer tarafa doğru yalnızca kuvvetli istasyonları bulması sağlanabilir.
Şimdilik aklıma gelenler bunlar. Entegrenin data sheeti incelenerek diğer özellikler hakkında bilgi alabilirsiniz.
Devrede TDA7056 entegresini amplifikatör olarak kullandım. Bu entegre voltaj kontrollü olarak volum kontrolü imkanı sağlamaktadır. Voltaj kontrolünü 4066 entegresi ile gerilim bölerek hallettim. Tabiiki devrem yalnızca Mono çalışıyor. Modül stereo çalışmakta olup ben iki kanalı birer kondansatörle birleştirerek mono anfiye giriş yaptım. İstenirse devre stereo olarak dizayn edilebilir.
Anfi olarak benzer şekilde çalışan modeller bulunmakta olup buna bağlı olarak daha değişik güçte ve özellikte sistemler kullanılabilir.
Şu anda devre yalnızca buton kontrollü volüm ayarı ile yine buton kontrollü istasyon bulma özelliğine sahiptir.
Modül tabiiki yurt dışından alınması gerekiyor. Bu konuda bir Kanada firmasını buldum ve onlardan 10 adet modül aldım. Ancak Birkaç kişiye radyo yaptım ve elimde yalnızca 4 adet modül kaldı. İsteyenlere verebilirim . Bana maliyeti 9 küsür Tl yi buldu. Bende tanesini 10 TL ye veriyorum.
Çin de bu modülleri daha ucuza bulmak mümkün hatta 1-2 dolara bulmak mümkün ancak miktarlı alımlarda bu fiyatı uyguluyorlar. Bir başka firma ile temasım sürüyor. Normalde 1000 adet den az sipariş kabul etmiyorlar. Ancak firma yetkilisi Bay Johnson ile görüştüm ve amatörler için min. 10 adetlik siparişleri kabul edebilecek. Ödeme Paypal ile yapılıyor sevkiyat posta yolu ile olunca ucuza gelebilecek.
Firma web sayfası; http://www.szblessed.com/English/index.asp
Firmada temas halinde olduğum Bay Johnson var. Kendisine ismimi (Erol Tahir Erdal) verirseniz az miktar konusunda yardımcı olacaktır. Bay Johnson un mail adresi ; sales_tj@sohu.com
Diğer taraftan pek çok telefon üreticisi bu modülü kullanarak FM radyolu telefonda yapmaktadır. Bu nedenle hurdaya çıkmış radyolu telefonların içinde söz konusu radyoyu bulabilirsiniz.
Neyse dosyalar ilişiktedir. Bu devreden bir kaç tane yaptım. Şu anda kullanıyorum. Çalışmıyor diye bana lütfen geri dönmeyin. Kesin çalışıyor.
TEA5767 Dijital PLL kontrollü FM Radyo Alıcı projesine ait proteus isis simülasyon dosyası ve kaynak picbasic pro kod dosyaları: tea5767-pic16f628-dijital-pll-kontrollu-fm-radyo-alici-sistemi.ZIP
devrenin PCB sini ve yerleşme planını ayrıca Word dosyası içinde veriyorum. orda yer alan PCB 1/1 ölçeğindedir ve direk basılarak PCB yapılabilir.
Not: Modül E-Bay da yeniden satılıyormuş. aşağıda linki veriyorum.
http://shop.ebay.com/i.html?_nkw=tea5767&_sacat=0&_odkw=tea5767+modul&_osacat=0&_trksid=p3286.c0.m270.l1313
Hepsi bu kadar. Yapacaklara şimdiden başarılar temenni ederim.
ETE
Yazar: Ete
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 23 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; Ete















Buradaki LCD modeli yerine (LM016L)
elimde bulunan HY-1602B3 LCD kullanabilir miyim bağlantı sorunu olur mu?
bağlantıları doğru şekilde yaparsanız sorun olmaz,ben 4×20 lcd kullanmıştım.
merhaba..bu switchler butonları malzemecilerden ne diyerek isteyeceğiz? özel bir türü var mı
Hiç birisi özel değildir. Tipi şekli hoşunuza giden her türlü buton kullanılabilir.
Ete
87MHz den cızırtı geliyor hafiften ses de geliyor ama o frekansı degiştiremiyorum buton olarak bildiğimiz anahtar kullandım sorun ondan mı kaynaklı ki ? ..Potansiyemetre kullansam sorun kalkar mı.. ? hangi tip pot kullanmalıyım eğer kullanmak zorundaysam burada buton yok çünkü
87 MHz de cızırtı gelmesi normal çünki orada bir istasyon olmaz. Anahtar ile olabilir ama hassas ayarlama yapamazsın. Bas bırak çalışan buton olması gerekir. Orada yoksa olan br yerden temin etmen gerekir.
Potansiyometre ile olmaz hemde hiç olmaz.
Ete
merhaba sayın ete,
bu işte gerçekten çok başarılısınız, sizi yürekten kutlarım.
aşağıdaki projemde yardımcı olabilirmisiniz?
bir basınç sensöründen 0,50 ile 4,2 volt arasında sinyal geliyor. aşağıdaki algoritma ile sinyallerde değişiklik yapmak istiyorum:
0,50 – 1,35 arası gelen voltlar -%1,5 volt alarak,
1,35 – 2,50 arası gelen voltlar +%1,5 volt olarak,
2,50 – 3,80 arası gelen voltlar +%2,5 volt olarak sisteme modifiye ederek bildirmek istiyorum. (modifiyeli verilen volt asla 4 voltu geçmeyecek) böyle bir devre pic + frekans/gerilim çevirici ile yapılabilir mi? bana nasıl yardımcı olabilirsiniz? (özellikle pic programlama da yardıma ihtiyacım var)
teşekkür ederim.
Ertan
sayın ete
devre için çok teşekkür ederim ama sizden bir ricam olacak bana devrenin çalışma mantığı lazım yardımcı olabilir misiniz?
şimdiden teşekkürler
Devrenin çalışma mantığı devreye bakılarak anlaşılabilir aslında. Bende devreye tekrar bakarak yazacağım.
>Devrede 1 adet FM modül, 1 adet Anfi entegresi ve 1 adet Pic işlemci ile 1 adet 4066 analog siwtch entegre bulunmaktadır.
FM modül üzerinde PLL entegresi ile komle bir modül olup verilen frekans değerlerine uygun olarak ilgili frekansa kilitlenip o frekanstaki istasyonunu anfiye aktarırı. Pic işlemci FM modülün istediği istasyon frekans bilgilerini üretir ve modül ile haberleşerek bu bilgileri modüle aktarır. Aynı zamanda buton kontrollerini yapar. Yine aynı işlemci 4066 entegresine 4 bitlik binary bilgi vererek bu entegrenin anfi üzerinden ses seviyesini ayarlamasını sağlar. Ses seviyesi R-2R sistemi ile oluşturulan digital to Analog dönüştürme sistemi ile oluşturulmaktadır. Yaklaşık olarak 0-2,3V civarında bir volum kontrol voltajı oluşturulur. Toplamda 4 bitlik bilginin 16 ayrı ses seviyesi vardır ve bu sistem üzerinden ğretilerek anfi volum kontrol girişine verilmiştir.
Anfi Phillips firmasının voltaj kontrollü volum kontrolü olan bir entegresidir. Yaklaşık 1 watt gücünde bir anfidir. Modülden gelen ses bilgisini yükselterek hoparlöre aktarır.
Bu şekilde sistem bir digital rodayo olarak çalışmaktadır.
Ete