avatar_ete

Frekansmetre

Başlatan ete, 04 Eylül 2011, 19:16:35

cevat

Evet hocam,
Yanlış anlama var. Yazımı düzeltiyorum.

İyi çalışmalar, kolay gelsin...

rayman

Bu gibi hassas devreler  , rahatlıkla Enterferans'a sebep olabilir. Ve metal kasa içerisinde monte edilmelidir. Bundan ziyada beslemedeki en ufak bir paraz sistemin dengesiz çalışmasına sebep olabilir. Ki devre 2 ayrı karttan yapılmış. Zamanım olsa , Sprint Lay6.'da çift taraflı komple çizim yapacağım.

Hattuşa

slm ete hocam,
yine saçma sapan bir proje ile karşınızdayım, hocam sizden yardım almak için rahatsız ediyorum.
aşağıya resmini ve isis dosyasını eklediğim şemaya göre, 6 adet farklı çıkışları olan bir kare dalga frekansım var, bu frekanslar bir bobinden gelmektedir ve 500 hz, 1kz,2,5khz,5khz, 7,5 khz ve max. 10 khz lik bir frekanstır. bu frekanslar bobinden gelirken duty ve cycle oranları farklılık gösteriyor. istediğim bu gelen frekansın frekans değerini ölçümlemek ve özellikle duty değerini tespit etmek istiyorum.
ben şöyle düşündüm. ve maalesef tam başarılı olamadım.
INT0 girişinden yükselen kenarı kayalayıp, timer1 ile kenarın düşüşüne kadar saydırdım ve benim duty oranım oldu, ama frekansı belirleyemedim. aslında duty oranını da pek sağlıklı olarak ölçümleyemedim. zira timer1 int0 interruptunun altında çalışmıyor veya çalıştıramadım. int0 da bir etkiket koyup ana döngüde 100 kez int0 kesmesi oluşturup, if portb.0 =0 oluncaya kadar tmr1 i say dedim ama yeterli hassasiyeti yakalayamadım.ayrıca frekansıda ölçümleyemedim.

hocam önerilerinizi bekliyorum



ete

Duty denilen şey frekansın HIGH peryodu olduğuna göre, B0 kesmesini öne yükselen kenarda oluşacak şekilde ayarlarım.
T1CON registerinden TMR1 sayacınıda 1/1 bölme oranı ile sayacak şekilde ayarlarım ancak aktif etmem.
Kesme oluşunca TMR1 sayacını sıfırlarım ve sayacı saydırmaya başlarım. Kesmeden çıkmadan önce de kesmeyi düşen kenara çeviririm (TOGGLE OPTION_REG.6) böylece HIGH peryodu bitince yeniden kesme oluşur. Bu kesme oluştuğunda TMR1 sayaç değerini alırsam bana otomatikman (4Mhz de) HIGH süresini vermiş olacaktır.
İşte bu senin DUTY değerindir. Süre olarak tabiiki. Bu değeri ne amaçla kullanacağına bağlı olarak low süresinide ölçerek buradan frekansa geçebilir ve gerekirse %duty değeride hesaplayabilirsin.

Ete

Hattuşa

#19
ete hocam

GIE =1
On_Hardware_Interrupt GoTo KeSMe
MaIn:
While TuT =1
TuT =0
GIE =0
For X =0 To 49
    For Y =(X +1) To 50
    If D[X] >D[Y] Then
    TeMp =D[X]
    D[X] =D[Y]
    D[Y] =TeMp
    EndIf
    Next
    Next
SoNuC =(D[20] +D[21] +D[22] +D[23] +D[24] +D[25] +D[26] +D[27] +D[28] +D[29]) /10
Print At 1,6,Dec SoNuC,"    "

GIE =1
Wend
GoTo MaIn




KeSMe:
        Context Save
       
        SaYaC.Byte1 =TMR1H
        SaYaC.Byte0 =TMR1L
        TMR1L =0
        TMR1H =0
        TMR1ON =1
        Inc X
        If X =50 Then TuT =1 :X =0
        D[X] =SaYaC
        Toggle OPTION_REG.6
        INTF =0       
        Context Restore
        Stop


