adc filtre yardım

Başlatan uzeyir, 03 Mart 2014, 14:07:55

uzeyir

"
#include <18f4520.h>
#device ADC=10
#FUSES NOWDT, WDT128, XT, NOPROTECT, IESO, NOBROWNOUT, NOPUT, NOCPD, NOSTVREN, NODEBUG, NOLVP, NOWRT, NOWRTD, NOEBTR, NOCPB, NOEBTRB, NOWRTC, NOWRTB, NOFCMEN, NOXINST, NOPBADEN, LPT1OSC, MCLR         

#use delay(clock=4M)
#include <lcd.c>

#use delay(clock=4M)
#use fast_io(e)
#use fast_io(c)

#define oki pin_b7;
#define des pin_b6;

#define use_portd_lcd TRUE
float volt;
unsigned int8 x;
unsigned int16 accum=0;
unsigned int16 s, b[16];
int1 didswap=1;
for(x=0;x<16;x++)
{
set_adc_channel(5);

b
  • = read_adc();
    delay_us(8); 
          } //    end of for loop for multi sample
    while(didswap)

    didswap=0;
    for (x=0; x<15; x++);

    if(b[(x)]>b[(x+1)])
    {           
    s=b
  • ;
               
    b
  • =b[(1+x)];
    b[(1+x)]=s;
                didswap=1;
           }
          }
         }     
    for (x=4; x<12; x++);
    {  accum +=b
  • ;  }
    return(accum>>3);
    volt=accum;

    printf(lcd_putc,"\fvolt:%f",VOLT);

           
    }
    "
    sevgili arkadaşlar pice yeni başladım bu kodlarda hatam var ama yardımcı olabilecek olan var mı? voltmetre yaptım voltaj okuma stabil değil bir yöntem gördüm nette onu yapmaya çalıştım ama olmuyor.  yardımlarınızı bekliyorum.  teşekkürler.
    b köeli parantez xler ler b. şeklinde çıkıyor.

baran123

#1
Kodlar çok düzensiz hatanı bulamadım ama float değişkenleri şöyle yazdırman da fayda var ondalık kısmında alabilirsin ve böyle netten çok özenme örneğe bak farklı şekilde yaz çabucak geliştirmeye bak farklı şeyler dene yoksa böyle öğrenemessin sana önerim kaynak kitap al analog ile başka örnekler yap ondan sonra voltmetre dene.

Kolay gelsin iyi çalışmalar.

printf(lcd_putc,"\fvolt:%1.1f",VOLT);

pea

#2
Kodunuzu  "#" işaretli "kod ekle" butonuna tıklayınca gelen, "[ code]""[/ code]" ifadeleri arasına yapıştırırsanız daha okunabilir olur.
Bu kodda "main" subroutine'i bulunmuyor. Çalışmaması normal.
Okuduğunuz stabil olmayan değerler ne kadar dengesiz? 1 bit değişimi 5mV'tan küçük bir değere denk gelmekte zaten. Birkaç mV'luk değişim normaldir. Ama değişim 100mV seviyelerini aşıyorsa devrenizde sorun vardır.

Yazılımsal olarak da çeşitli ortalama algoritmaları kullanabilirsiniz.

mehmet

main fonksiyonunu göremedim?
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr