avatar_ete

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

Başlatan ete, 28 Ağustos 2011, 14:14:12

ete

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.









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_NOCLKOUTDEFINE 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     2DEFINE 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 yazabiliyorDEFINE SHIFT_PAUSEUS 3500 'shift komutunda gecikme süresiPORTA=0                     'PORTA yı sıfırladıkPORTB=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 byteDATA_IKI  var BYTEDATA_UC   VAR BYTEDATA_DORT VAR BYTEDATA_BES  VAR BYTEFREKANS   VAR WORDFREQ      VAR WORDPLL       VAR WORDTEMP      VAR wordSES       VAR BYTEVOL       VAR BYTESAYI      VAR BYTEVERI3     VAR BYTEZ         VAR BYTEI         VAR BYTETEST      VAR BYTESIRA      VAR BYTESISTEM    VAR BITYON       VAR BITPOZ       VAR BITACIK      CON 1   'ACIK=1 yapıldı sabit değer değişmezKAPALI    CON 0   'KAPALI=0 yapıldı sabit değer değişmezsymbol DTA     =PORTA.0  'I2C DATA PİNİSYMBOL CLK     =PORTA.1  'I2C CLK PİNİSYMBOL ILERI   =PORTA.6 'YUKARI TARAMA TUSUSYMBOL GERI    =PORTA.7 'AŞAĞI TARAMA TUSUSYMBOL SES_AC  =PORTA.5  'SES AÇMA TUSUSYMBOL SES_KAPA=PORTA.2 'SES KAPATMA TUSUSES=5  'default ses değeriDTA=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 verildiGOSUB STOP_VER  'emniyet için tekrar stop bilgisi verildiGOSUB STOP_VER  'emniyet için tekrar stop bilgisi verildiPOZ=1 '1=HIGHSIDE TARAMA  , 0=LOW SIDE TARAMAfrekans=8700 'default açılış frekansı 88 MHz olarak verildiFREQ=FREKANS:GOSUB EKRANgosub hesapgosub UP_SCANBASLA:if ILERI =0 then  'şayet tarama_ileri tuşuna basılmış iseFREKANS=frekans+5IF FREKANS>10800 THEN FREKANS=10800IF POZ=1 THENGOSUB HIGHSIDEELSEGOSUB LOWSIDEENDIFTEST=TEST+1 'Otomatik bant sonuna gitme için test değerini bir artırIF TEST>6 THEN pll=13211 'ileri tuşuna hala basılı tutyor isek pll=bant sonu değeriDATA_BIR=PLL.BYTE1+$50 '1 nolu data registerine PLL değerini ve $C0 değeriniDATA_IKI=PLL.BYTE0  'iki nolu data registerine PLL low bayt'ını yüklegosub UP_SCAN 'yüklenen değeri radyoya ver ve ilgili frekansı çaldırgosub ISTASYON 'İstasyon bulundumu bakGOTO CIK  'CIK etiketine git.ENDIFIF GERI=0 then 'şayet geri tarama tuşuna basılmış iseFREKANS=FREKANS-5IF 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 alDATA_BIR=PLL.BYTE1+$50 'data registerlerine yükleDATA_IKI=PLL.BYTE0gosub DWN_SCAN 'geri tarama bölümüne git ve değerleri modüle yüklegosub ISTASYON           'istasyon bulundumu bakGOTO CIK  'CIK etiketine git.endifTEST=0                     'şayet ileri ve geri tuşlarına basılmıyor ise Test=0 yapCIK:    GOSUB SES_BAK 'ses değeri artırılıyormu git bakGOTO BASLA 'aynı işlemleri için başa git.UP_SCAN:  'İleri tarama alt programıYON=0gosub START_VER  'Radyo modülüne start komutunu verShiftOut dta,clk,1,[$C0] ' Modüle Yazma yapılacağını bildir  mute iptal olursa $40 verilecekGOSUB ACK_AL 'Byte yazıldı teyid (ACK) al.ShiftOut dta,clk,1,[DATA_BIR] ' Data-1 gönderildiGOSUB ACK_AL  'Byte gönderildi teyidini alShiftOut dta,clk,1,[DATA_IKI] ' Data-2 gönderildiGOSUB ACK_AL 'Byte gönderildi teyidini alIF POZ=1 THENVERI3=$D0   'HIGHSIDEELSEVERI3=$C0   'LOWSIDEENDIFShiftOut dta,clk,1,[VERI3] ' Data-3 gönderildi B0=LOW A0 - D0=Mid C0 -F0=HIGH E0GOSUB ACK_AL 'Byte gönderildi teyidini al  & 1011 0000ShiftOut dta,clk,1,[$11] ' Data-4 gönderildiGOSUB ACK_AL 'Byte gönderildi teyidini alShiftOut dta,clk,1,[$00] ' Data-5 gönderildi'        GOSUB ACK_AL 'son bölümde teyid almaya gerek yok artıkgosub STOP_VER 'işlem tamam modüle stop bilgisini verreturn  'geri dön.ACK_AL:Input dta ' DATA hatı giriş olarak ayarlandı , ack alınacakWhile dta=1 'ack=1 ise sıfır oluncaya kadar bekleWendPulsOut clk,1 ' bu konuma ack alınınca geçilir, ack alındı bir clk palsi gönderRETURNACK_VER:OUTPUT DTA  'DATA hattı çıkış olarak ayarlandı ACK gönderilecekLOW DTA 'DATA hattı LOW a çekildiHIGH CLK 'CLK High yapıldıLOW CLK 'CLK low yapıldı yani bir pals verilmiş olduHIGH DTA 'DATA hattı HIGH yapıldıreturn 'ACK verilmesi tamamlandı geri dön.ISTASYON:pause 50GOSUB RADYO_OKULCDOUT $fe,$80,dec1 DATA_BIR.7IF DATA_BIR.7=1 thenPLL.byte1=DATA_BIR & %00111111PLL.Byte0=DATA_IKIPLL=(PLL/10)*10IF POZ=0 thenTEMP=PLL+28elseTEMP=PLL-28ENDIFTEMP=TEMP*1024freq=div32 1250freq=(freq/10)*10'               freq=freq+5'               temp=freq dig 0'               temp=(temp/5)*5'               freq=(freq/10)*10+tempDATA_BIR=PLL.BYTE1DATA_IKI=PLL.BYTE0If yon=0 thenGOSUB UP_SCANGOTO ATLAENDIFGOSUB DWN_SCAN 'şayet geri tarama modunda isekATLA:  'geri tarama değerleri module yazıldıGOSUB EKRANfrekans=freqRETURNendifgoto ISTASYON 'istasyon henüz bulunmadı tekrar bakEKRAN: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ıyorlcdout $fe,$c7," PL:",dec5 PLLRETURNRADYO_OKU:gosub START_VER  'okuma için modüle start verShiftOut dta,clk,1,[$C1] ' okuma emri modüle gönderildiGOSUB ACK_AL 'ACK yani teyid al.GOSUB BYTEAL:DATA_BIR=SAYI  'ilk byte modülden alındıGOSUB ACK_VER  'aldığının teyidini verGOSUB BYTEAL:DATA_IKI=SAYI     'ikinci byte alındıGOSUB ACK_VER 'aldığının teyidini verGOSUB BYTEAL:DATA_UC=SAYI  'üçüncü byte alındıGOSUB ACK_VER 'aldığının teyidini verGOSUB BYTEAL:DATA_DORT=SAYI   'dördüncü byte alındıGOSUB ACK_VER  'aldığının teyidini verGOSUB BYTEAL:DATA_BES=SAYI  'beşinci byte alındı'          GOSUB ACK_VER 'son byte için teyid vermeye gerek yokGOSUB STOP_VER  'işlem sona erdi stop komutunu ver.pause 50RETURNDWN_SCAN:YON=1 'yon=1 geri tarama yapılıyorgosub START_VER 'start komutunu verShiftOut  dta,clk,1,[$C0] ' yazma yapılacak komut verildiGOSUB ACK_AL 'byte yazıldı ack al.ShiftOut  dta,clk,1,[data_bir] ' Data-1 gönderildiGOSUB ACK_AL 'byte yazıldı ack al.ShiftOut  dta,clk,1,[data_iki] ' Data-2 gönderildiGOSUB ACK_AL 'byte yazıldı ack al.IF POZ=1 THEN 'HIGHSIDEVERI3=$50ELSEVERI3=$40ENDIFShiftOut dta,clk,1,[VERI3] ' Data-3 gönderildi $20=Low - $40=Mid - $60=HighGOSUB ACK_AL                   'byte yazıldı ack al. ShiftOut  dta,clk,1,[$11] ' Data-4 gönderildiGOSUB 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ıkgosub STOP_VER 'işlem tamam stop komutu ver.returnSTART_VER:HIGH CLKHIGH DTALOW DTALOW CLKHIGH DTARETURNSTOP_VER:low dtahigh CLKHIGH DTARETURNSES_BAK:IF SES_AC=0 thenSES=SES+1IF SES=16 then SES=15PAUSE 230endifIF SES_KAPA=0 thenSES=SES-1IF SES=255 THEN SES=0PAUSE 230endIFVOL=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çNEXToutput dta 'data hattı yeniden çıkış olarak ayarlandıHIGH DTA  'data hattı High yapıldıRETURNHIGHSIDE:temp=FREKANS *1250pll=div32 1024pll=pll+28returnLOWSIDE:temp=FREKANS *1250pll=div32 1024pll=pll-28return


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.

