Haberler:

Türkiye'nin Elektronik ve Metal Dedektörlerini Buluşturan İlk Sitesi Teknoloji Ekibi'ne Hoş Geldiniz.

Ana Menü

CORUM-PI (pı dedektör paylaşımı)

Başlatan pro-TR, 13 Aralık 2010, 22:47:26

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

yazılımcı

x=read_adc();
delay_us(40);

if(i==1)
{a=x;}

if(i==2)
{b=x;}

if(i==3)
{c=x;}

if(i==4)
{d=x;}

if(i==5)
{e=x;}

j=(5/((1/a)+(1/b)+(1/c)+(1/d)+(1/e)));
delay_ms(1);

x=0;
a=0;
b=0;
c=0;
d=0;
e=0;


usta şöyle bi program yazdımda çıkışta 0 veriyo acaba denklemi çok mu uzun tuttumda çözümleyemedi
Linkback: Ynt: CORUM-PI (pı dedektör paylaşımı)

yazılımcı


pro-TR

bence ADC hızından kaynaklı, zira bende kalman filtresi uygulamıştım, 10 bit adc de işe yaramamıştı, bilemiyorum, belkide yazılımda bir hata yaptınız
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"

yazılımcı

yok hocam benim aptalllığım tuttu yine kalktım pice bölme işlemi yaptırıyorum , bide yetmiyomuş gibi 5 tane , bide yetmezmiş gibi aynı föngüde topla tekrar böl diyorum , hocam anlayacağın pice bölme işlemi yaptırılmaz sakat bi iştir.  8)

yazılımcı

adc 16f877a da  20usn en az ideali 30 usn  , 18f4520 de 3 usn

pro-TR

Alıntı yapılan: yazılımcı - 05 Mart 2011, 00:17:19
adc 16f877a da  20usn en az ideali 30 usn  , 18f4520 de 3 usn

usta zayıf düşüyor ya, inan 877 ile bu işler zor
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"

yazılımcı

dspic de analog bölme işlemi olduğunu duymuştum bi ara ama hangi modelinde bilmiyorum ancak onunla olur yani picle bölme işlemi biraz zor , dspiclede bölme işlemi hiç denemedik başımıza iş almayalım arge yapacak zamanda değilim , havalar bi ısınsa gaza gelirimde  :D 

pro-TR

ya usta
bölme işlemi nasıl olmuyo anlamıom
ben
A= 250 / 5 diom
sonucu alıom, bi hatamı var
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"

mustafa_ozcan

yazılımcı usta senin analog op tasarımın nasıl pic'e girmeden önce

yazılımcı

Alıntı yapılan: mustafa_ozcan - 05 Mart 2011, 01:27:10
yazılımcı usta senin analog op tasarımın nasıl pic'e girmeden önce
usta önce kazancı 1-1 terlemeyen , sonra 10 kat integratör , sonra kazancı değişen bi terleyen var 40 kat ila 250 kat arası değişiyor kazanç

yazılımcı

Alıntı yapılan: pro-TR - 05 Mart 2011, 00:56:45
ya usta
bölme işlemi nasıl olmuyo anlamıom
ben
A= 250 / 5 diom
sonucu alıom, bi hatamı var

basit hesapları yapar ustam karmaşıklarda tıkanır ama ne kadar basitte olsa, mesala bi çok adc uygulamasında  5/1023 yerine 0.004887558 ile çarpılır , yani bölme işlemi pek tercih edilmez olabildiğince kaçınılır.

LORD_EX

