Şimdi Ara

pic adc den okurken sorun !!

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir (1 Mobil) - 1 Masaüstü1 Mobil
5 sn
19
Cevap
0
Favori
4.264
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • slm arkadaşlar, pic16f877 ile analog/dijital çeviri modülünü kullanarak 8 bit (0-255) çözünürlükte veri okuyorum ve örnekleme zamanında geçen sürede üretilen dijital sayım kadar kare dalga üretiyor sistem , bu kare dalgaları sayıcıda saydırıyorum. herşey güzel işliyor da sistem boştayken (sensör ucu boştayken) kendi kendine sayıyor. bu sorun neyken kaynaklanabilir ?



     pic adc den okurken sorun !!


     pic adc den okurken sorun !!



    < Bu mesaj bu kişi tarafından değiştirildi herokyar3 -- 15 Eylül 2009; 15:22:38 >







  • Belki boşta bıraktığındada parazit yapabilir. ADC girişini devrede göremedim. POT yerine sabit direnç kullanırsan daha verimli olabilir.

  • quote:

    Orijinalden alıntı: BoRDoX

    Belki boşta bıraktığındada parazit yapabilir. ADC girişini devrede göremedim. POT yerine sabit direnç kullanırsan daha verimli olabilir.




    parazit yapıyosa şayet nasıl engelleriz bunu ? adc girişi an5 yani analog 5. kanal . aslında orda potansiyometre değil de uzama sensörü var fakat aynı potansiyometre gibi çalışıyor. tavsiyesi olan ????
  • "sistem boştayken" ne demek???
  • -sistemin boşta- olmasından kasıt nedir? Analog girişi boşta bırakıyor iseniz girişi 0V. a çekmek için girişle GND arasına 10k bağlayabilirsiniz.
  • quote:

    Orijinalden alıntı: ustura2

    -sistemin boşta- olmasından kasıt nedir? Analog girişi boşta bırakıyor iseniz girişi 0V. a çekmek için girişle GND arasına 10k bağlayabilirsiniz.


    sistemin boşta olması dediğim analog kanaldan herhangi bir veri okunmuyorken yani uzama sensörü ilk halindeyken ( uzama sensörü resmi altta ) max boydayken bu durumda sayıcı halen saymaya devam ediyor 1 er 1 er .

    bunun sebebi ne olabilir? gürültü falan mı alıyor kanallar



     pic adc den okurken sorun !!




  • senin adc 0 değerini almıyor olmasın...
  • quote:

    Orijinalden alıntı: r2d2droids

    senin adc 0 değerini almıyor olmasın...


    benim adc nin öyle kötü huyları yoktur . zaten sensör tersten çalışıyor boştayken 5 volt tam uzamada 0 volt veriyor

    filtrelemeye gidersek nasıl olcak o iş ?
  • Yazılımda ADC nin 1/2 LSB hata oranını hesaba kattın mı?
  • quote:

    Orijinalden alıntı: herokyar3


    quote:

    Orijinalden alıntı: r2d2droids

    senin adc 0 değerini almıyor olmasın...


    benim adc nin öyle kötü huyları yoktur . zaten sensör tersten çalışıyor boştayken 5 volt tam uzamada 0 volt veriyor

    filtrelemeye gidersek nasıl olcak o iş ?



    nasıl bir bağlantın var tam olarak anlamadım ama ADC girişine bir 100n ister gibi...
  • quote:

    Orijinalden alıntı: r2d2droids


    quote:

    Orijinalden alıntı: herokyar3


    quote:

    Orijinalden alıntı: r2d2droids

    senin adc 0 değerini almıyor olmasın...


    benim adc nin öyle kötü huyları yoktur . zaten sensör tersten çalışıyor boştayken 5 volt tam uzamada 0 volt veriyor

    filtrelemeye gidersek nasıl olcak o iş ?



    nasıl bir bağlantın var tam olarak anlamadım ama ADC girişine bir 100n ister gibi...


    şekildeki potansiyometrenin pice bağlandığı 16f877 nin 8. bacağına uzama sensörü bağlı. 33. bacak olan b0 dan da kare dalga çıkış alıyorum. uzama sensörü ne kadar uzarsa o kadar kare dalga pulse sinyali alıyorum ?


    ADC nin 1/2 LSB hata oranını hesaba kattın mı?

    biraz daha açar mısın konuyu ?




  • Yazılımı da eklersen daha faydalı olur.

    Adc den gelen veri değişken olabilir.Bu yüzden de yazılımsal yada donanımsal olarak filtreleme yapmalısınız.
    Donanımsal filtre olarak, basit bir alçak geçirgen filtre kullanılabilir.

    alçak geçirgen filtre(RC) bir direnç ve bir kondansatörden oluşur.
    Uygun değerleri alttaki adresten hesaplayabilirsin:
    http://www.muzique.com/schem/filter.htm

    Yazılımsal filtre ise Adc den aldığın verileri biriktirip ortalamasını almak gibi birşey olur.Mesela her aldığın değerle kare dalga üretmektense, 10 tane değer alıp ortalamasını bulup,o değerle kare dalga üretebilirsin.Tabi bu en basit yazılımsal filtre olur.
    Filtre uygulanmış adc girişi ile filtre uygulanmamış adc girişi arasındaki farkı anlamak için şu 2 resim yeterli olur sanırım.

    filtresiz:

    filtreli:



    < Bu mesaj bu kişi tarafından değiştirildi sondunya -- 16 Eylül 2009; 6:19:16 >




  • quote:

    Orijinalden alıntı: sondunya


    Adc den gelen veri değişken olabilir.Bu yüzden de yazılımsal yada donanımsal olarak filtreleme yapmalısınız.
    Donanımsal filtre olarak, basit bir alçak geçirgen filtre kullanılabilir.

    alçak geçirgen filtre(RC) bir direnç ve bir kondansatörden oluşur.
    Uygun değerleri alttaki adresten hesaplayabilirsin:
    http://www.muzique.com/schem/filter.htm




    sondunya, yorumlar için çok çok teşekkürler. şimdi donanimsal filtre için kare dalga çıkışı veren b0 bacağına RC filtresini bağlıyorum, şimdi benim ürettiğim kare dalga sinyali max 500 hz. sitede corner frequency (köşe frekansı) tabiriyle anılan şey misal 300ohm ve 1uf kapasite değeri ile 530Hz hesaplanıyor. bu değerin üstünü geçirmiyor sanırım doğru mu düşünüyorum ?


    peki analog girişte parazitlenmeyi önlemeye yönelik hangi yaklaşımlar getirilebilir? yabancı bir forumda oraya yüksek değerlikli direnç bağlanması tavsiye edilmiş. analog girişle sistem toprak hatta arasına.



    < Bu mesaj bu kişi tarafından değiştirildi herokyar3 -- 16 Eylül 2009; 10:15:00 >




  • Ben yanlış anlattım sanırım.Ben sorunun adc girişinde olduğunu söylemek istemiştim.
    Verdiğim şekiller birim zamanda adc girişinden okunan değeri gösteriyor.Tahminen senin devrende de adc girişinden gelen değerler 1.şekildeki gibi.Aslında her 2 şekildede okunan değer(referans değeri) 30 dur.
    1.şekle dikkatli bakarsan 30 değerinin hizasındaki düz çizgiyi farkedeceksin
    Ancak arada okuduğu 1 eksik, 1 fazla değerler girişin bozulmasına, bu nedenle de girişi referans alarak uyguladığın çıkışın(kare dalganın) çok fazla değişmesine neden oluyor.
    Benim tahminimce girişteki dalgalanmayı(osilasyonu) engellemen sorununu çözecektir.
    http://www.muzique.com/schem/filter.htm
    low pas filter şeklinin girişini(IN), sensor e bağlayıp,çıkışını(OUT) da işlemcinin adc girişine bağlarsan, daha dengeli bir girişe ve de çıkışa sahip olursun.
    Eğer kare dalganın çıkışına low pass filter koyarsan kondansatörden dolayı kare dalgan ac sinyale dönüşebilir.Bence kare dalganın çıkışına filtre koymamanı tavsiye ederim ben.
    İyi çalışmalar

    Bu arada Yazılımı da eklersen daha faydalı olur.




  • quote:

    Orijinalden alıntı: sondunya

    Ben yanlış anlattım sanırım.Ben sorunun adc girişinde olduğunu söylemek istemiştim.
    Verdiğim şekiller birim zamanda adc girişinden okunan değeri gösteriyor.Tahminen senin devrende de adc girişinden gelen değerler 1.şekildeki gibi.Aslında her 2 şekildede okunan değer(referans değeri) 30 dur.
    1.şekle dikkatli bakarsan 30 değerinin hizasındaki düz çizgiyi farkedeceksin
    Ancak arada okuduğu 1 eksik, 1 fazla değerler girişin bozulmasına, bu nedenle de girişi referans alarak uyguladığın çıkışın(kare dalganın) çok fazla değişmesine neden oluyor.
    Benim tahminimce girişteki dalgalanmayı(osilasyonu) engellemen sorununu çözecektir.
    http://www.muzique.com/schem/filter.htm
    low pas filter şeklinin girişini(IN), sensor e bağlayıp,çıkışını(OUT) da işlemcinin adc girişine bağlarsan, daha dengeli bir girişe ve de çıkışa sahip olursun.
    Eğer kare dalganın çıkışına low pass filter koyarsan kondansatörden dolayı kare dalgan ac sinyale dönüşebilir.Bence kare dalganın çıkışına filtre koymamanı tavsiye ederim ben.
    İyi çalışmalar

    Bu arada Yazılımı da eklersen daha faydalı olur.


    evet adc 5. kanalın girişine filtre uyguladım yalnız değişen fazla birşey olmadı yine fazlasıyla osilasyon var. filtre değerlerini mi yanlış seçtim acaba?

    RC değerlerini hangi formüle göre hesaplıyoruz? Fkesim= 1/(2xpixRC) formülünden mi? Uygun RC değerleri ne olabilir ? bu arada adc nin çözünürlüğünü 8 bitten 10 bite çıkarmış bulunuyorum. bu da daha fazla osilasyon anlamına mı geliyor acaba? 1cm uzama değeri için 1024 dijital sayım değeri

    Altta yazılımın işler kısmını ekliyorum....

     forever loop 

    ADC_result = ADC_OKU(5)

    if x == low then
    x = high
    ilkdeger = ADC_result

    else
    x = low
    sondeger = ADC_result
    pulse = ( ilkdeger - sondeger )
    if ilkdeger >= sondeger then
    for pulse loop
    pin_b0 = high
    Gecikme_1ms (1)
    pin_b0 = low
    Gecikme_1ms (1)
    end loop
    elsif ilkdeger < sondeger then

    end if
    ilkdeger = 0
    sondeger = 0
    end if

    end loop



    < Bu mesaj bu kişi tarafından değiştirildi herokyar3 -- 17 Eylül 2009; 9:37:30 >




  • Filtre uyguladığın halde değişiklik olmaması ilginç.Bu durumda yazılımsal filtrelemeyide devreye sokmak lazım.
    Eklediğin kod parçacığını pek anlayamadım.Basic de yazılmış sanırım.if blokları ve döngüler belli olmuyor. Adc den okuduğun bölüm döngüye sokulup 10 kere tekrarlanabilir
    -----------------------
    Dongu (10defalık)
    {
    ADC_result =ADC_result+ ADC_OKU(5)
    }Dongu bitti
    ADC_result =ADC_result/10
    -----------------------
    Bu çok dandik filtre bile bir fark oluşturmalı.(En azından sabit anolog giriş için).
    Kodlardan anladığım kadarıyla,eğer yamulmuyorsam;
    okuduğun 2 değer arasındaki fark kadar kare dalga üretiyorsun.
    --------------------------
    ilkdeger >= sondeger ise
    --------------------------
    kare dalga üret, değilse birşey yapma.
    eşit ise neden kare dalga üretiyorsun?
    Ben kodları anlayamadım galiba!

    Bu arada kare dalga üretmek neden?
    Onun yerine en basitinden 7-segment gösterge olsa sistemin durumunu(boy uzunluğunu) rakamsal olarak gösterebilsen daha iyi olmaz mı?Gösterge ile hem pozitif hemde negatif değişimleri gösterebilirsin.

    Filtre değerlerini sormuşsun.Ben kendi uygulamamda formul kullanmadan 100nF kapasitor 100 ohm direnç kullanmıştım.İş görmüştü
    Formul hesabı içinde;Adc nin örnekleme periyodunu bulman lazım.Bu da kullandığın harici kristal değerine göre ve adc için ayırdığın prescaler değerine göre değişir.
    Çözünürlüğü arttırarak hassasiyeti arttırmış olursun.Bu durumda dalgalanmayı da arttırmış olursun

    Pek yardımcı olamadım kusura bakma ama yazılımı anlayamadım.




  • quote:

    Orijinalden alıntı: sondunya

    Filtre uyguladığın halde değişiklik olmaması ilginç.Bu durumda yazılımsal filtrelemeyide devreye sokmak lazım.
    Eklediğin kod parçacığını pek anlayamadım.Basic de yazılmış sanırım.if blokları ve döngüler belli olmuyor. Adc den okuduğun bölüm döngüye sokulup 10 kere tekrarlanabilir
    -----------------------
    Dongu (10defalık)
    {
    ADC_result =ADC_result+ ADC_OKU(5)
    }Dongu bitti
    ADC_result =ADC_result/10
    -----------------------
    Bu çok dandik filtre bile bir fark oluşturmalı.(En azından sabit anolog giriş için).
    Kodlardan anladığım kadarıyla,eğer yamulmuyorsam;
    okuduğun 2 değer arasındaki fark kadar kare dalga üretiyorsun.
    --------------------------
    ilkdeger >= sondeger ise
    --------------------------
    kare dalga üret, değilse birşey yapma.
    eşit ise neden kare dalga üretiyorsun?
    Ben kodları anlayamadım galiba!

    Bu arada kare dalga üretmek neden?
    Onun yerine en basitinden 7-segment gösterge olsa sistemin durumunu(boy uzunluğunu) rakamsal olarak gösterebilsen daha iyi olmaz mı?Gösterge ile hem pozitif hemde negatif değişimleri gösterebilirsin.

    Filtre değerlerini sormuşsun.Ben kendi uygulamamda formul kullanmadan 100nF kapasitor 100 ohm direnç kullanmıştım.İş görmüştü
    Formul hesabı içinde;Adc nin örnekleme periyodunu bulman lazım.Bu da kullandığın harici kristal değerine göre ve adc için ayırdığın prescaler değerine göre değişir.
    Çözünürlüğü arttırarak hassasiyeti arttırmış olursun.Bu durumda dalgalanmayı da arttırmış olursun

    Pek yardımcı olamadım kusura bakma ama yazılımı anlayamadım.



    düzeltiyorum, şu anda yeni filtre değerleri ile adc girişini filtreledim RC filtresi R:100ohm C:100nF ile ve bir iyileşme olduğunu söyleyebilirim.

    kullandığım dil JAL (just another language) açık kaynak kodlu , ve onunda jALTURK v.2.0 (türkçeleştirilmiş) versiyonu

    evet 5 ms arayla analog giriş değerlerini okuyorum ve aradaki fark kadar kare dalga sinyali gönderiyorum b0 kanalından. ilkdeğer sondeğere eşitse kare dalga üret diyorum , o hakkaten manasız oldu da yine de birşey üretilmiş olmuyor zaten . onu her ihtimali dikkate almak maksadıyla öyle yaptım ilkdeger >= sondeger şeklinde ve sonrasında ilkdeger < sondeger ifadesi var. yani tüm durumlar tanımlı.

    böyle olmak durumunda çünkü kare dalga sinyalini sayıcıya giriyorum ve ordan da bilgisayar yazılımı ile ekrana grafik çizdiriliyor.

    yazılımsal filtrelemeye henüz gitmedim. onu da tamamladığım zaman sonucu yazıcam. teşekkürler..




  • pic16f877 .pic18f452 eski teknolojiler hemde pahalı .Ben biryerde okumuştum bunların adc lerinde yapılarından kaynaklanan çözülemez problemler varmış. Ama yeni ürünlerde düzeltmişler pic18f4520, pic18f45k20 ile çalışıyorum 10 bit adc ile hiçbir sorun yok. pic18f4520 yi deneyebilirsin 877 ile bacakları aynıdır özellikle pic18f45k20 çok iyi çalışıyor adc yaparken kocaman bir trafonun yanına koydum sürekli trafoyu açıp kapattım hiç etkilenmedi ama 3,3v ile besleniyor. İkisinden birini tavsiye ederim
  • quote:

    Orijinalden alıntı: quigon1977

    pic16f877 .pic18f452 eski teknolojiler hemde pahalı .Ben biryerde okumuştum bunların adc lerinde yapılarından kaynaklanan çözülemez problemler varmış. Ama yeni ürünlerde düzeltmişler pic18f4520, pic18f45k20 ile çalışıyorum 10 bit adc ile hiçbir sorun yok. pic18f4520 yi deneyebilirsin 877 ile bacakları aynıdır özellikle pic18f45k20 çok iyi çalışıyor adc yaparken kocaman bir trafonun yanına koydum sürekli trafoyu açıp kapattım hiç etkilenmedi ama 3,3v ile besleniyor. İkisinden birini tavsiye ederim


    quigon1977 teşekkür ederim yorum için, yalnız ben JAL derleyicisiyle yazıyorum kodları, JAL da henüz 18f serisi tanımlı değil de programlama anında çipset ayarları yapılır sanırım. bundan sonra bu dediğin piclere yöneleceğim.

    yazılımsal ve donanimsal filtreleme ile analog osilasyon değeri baya bir azaldı,

    picin sağlam çalışması için adc durumunda düzgün regülasyonlu gerilim kaynağı kullanmak çok gerekli



    < Bu mesaj bu kişi tarafından değiştirildi herokyar3 -- 30 Eylül 2009; 8:43:48 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.