E

pic ile frekans üretimi ve puls sayma

Başlatan ercanbaşer, 17 Eylül 2011, 14:43:42

ercanbaşer

Sayın ete hocam merhaba...

Bizim sorunumuz 16 veya 18 serisi herhangi bir pic kullanarak 0-100kHz arası istenilen bir frekansta çıkış sinyali üretmek ve aynı zamanda çıkıştan o an kaçıncı puls ün çıkıyor olduğunu bilmek.

Biraz daha konuyu açmak gerekirse: Pc ye bağlı bir cihazımız olacak cihaza pc den komut olarak istenilen bir frekans değeri ve bu frekansa sahip kaç puls üretleceği gönderilecek cihaz bu işlemi gerçekleştirecek.

örneğin 56789 Hz de 25 adet puls gönder.

pbp, proton basic ve asm kullanarak program yazmaya çalıştım. denemelerim sonucunda en yüksek frekans değerlerini doğal olarak asm kodundan elde ettim. TMR0 ı kullanarak 125 KHz lik çok düzgün bir kare dalga sinyalini üretip kontrol edebiliyorum. Yalnız ara değerlerin hassaslığı çok fazla oluyor.

aynı şekilde timer kullanmadan program olarakta döngü hızından faydalanarak çözümler bulmaya çalıştım ama sonuç alamadım.

acaba pic ile böyle birşey gerçekleştirmek mümkünmüdür?
hertürlü öneriye açığım.
yardımlarınız için şimdiden teşekkür ederim saygılar...

ete

Sinyal olarak HPWM kullanarak 250 Hz ile 100KHz arası bir sinyalk üretmek mümkün. Ancak şu kadar adet puls üret demek çok zor bir iş.
Bir zamanlar bir step motoru HPWM ile sürerken aynı şey bana lazım olmuştu ama epeyce uğraşmama rağmen sağlıklı bir çözüm bulamamıştım. Şu anda sizin mesajınız üzerine yaniden düşündüm de sinyal çıkışını aynı zamanda TMR1 clk girişine (genelde RB6 dır) vererek tm1 kesmesinide oluşacak puls sayısına eşitleyerek bunu yapmak mümkün olabilir. Ama çok hassas bir şey yapılması mümkün olurmu bilemem. Denemek lazım.

Ete

ercanbaşer

hocam dediğiniz konuyu daha önce denemiştim, dışardan frekans alınsa dahi o frekansatan yararlanılarak ancak belli bir katsayıya bağlı drumda çıkış frekansı üretilebiliyor. tam olarak yada yaklaşık olarak  10-20HZ hassasiyetle frekans çıkışı veremedim bn yaptığım denemelerde? pic harici yollarada başvurmak istedim ama çıkan puls sayısını bilip isteilen puls de kesmek için henüz bir yol bulamadım...

ete

Bana kalırsa işin en zor yanı kaç adet pals yollandığının sayılmasıdır. Gerçi bu işi otomatik yapan ve kesme oluşturan bir capture seçeneği var. Bu amaçla hiç kullanmadım ama biraz incelenirse kullanılabilir.
Bu seferde frekans işi sorun olarak karşımıza çıkıyor. Dediğin gibi hassas frekanslar bu yöntemle üretilemez.
Yüksek frekanslarda timer'larda yetersiz kalır. Bu iş ancak çok yüksek frekanslarda çalışabilen (90 Mhz ve üzeri) işlemcilerle halledilebilir gibime geliyor.
Ete

inventor

#4
Gelişmiş fonksiyon jeneratörlerinin bir çoğunda AD9833 kullanılıyor. Seri porttan haberleşebilen bir dalgaform jeneratör entegresi. Çok hassas bir şekilde istediğinizi yaptırabiliyorsunuz. Her türlü mikroişlemci ile kullanılabiliyor. Datasheetini  incelemek lazım. Eminim bununla ilgili bir özellikde vardır. Kaliteli bir ürün. İncelemeye değer.

İnternete gözatarken AD7680 ile karşılaştım. Bu da sinyal üretimi için iyi görünüyor.
İlmin en büyük düşmanı, sabırsızlıktır. (Şems-i Tırmizi)

ercanbaşer

Alıntı yapılan: inventor - 21 Eylül 2011, 10:35:59
Gelişmiş fonksiyon jeneratörlerinin bir çoğunda AD9833 kullanılıyor. Seri porttan haberleşebilen bir dalgaform jeneratör entegresi. Çok hassas bir şekilde istediğinizi yaptırabiliyorsunuz. Her türlü mikroişlemci ile kullanılabiliyor. Datasheetini  incelemek lazım. Eminim bununla ilgili bir özellikde vardır. Kaliteli bir ürün. İncelemeye değer.

İnternete gözatarken AD7680 ile karşılaştım. Bu da sinyal üretimi için iyi görünüyor.
inventor arkadaşım öncelikle ilgilendiğin için teşkkür ederim;
AD9833 benzeri sinyal üreticilerini inceledim gerçekten çok güzel sonuçlar veriolar sinyal üretmek için birebir. Ama benim problemim aynı zamanda o an kaçıncı pals in üretiliyor olduğunu bilmem anlık olarak verdiğim frekansı değiştirebilmeli ve şu an şu saniye atıyorum 25. puls işlemde diyebilmem gerek :) ilk başta çok basit gibi grünsede bayadır çözüm bulamadım aklına gelen başka bir yol varsa fikirlere herzaman açığım....

KAZIMUGUR

#6
PWM hızına diyeceğim yok.
Sayısı kolay.
Pwm çıkışını B0 a girip kesmeyi çalıştırıp kesme içerisinde tayin edilmiş değişkeni 1 arttırıp çıkın.
Sonsuz döngü oluşturun , kesmedeki değişken ile istediğiniz sayıyı karşılaştırın.
(Butonlarla hedef sayıyı değiştirebilirsiniz)
Bu sonuca göre her hangi bir portu on/off yapın.
Gerisi size kalmış.
Bir and kapısı ile sinyali kontrol edebilirsiniz.
Ya da ikili karşılaştırma ile portların birini on/off (pwm çıkışı izleyici) yapıp pwm olarak o çıkışı kullanabilirsiniz.


@ETE hocam , kesme ve encoderleri sizin sayenizde öğrendim.
Unutmadım , Allah razı olsun.

Powered by EzPortal