dediğiniz gibi yapmaya çalıştım ama gene başarısız oldum.  :(

şimdi ;
KeSMe:
        Context Save
       
        SaYaC.Byte1 =TMR1H                                'yükselen kenardan düşen kenara geçtiğinde tmr1 değerlerini değişkene attım
        SaYaC.Byte0 =TMR1L
        TMR1L =0                                                   'tmr1l değerini sıfırladım
        TMR1H =0                                                  'tmr1h değerini sıfırladım
        TMR1ON =1                                               'tmr1 i aktif ettim.
        Inc X                                                          'burada bir sayaç çalıştırıp bu sayaçla okuduğum değerleri tutmaya çalıştım 50 adet
        If X =50 Then TuT =1 :X =0
        D[X] =SaYaC
        Toggle OPTION_REG.6                               'söylediğiniz gibi kesmenin kenar bitini yer değiştirdim.
        INTF =0                                                      'int kesmesinin bayrağını sıfırladım
        Context Restore
        Stop



hocam bu kesme içinde tut diye bir etiket oluşturup, 50. okumadan sonra ana döngüde tut=1 ise aldığım değerleri hesaplayıp ekrana yazmak için kullandım. ve bu işlemleri yaparkende kesmeyi komple kapatıyorum. işte sorun burda başlıyor, zira 1 kez döngüye giriyor devamında işlemci çakıyor. değeri 1 kez yazıp, işlemciye reset atıyor. acaba sizin söylemek istediğinizi ben nerede yanlış anladım.

ete

İşin içinde bir püf noktası vardı onu açıklamadım. Bakalım bulacakmısın diye merak etmiştim.
Her kesme oluştuğunda TMR1 'i sıfırlarsan bu iş olurmu sence?
Ne zaman sıfırlayacağını blmen gerekiyor.
İşlem sırasını tekrar veriyorum;
- B0 kesmesini yükselen kenarda açarım.  (OPTION_REG.6=1)
- Kesme oluşunca  TMR1 sayacını sıfırlar ve sayacı aktif hale getiririm. Püf noktası burada Şayet OPTION_REG.6=1 ise sayac sıfırlanacak değilse değeri okunacak.
Sayac sıfırlandı ve aktif hale getirildi. Aynı zamanda bir sonraki kesmeyi düşen kenar için ayarlamam gerekir. Çünki HIGH süresini ölçüyoruz. sinyal LOW a düşünce kesme oluştursunki o anda bizde TMR1 değerini alıp bir başka değişkene atayalım.

Püf noktası dediğim şeyne zaman TMR1 değerinin sıfırlanacağını ne zaman TMR1 değerinin okunacağını ayırd edebilmen idi.
Ama sen ne yapın birlikte bakalım.

        SaYaC.Byte1 =TMR1H                                'yükselen kenardan düşen kenara geçtiğinde tmr1 değerlerini değişkene attım
        SaYaC.Byte0 =TMR1L
Buraya kadar sayac değerini okudun neden? daha sayaç kurulmadıki!!!!. yada kesme düşen kenardamı idi acaba? bilmiyorsun çünki bu konuda bir tedbir almadın.
       
        TMR1L =0                                                   'tmr1l değerini sıfırladım
        TMR1H =0                                                  'tmr1h değerini sıfırladım
Sayacı sıfırladın ama hangi kenrda kesme oluşacak belli değil henüz. Burada da aynı şey söz konusu hangi tür kesme oluştuğu belli değil iken sayac sıfırladın.
       
TMR1ON =1                                               'tmr1 i aktif ettim.

Bundan sonra yazılanları anlamsız buluyorum ne işe yarayacaklarını anlamadığım için.

Ben olsam şöyle yazardım;

KeSMe:
        Context Save
        IF OPTION_REG.6=1 THEN       'kesme yükselen kenarda oluşmuş ise!!!!!!!   
           TMR1L =0                                                   'tmr1l değerini sıfırladım
           TMR1H =0                                                  'tmr1h değerini sıfırladım
           TMR1ON =1
           GOTO CIK
       ENDIF
       SaYaC.Byte1 =TMR1H                                'program buraya geliyorsa kesme düşen kenarda oluşmuş demektir.
       SaYaC.Byte0 =TMR1L
       TMR1ON=0
CIK:       
        Toggle OPTION_REG.6                             
        INTF =0                                                   
        Context Restore
        END


Bu işlemler sonucunda , SaYaC değişkeni HIGH süresini taşıyacaktır.
Ekrana yazdırıp görebilirsin.

Hattuşa

 ;D

tamam hocam bi daha ki sefere bir soru sorduğumda aklımda derim. ete hoca ezberci olmamızı engellemek için sınava tabi tutabilir.

hocam mazur görün, bazen 1-2 saat tırmalayıpta başaramayınca önüne ne gelirse saldırıyor insan, tabi hata payı had safhada oluyor. aslında siz bizim böylesi fırtınalı denizde limanımızsınız ya ete hoca nasıl olsa bi şekilde çözecek, koy veriyoruz herşeyi ve dikkati de...

Hattuşa

slm ete hocam;
bir bir devreden frekans ölçümü yapmam gerekiyor, ölçmem gereken max. 200 khz.
en stabil ve sağlıklı olarak hangi tekniği kullanmamı önerirsiniz

ete

Sinyalin seviyesi çok önemli. 0-5v aralığında ise iki sistemde verimli çalışır.
Genlik ölçme işini pek oullanmadım. Benzaman tutup  puls saydırarak yapmıştım.

Ete

Hattuşa

Alıntı yapılan: ete - 12 Mart 2015, 20:32:07
Sinyalin seviyesi çok önemli. 0-5v aralığında ise iki sistemde verimli çalışır.
Genlik ölçme işini pek oullanmadım. Benzaman tutup  puls saydırarak yapmıştım.

Ete

hocam sinyal 4013 e giriyor ve ordan 0-5v luk kare dalga sinyal oluşuyor. yani aralık iyi, yalnız hocam

freq=counter porta.1,100 komutunu verdiğimde 20-30 khz e kadar sağlıklı ölçüm oluyor. yukarıya çıktığında mesela 100khz seviyesinde tam okuyamıyor yada isisde denediğim için öyle zira isisde ekran hatası almamak için işlemci frekansını 4 mhze düşürdüm gerçekte PLL ile 40 mhz e kadar çıksam daha iyi sonuç alırım değil mi hocam?
birde hocam bu counter komutu sonrasında herhangi bir hesap yapmak gerekiyor mu?
200khz de 20000 civarında puls sayacak ya

ete

#25
Yalnızca frekansın 10 bölünmüş halini alacaksın hz olarak. Sen birde 100 e bölersin al sana khz .

Ete

omerserif07

Üstadım merhaba bu frekans etreyi yapmayı düşünüyorum fakat ne592 ve u664 un yerine kullanacak bişi bulamadım siZin yardımınızla ne kullanabilirim teşekkürler

ete

NE592 aşağıdaki linkte var gözüküyor bir sor istersen.

https://karakoyelektronik.com/entegre-opamp/ne592-n8-19172?gclid=EAIaIQobChMI9NHQgv_X6AIVDJ53Ch1n5w2tEAYYASABEgKaMPD_BwE

U664 bir yüksek frekans bölücüsüdür. Şayet 65Khz den daha büyük frekanslar ölçmeyecek isen bu bölücüyü almanada gerek yok.
Ama illa bölücüyüde kullanmak istersen aşağdaki entegreleri araştır. Birinden birini bulabilirsin.
MB 506
U893 BSE
TFK 811S   (Bu entegrede piyasada var gözüküyor ama data sheet'ini bulamadım)
U813 BS

Yüksek frekans bölücüsü yada HIGH FREQUENCY PRESCALER diye aratırsan varsa başka entegreleride görebilirsin. Burada temel amaç yüksek frekansı bölerek işlemcinin okuyabileceği seviyelere getirebilmektir. Örnek vereyim, 1 Gigahz frekansı 100 e bölersek 10 Khzlik bir sinyal elde edersin ve bunuda rahatlıkla işlemci ile ölçebilirsin. Ölçtüğün değeri 100 ile çarparak frekans şudur diyebilirsin. Bu  nedenle herhangi bir yüksek frekans bölücüsü işini görecektir.

İlgilenen olursa devrenin hazır yapılmışıda (kutulanmış) elimde mevcut. İsteyene satarım.
Fiyat 75 TL.
Önceden 2 adet yapmıştım. Birini kullanmıyorum öylece duruyor o nedenle satıyorum.

Ete

omerserif07

Üstat talibim ben ilet yazdım

tamircihasan

#29
merhaba erol hocam yıllar sonra amatör telsizciliğede adım attım ve bu cihazların kalibrasyon ve testi için bir frekansmetre ihtiyacı oldu.

 bende nette frekansmetre araştırmalarımın sonucunda sizin devreyi yapmaya karar verdim. röle ve 74132 yerine 6 bacaklı çift platinli switch kullanarak devrenin pcbsini yeniden çizdim. devreyi kurdum çalıştırdım ancak şöyle bir sorun var. mesela LF modunda veya HF modunda frekanslarda noktadan sonraki tüm haneleri görmek istiyoruz ama devrede frekansa bağlı olarak noktadan sonra 2 veya 3 tane görünüyor ben daha fazla detaylı bir çözünürlük istiyorum mesela 27,215Mhz değilde 27,215000Mhz gibi daha detaylı görmek istiyorum bununla ilgili olarak yazılımda bir güncelleme yapabilirmiyiz sizden ricam çünki bu devrenin pcbsi için 3 gün uğraştım ortaya güzel bir şey çıktı sonucunda güzel olmasını istiyorum çalışmayı tamamen bitirdiğimde videosuyla beraber paylaşmak istiyorum iyi çalışmalar dilerim

Tamirci Hasan Gonya

frekans bölücü entegreyi ve video opampını yarın sipariş edeceğim alttaki resimde devre kendi üzerindeki kristali ölçüyor




Tamirci
Hasan
Gonya

Powered by EzPortal