ete

Programın yeni versiyonu ilişikteki dosya içindedir.

Ete

rercan

hocam ben bu programı 16f877 ye içinde ses kontrol entegresini calıştıran bi programa dahil etmek istiyorum. calışması şöyle menü olacak tuşa bastıgımda radyo ya tuşa ikinci defa bastıgımda  pc ye geçecek.  sizin komutları inceledigimde kafam baya karıştı . epey bi gosub var. ses yükseltme alcaltmayı   devreden cıkartıp direk baglantı saglasamsizin kodların içersinden hangi ses satırlarını cıkarmalıyım. yada amfi katını iptal etsek , kodlardan anladıgım kadarıyla sürekli bi default degeri var sanırım ?

yada başka bir çözüm oalrak kabaca programın işleyişinden bahseder misiniz  ?  kanal atlamayı nasıl saglayabiliriz. modülden veri okumayı nerede kullanabiliriz ? 

yardımcı olursanız memnun olurum :)

ete

Bir sürü soru ile neredeyse bütün programın nasıl çalıştığını sormuşsun. Bunu anlatmam için buraya 2 sayfa yazı yazmam lazım.
Yalnızca ses kısmını iptal edecek isen programda
CIK:    GOSUB SES_BAK
şeklinde bir satır var. O kısmı kaldırırsan ses iptal olur sen kendi ses devrenle kontrolü yaparın.
Kartın zerine anfi yi monte etmeyeceksin. Orada sağ kanal ve sol kanal anfi girişleri mevcut. Bu girişleri kullanarak kendi anfine giriş yaparsın.
Anfinin ses kontrolünüde kendin ayarlayacaksın artık.