Alıntı yapılan: pro-TR - 04 Mart 2011, 21:04:10
Alıntı yapılan: LORD_EX - 04 Mart 2011, 20:58:37
for(i=0;i<N;i++){
for(j=i;j<N;j++){
if(olculer<olculer[j]){
gecici =  olculer;
olculer = olculer[j]  ;
olculer[j] = gecici  ;
}
}
olculer dizinindeki verileri sıralayan bir örnek. Filtre konusunda kendi veri filtreniz olabilir. Ben alçak geçiren filtre yada band geçiren filtre gibi filtrelerden bahsediyorsunuz zannettim.

band geçiren, alçak geçiren, yüksek geçiren o tür filtreler analog katında olmalı zaten, tabi o tür filtrelere de çok yüklenmek demek sinyalin yavaşlamasına, hassasiyetin azalmasına sebeb oluyor.
ayrıca analog filtrelerle beraber dijital filtrelerde uygulamada yarar olacağını umuyorum.

sonuç olarak siz benim dediğimi yapabilirmisiniz protonda;

yani 20 örnek al, sırala, en küçük 5 değer ve en büyük 5 değeri çıkart kalanının ortalamasını al... buyurun yardımlarınızı bekliyorum

      Include "PROTON_4.INC"
      Symbol SAMPLES_TO_TAKE = 20  '20 örnek alınacak
        Dim SWAPTMP As Word    
        Dim INDEX As Byte      
        Dim SWAP_OCCURED As Bit
        Dim SAMPLE[SAMPLES_TO_TAKE + 1] As Word
        Dim TOTAL As Word
        Dim TOTAL_M As Word
        DelayMS 200
        Clear
        Cls
         '//////////////////////////adc////////////////////////////////////////////
        Adin_Res 10
        Adin_Tad 2_FOSC
        Adin_Stime 50       
       
        INDEX = 0
        DelayMS 100
        Cls             
TRISA.0 = 1
        ADCON1 = %10000010
    Repeat
        SAMPLE[INDEX] = ADIn 0
        Inc INDEX             
        Until INDEX = SAMPLES_TO_TAKE
        '/////////////////////////////////adc////////////////////////////////
       
        GoSub BUBBLE_SORT
        GoSub SAMPLE_PRINT
        GoSub SAMPLE_ZERO
        GoSub SAMPLE_PRINT
        GoSub ORTALAMA_HESAPLA
        Stop
       
ORTALAMA_HESAPLA:
        TOTAL = 0
        INDEX=0
        Repeat
        SWAPTMP = TOTAL
        TOTAL=SWAPTMP+SAMPLE[INDEX]
        Inc INDEX             
        Until INDEX = SAMPLES_TO_TAKE 
        TOTAL_M=TOTAL/(SAMPLES_TO_TAKE-10)
        RSOut At 1,1,"ORTALAMA DEĞER = " , Dec TOTAL_M,13
        Return
       
SAMPLE_PRINT:

        INDEX = 0
        RSOut At 1,1,"SAMPLE ICERIGI" ,13     
        Repeat
        RSOut At 1,1,"SIRALAMA SONUCU = " , Dec SAMPLE[INDEX],13
        Inc INDEX             
        Until INDEX = SAMPLES_TO_TAKE
        Return
       
SAMPLE_ZERO:
        'İLK 5 ÖRNEK 0 , SON 5 ÖRNEK 0
         SAMPLE[0] = 0
         SAMPLE[1] = 0
         SAMPLE[2] = 0
         SAMPLE[3] = 0
         SAMPLE[4] = 0
            SAMPLE[15]= 0
            SAMPLE[16]= 0
            SAMPLE[17]= 0
            SAMPLE[18]= 0
            SAMPLE[19]= 0
          Return
       
' SIRALAMA ALGORITMA
BUBBLE_SORT:
  Repeat
        SWAP_OCCURED = 0
  INDEX = 0
            Repeat
            If SAMPLE[INDEX] > SAMPLE[INDEX + 1] Then 
    SWAPTMP = SAMPLE[INDEX]
    SAMPLE[INDEX] = SAMPLE[INDEX + 1]
    SAMPLE[INDEX + 1] = SWAPTMP
    SWAP_OCCURED = 1
EndIf
Inc INDEX
            Until INDEX = SAMPLES_TO_TAKE
Until SWAP_OCCURED = 0
Return


VİTUAL TERMİNAL ÇIKIŞI AŞAĞIDAKİ GİBİDİR.
€SAMPLE ICERIGI
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 2
ş€SIRALAMA SONUCU = 32
ş€SIRALAMA SONUCU = 63
ş€SIRALAMA SONUCU = 93
ş€SIRALAMA SONUCU = 124
ş€SIRALAMA SONUCU = 156
ş€SIRALAMA SONUCU = 187
ş€SIRALAMA SONUCU = 219
ş€SIRALAMA SONUCU = 251
ş€SIRALAMA SONUCU = 282
ş€SIRALAMA SONUCU = 313
ş€SIRALAMA SONUCU = 343
ş€SIRALAMA SONUCU = 374
ş€SIRALAMA SONUCU = 404
ş€SAMPLE ICERIGI
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 2
ş€SIRALAMA SONUCU = 32
ş€SIRALAMA SONUCU = 63
ş€SIRALAMA SONUCU = 93
ş€SIRALAMA SONUCU = 124
ş€SIRALAMA SONUCU = 156
ş€SIRALAMA SONUCU = 187
ş€SIRALAMA SONUCU = 219
ş€SIRALAMA SONUCU = 251
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€SIRALAMA SONUCU = 0
ş€ORTALAMA DEĞER = 112


LORD_EX

Kod ile istediğin olayı yapabilirsin. Yani 20 örnek al , sırala , enbüyük 5 değeri ve en küçük 5 değeri çıkar ve ortalamasını al.

ADC değerlerini kendi uygulamana göre ayarla. Ben bir 50 hz yarım dalga doğrultulmuş sinüsten aldım örnekleri.

pro-TR

s.a.
lord ex usta ilginiz için teşekkür ederim. gerçekten derelyicide derledim, kod sanırım çalışıyor. sizden ricam include dosyasını da inceledim. sizden rica bu yazılımla ilgili şemayı da yayınlayabilirmisiniz, hatta varsa isis dosyasını verebilirmisiniz?
bu filtre ne kadar doğru çalışıyor ve kodun çalışma süresine bakmak istiyorum.
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"


pro-TR

lord ex ustam ilginiz ve alakanız için teşekkür ederim. şimdi ben bunu devrede denemek istiyorum.
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"

pro-TR

bak lord ex usta ilk adc değerlerini aldığımızda 20 örnekten 0 değerlerini saymazsak onların ortalaması= 203 değeri veriyor velevki onlarda sinyal olsun o zamanda 142 sonucu çıkar
makinanın hesapladığı değer 112
ŞİMDİ burada bir yanılgıya düşme şansımız var? oda bizim filtreden kastımız şu;
a) pik atan değerleri hesaplamadan çıkarmak
b) adc sonucunu stabilize etmek
adc değerimizi stabilize etmek içinde mantık şu; ne kadar adc değerleri birbirine yakın çıkarsa stabilite de o oranda artacaktır.

