pıc ıle frekans yardım

Başlatan bahdiyarusta, 24 Nisan 2013, 00:14:49

bahdiyarusta

arkadaşlar bır projemız için pıc ın çıkından 1 sanıyede 16khz den 40khz yi taramalı bir devre yapmam gerekıyor fakat nasıl basşlayacam hıç fıkrım yok yardım edecek var mı...
<<<***bahdiyarusta****>>>
                  - 66 -

ELZEMEFE

#1
İçimden ki his gerilim kontrollü  osilatör yapman gerekli diyor...
Yada tarama aralığını nı belirleyip frekanslı kodla oluşturup
o  aralığa göre timer interuptı kuracaksın..
aklıma bundan başka bişey gelmiyo

ete

Aslında istenen şeyin ne olduğunu tam olarak anlamadım. Nedir? taramalı devre. Dahada önemlisi ne yapacak bu devre.
Devrenin ne yapacağını açıklasa daha iyi olmazmıydı?
Bahsi geçen iş pic den 16Khz-40Khz arası bir kare dalga çıkarmak ise en ideali HPWM kullanmaktır.
4Mhz çalışma frekansında, T2CON registerine 1/1 bölme oranı verip PR2=62 değerini verirseniz ve duty değerinide 126 ya set ederseniz CCP1 çıkışından 16Khz lik sinyali alırsınız.
Şimdi de 40 Khz için ne vermek gerekiyor ona bakalım. Yine 1/1 bölme oranı ile PR2=24 verirseniz çıkan sinyal bu sefer 40 Khz olacaktır. Duty değerinede 50 vereceksiniz.
Görüldüğü üzere PR2 değeri 60 dan 24 'e doğru indikçe frekans da 16Khz den 40 Khz'e doğru yükselmektedir.
Ara değerlerde Duty değerinide hesaplayıp %50 olacak şekilde vererek bu sinyali çıkartabilirsiniz. Tarama işinden ne kast ediliyor ise bu verilen bilgi ışığında bunu yapmak mümkün olur sanırım.
Ete

bahdiyarusta

tam olarak sabıt frekans çıkışı alıyorum da . benım tam yapmak istediğim şey çıkışta 16 -17-18-19-20.................................................40khz ye kadar gidecek 1 sn de. sonra başa dönecek bu aralıkta gıdıp gelecek 
<<<***bahdiyarusta****>>>
                  - 66 -

ELZEMEFE

Tama işte hocam ete hocam mükemmel anlattı.. 62 ile 126 arasını eşit zaman  aralıkları ile timer interuptına koyacaksın.
o zman odeğerleri tam bulacak lokuup a atıp her  interpta çağırıp değer değiştireceksin.. lokuup senin değer tablonda kaç adet sayı varsa  1 sn yi  o kadar sayıya eşit gelen zaman aralıklarında  interupt yapıcak...

ete

16 dan 40 Khz (dahil) toplam 25 kademe frekans bulunmaktadır. 1 sn=1000 ms dir. O halde kademe başına 1000/25=40 ms lik bir süre düşmektedir. Demekki 16Khz ile başlayarak her frekansı 40 ms süre ile çıkışa vererek 40 Khz (dahil) frekansa kadar sinyali çıkış pininden çıkartmak gerekiyor.
Bu durumda tavsiyem PicMultiCalc.exe isimli programı yüklemedi isen yükle ve makinana kur.
Sonra çalıştırıp PWM seçeneğini seç.
Frekans kısmına 16 Khz - 17 - 18 -19-... 40 Khz değerlerini girerek her değer için PR2 registerine ne değer verildiğine bak.
Bunları bir tabloya dönüştür ve 0-24 arasında döngü kurarak her frekans için değerleri tablodan oku (lookup) sonra bunları yerlerine yerleştirip 40 ms bekle.
Döngü sonuna geldiğinde frekans 40Khz olacak ve süre ise 1000 ms olacaktır.
Hepsi bu zor bir iş değil.

Ete

bahdiyarusta

peki hocam bu pwm hakkında çok fazla bi yazılım yapabildiğimi söyleyemem ama gerekli dökümanları inceleyip bunu yapmaya çalışacağım . . .
<<<***bahdiyarusta****>>>
                  - 66 -

mitec

sanırım kedi köpek yada haşaret kovucu gibi bir şey yapmak istiyorsun

bahdiyarusta

<<<***bahdiyarusta****>>>
                  - 66 -

bahdiyarusta

Hocam   ben bu programı pwm ıle yazacagımı hıç  zannetmıyorum . acaba :
basla:
sayac=sayac+1
portb.0=1
pauseus  sayac
portb.0=0
pauseus sayac
ıf sayac=60 then sayac=0
goto basla
end

şeklinde yapsam bu yöntem ile bi şeyler yapılmaz mı??
<<<***bahdiyarusta****>>>
                  - 66 -

ete

Bu şekilde olmaz. 16Khz de peryot 62,5 us dir. (1000/16) bunun yarısı LOW yarısı HİGH süresidir. Yani 31,25 us HIGH, 31,25 us LOW şeklinde sinyal çıkartman gerekir.
Bunu yapmak için ;
HIGH CIKIS
Pauseus 31
LOW CIKIS
Pauseus 31
şeklinde bir mantık kullandığın zaman komut gecikmeleri nedeni ile sinyal beklenen frekansta çıkmaz daha düşük bir frekansa dönüşür. Bunu bir şekilde ayarlamak belki mümkün olabilir. Ama deveye hendek atlatmak gibi bir şey.
Vaktin var ise uğraş istersen.

Bana kalırsa şu komutu kullan.
FREQOUT Pin,Onms,Frequency1{,Frequency2}
Hesaba göre her frekansta çıkış süresi 40 ms idi.
O halde 16Khz için örneği ben vereyim.
FREQOUT CIKIS,40,16000
17Khz için , FREQOUT CIKIS,40,17000

Bu komutun en iyi 20Mhz kristal frekansında çalıştığı belirtilmiş.
Ete

bahdiyarusta

anladım hocam . bunu da deneyım
<<<***bahdiyarusta****>>>
                  - 66 -

bahdiyarusta

hocam bu kodu kullanmayı bılmyorum ama mantıken bu şekil olmasını düşünüyorum . ama frekans kayıyoır ..


BASLA:
  FREQOUT CIKIS,5000,20000
  GOTO BASLA
  END
<<<***bahdiyarusta****>>>
                  - 66 -

bahdiyarusta

hocam deneme amaçlı ölçüm için yazdığım kodlar şu şekilde:
basla:
   FREQOUT CIKIS,5000,20000
   GOTO BASLA
   END
bu şekilde yazdığım zaman 5 sn boyunca cıkıstan 20 khz vermesı gerekıyor ama çıkışta kı frekans ı osılaskopta gözlemliyorum .       değişken bir frekans görüyorum anlayamadım kodu yanlış satıra mı kullanıyorum anlamadım...  20mhz krıstal de denıyorum dediğiniz gibi..?
<<<***bahdiyarusta****>>>
                  - 66 -

mitec

#14
eğerki sivrisinek kovucu yapacaksanız FREQOUT komutu ile bu işi çözemezsiniz çünkü bu komut 0-32767 hz arasında çıkış verebilir yani 40 khz'e çıkamazsınız benim bilidiğim kedi köpekler için 26 khz haşare ve fareler için 36 khz sivrisinek içinde 60 khz lik sinyal lazım
bu frekanslara çıkabilmek için ete hocamın bahsettiği şekilde hpwm kullanman gerekli


   

Powered by EzPortal