Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

LM35 Sıcaklık Ölçme

Başlatan ercanatnr, 14 Temmuz 2015, 21:32:59

ercanatnr

LM35 ile Lcd ekranda sıcaklık ölçme uygulamsı yapmak istiyorum. Kodları aşağıdaki gibi yazdım. Pice attım ve sayıların çok hızlı değiştiğini gördüm. Daha sonra kodlara şu satırı ekledim "filtre=(0.95*filtre)+(0.05*sicaklik);" bu koddan sonra hızlı değişim bitti ancak bu seferde pice ilk enerji verdiğim anda örneğin ölçülen ortam sıcaklığı 30 derece ise 0.0 dereceden 30.0 dereceye yavaş yavaş geliyor. Daha sonra sabitleniyor. Bu yavaş gelme olayını nasıl çözebilirim.
#include <16F88.h>
#device ADC=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)

#use fast_io(a)

#define use_portb_lcd TRUE
#include <lcd.c>

unsigned long int bilgi;
float voltaj,sicaklik,filtre;



void main()
{
   setup_adc_ports(sAN0);
   setup_adc(ADC_CLOCK_DIV_32);
   set_tris_a(0x01);
   set_adc_channel(0);
   delay_us(20);

   
   lcd_init();
   printf(lcd_putc,"\fOlculen Sicaklik");
   printf(lcd_putc,"\nSicaklik=");
   while(TRUE)
   {

    bilgi=read_adc();

    
    voltaj=(0.0048828125*bilgi)*1000;
    sicaklik=(voltaj/10)+2;   
    delay_ms(500);
    
    filtre=(0.95*filtre)+(0.05*sicaklik);
    
    lcd_gotoxy(10,2);
    printf(lcd_putc,"%5.1f'C",filtre);
    delay_ms(100);
   }

}

mehmet

Analog okumayı birkaç defa yapıp
ortalamasını alınız. Bir de analog okuma
zamanını uzatabilirsiniz.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Erhan YILMAZ

filtre=(0.95*filtre)+(0.05*sicaklik); bunu kim kullan dedi?

delay süresini arttır 500ms yap 1sn yap. Basit düşün.

LukeSkywalker

Sizi kurtaracak şey medyan filtrelemedir.

ercanatnr

Alıntı yapılan: Erhan YILMAZ - 15 Temmuz 2015, 09:01:44
filtre=(0.95*filtre)+(0.05*sicaklik); bunu kim kullan dedi?

delay süresini arttır 500ms yap 1sn yap. Basit düşün.
Başka bir forumda okumuştum o kodun nasıl çalıştığınıda bilmiyorum. Sorunumu bir nebze azalttı ancak ilk enerji vermede ve hızlı sıcaklık değişimlerinde sorun yaratıyor. Rakamlar yavaş yavaş artıyor.

ercanatnr

Alıntı yapılan: LukeSkywalker - 15 Temmuz 2015, 11:34:36
Sizi kurtaracak şey medyan filtrelemedir.
Bir örnek verirmisiniz nasıl kullanabilirim.

ercanatnr

Alıntı yapılan: mehmet - 15 Temmuz 2015, 08:04:33
Analog okumayı birkaç defa yapıp
ortalamasını alınız. Bir de analog okuma
zamanını uzatabilirsiniz.

Birde ortalamasını almayı deneyecem teşekkürler.

Recep METE

Alıntı yapılan: LukeSkywalker - 15 Temmuz 2015, 11:34:36
Sizi kurtaracak şey medyan filtrelemedir.

Medyan filtremeyi biraz anlatır mısınız?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

boreas

Matematiksel bir işlem medyan elindeki verileri sıralıyorsun 1,1,2,2,3,3,3,3,4,4,5,5,5 gibi sırayla en büyük ve en küçük değeri siliyorsun elinde kalan değer burada 3 bu dizinin medyanı oluyor. Böylece düşük olan veriler değil sayıca fazla olan veriler ortaya çıkıyor.

aliveli

birinci okumayı filtresiz yap

tekosis

Medyan ile ilgili turkce kayaklar var senin derdinin dermanı medyanda kardeşim.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

LukeSkywalker

Medyan filtrelemeyi ben şu şeklde kullanıyorum; ilk önce tek sayı olacak şekilde örnekleme yapıyprum. Mesela 21, 33, 15 tane gibi. Sonra bu örnekleri sıralıyorum küçükten büyüğe. Daha sonra ortadaki 5 ölçümü toplayıp 5'e bölüyorum.

alexsi

#12
Alıntı yapılan: aliveli - 15 Temmuz 2015, 13:53:02
birinci okumayı filtresiz yap
arkadasın dediği gibi yap.Cihaz ilk acıldığında filtreyi devre dışı bırak. Sıcaklığı ekrana bastır. Bir sonraki dongude oraya girmeden filtreye sok.
filtreli okumaya devam et.
http://www.kontrolarge.com/ Bildiklerimiz öğrendiklerimiz kadardır. Ya bilmediklerimiz ..?

ercanatnr

Alıntı yapılan: alexsi - 15 Temmuz 2015, 20:56:51
arkadasın dediği gibi yap.Cihaz ilk acıldığında filtreyi devre dışı bırak. Sıcaklığı ekrana bastır. Bir sonraki dongude oraya girmeden filtreye sok.
filtreli okumaya devam et.
Cihaz ilk açıldığında filtresiz okuma yapmak istedim olmadı switch case yapısı ile denedim ondada çalıştıramadım sizce nasıl yapmalıyım.

papsukkal

While(1)döngüsüne girmeden önce okuma yapıp filtre değerini oluşturup sonra normal düzene dönebilirsin