yoksa elbette ki ilk değerimiz 203 se diğer ölçümlerinde de buna yakın değerler ortalamaları olacaktır. yani bizim derdimiz adc değerini düşürmek değil. maksat adc değerinde ki salınımı azaltmak,
tabi ki tek başına yazılımsal bir filtre yeterli gelmeyecektir. amaç gerek analog gerekse yazılımsal filtrelerle stabiliteyi elde etmek,

bu arada PIK atan adc değerlerini merak ediyor olabilirsiniz, sebebi nedir?
sebebi malum ki yazılımla analog devrelerde ki gibi sonsuz pals yollamıyoruz biz, 10-20-30 herneyse pals gönderiyoruz adc okuyorz sonra hesap kitap, işte hesap kitaptan sonra tekrar pals verme işlemine döndüğümüzde ilk palslerimiz kararsızlaşıyor. çünkü ilk başlabgıç flybackı ile son flyback arasında fark var, sebebi bobin doyum meslesesi,
ben bu yazılımı kendi devreme uyarlayıp denemek istiyorum. sonuçlarını yazarım ancak devre yok  ;D
dağıtmışitım. tekrar topladığımda deneyeceğim. yokluğun gözü kör olsun, malzeme lazım olunca yapılmış devrelere saldırıyoruz.  :D
Güzeli güzel yapan EDEBTİR,
Edeb güzeli sevmeye SEBEBTİR...

"Rufailer giyer pembe kırmızı
Tacının üstünde nurdan yıldızı
Evlatları tutar şişi ateşi, közü
Bülbül güle hayran ben de şeyhime"

yazılımcı

ustam bu proton heralde şunu c ye yuvarlayabilecek varmı

LORD_EX

//ccs c ile yazıldı.
//4Mhz kristal isiste c6 ya terminal bağlarsanız çıktıyı görürsününüz.

#include <16F877.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)



void main() {
   long int value[20],gecici,ortalama,total;
   int i,j;
   
   setup_adc(  ADC_CLOCK_INTERNAL  );

   setup_adc_ports( ALL_ANALOG );


   set_adc_channel( 0 );

   
   printf("Sampling:\r\n");

   for(i=0;i<20;i++){
      value = read_adc();
         }
printf("\nalinan ornekler");
for( i=0;i<20;i++){
printf("\rCh0:%ld  " value);
}
for(i=0;i<20;i++){
for(j=0;j<20-1-i;j++){

if(value[j]>value[j+1]){
gecici=value[j+1];
value[j+1]=value[j];
value[j]=gecici;

}}}
printf("\nsiralanan ornekler");
for( i=0;i<20;i++){
printf("\rCh0:%ld  " value);
}
for( i=0;i<5;i++){
value=0;

}
for( i=19;i>14;i--){
value=0;

}

printf("\nilk 5 son bes = 0");
for( i=0;i<20;i++){
printf("\rCh0:%ld  " value);
}
for( i=0;i<20;i++){
total=total+value;

}
ortalama = total/(10);
printf("\nortalama değer = %ld" ortalama);
}


LORD_EX



Paylaş whatsappPaylaş facebookPaylaş linkedinPaylaş twitterPaylaş myspacePaylaş redditPaylaş diggPaylaş stumblePaylaş technoratiPaylaş delicious