Sıkıştığın yerde her şeyi değil yalnızca spesifik bir şeyi sorman gerekki cevaplayabileyim değilse masal anlatır gibi anlatmak lazım. Zaten program sana anlatmıyorsa benim anlatmamlada anlamazzsın diye düşünüyorum. Biraz daha incele progamı bence.

Ete




sensiz96

hocam baskı devrenin boyu kaç cm , olduğu gibi yazdırıp plakete çıkarsak sorun olmaz herhalde

ete

PCB plaka boyutu 90x70 mm dir.
Olduğu gibi yazdırlacak boyut DOC uzantılı dosyada mevcut zaten.
Yazılanları iyi okuyun lütfen.

Ete


ete

Bana kalırsa ikiside olmaz. En başta fiyatları nedeni ile olmaz.
Lazımsa ben vereyim modül. Elimde var bir kaç tane.

Ete

MS_59

hocam iyi akşamlar bu modülden bende istiyorum eğer elinizde fazladan varsa
mehmet

ete

Elimde verebilecğim 4 adet modül mevcut. Kim ne istiyor ise özel mesaj atsın.

Ete

MS_59

hocam modülün beslemesine lm317 (elimde şuan yok onun) yerine diyot koyup voltajı  düşürürsem modüle zarar verirmiyim 1N4148 koyup denedim 4.36volt'kadar düştü radyo çalıştı ama fazla çalıştırmadım ne olur ne olma diye
mehmet

ete

Modül nomalde 5v ta kadar çalışıyor ama maksimum limit olduğu için ben ortadan bir değer alıp yapmıştım.
2 diyotla 4V civarına düşür daha emniyetli olur.

Ete

MS_59

mehmet

MS_59

hocam bu devreyi stereo çıkışlı yapmak istiyorum TDA7056A yerine TDA7057AQ takıcam yalnız DC volume control'leri farklı TDA7056'nın 5nolu pinine bağlanan ucu TDA7057nin 1 ve 7 nolu pinine bağlasam sorun olurmu?
mehmet

ete

İki anfininde karekterleri bir birine çok yakınç Bir sorun olacağını sanmam.

Denemekte yarar var. SOnucu yazarsın buraya.
Ben PCB üzerinde her iki kanalı birer kondansatörle anfi girişinde birleştirmiştim.
Sen onları ayırman gerekecek. Her bir kanal çıkışını direk anfiye yine bir kondansatörle girmen gerekiyor.

Ete


Powered by EzPortal