avatar_BİDİL

LM35 SENSÖRÜ

Başlatan BİDİL, 06 Nisan 2015, 18:57:03

BİDİL

Arkadaşlar Merhaba;

Elimde fi tarihinden kalma 7 segment saat devrem var ve buna sıcaklık eklemek istiyorum.LM35 uzun zamandır elimde bulunan bir malzeme kullanayım bari dedim. Entegre olarak 4550 ile çalışıyorum. A/D konusunda baya bir zayıfım, derme çatma birşeyler yapmaya çalıştım ama ekranda sürekli değişen rakamlardan başka elimde hiç bir şey yok.Programda saat kısmı ile alakalı bütün bilgileri sildim ve sadece ısı üzerine çalışıyorum. Biliyorum biraz vakit alacak ama hatalarımı teker teker söylemenizi rica ediyorum.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2015 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 6.4.2015                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISA=%00000001
DEFINE OSC 4
asm
   ;__CONFIG _CONFIG1L, _PLLDIV_12_1L & _CPUDIV_OSC1_PLL2_1L;20MHZ
    __CONFIG _CONFIG1L, _PLLDIV_1_1L & _CPUDIV_OSC1_PLL2_1L ; 4MHZ
    ;__CONFIG _CONFIG1H, _FOSC_HS_1H &_FCMEN_OFF_1H &_IESO_OFF_1H; 20 MHZ
    __CONFIG _CONFIG1H, _FOSC_XT_XT_1H &_IESO_OFF_1H;4 MHZ
    __CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_OFF_2L &  _VREGEN_OFF_2L
    __CONFIG _CONFIG2H, _WDT_OFF_2H   
    __CONFIG _CONFIG3H, _MCLRE_OFF_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_OFF_3H   
    __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L &_XINST_OFF_4L  & _DEBUG_OFF_4L   
    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
    __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTB_OFF_6H & _WRTC_OFF_6H  & _WRTD_OFF_6H
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
endasm

DEFINE ADC_BITS 10     'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 1     'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 20 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------

X VAR WORD
ISI   VAR word
HAM   VAR WORD
ONDA  VAR BYTE
SAYI VAR WORD
SYMBOL  DTA=PortB.0
SYMBOL  CLK=PORTB.1

'-------------------------------------------------------------------------------
BASLA:
      ADCIN 0,HAM  '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
     
BAK:  IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.

'50 derecede okunan ADC değeri 256 ve 0 derecede okunan 146 olduğundan
'0-50 derece arası okunan değer farkı 110 dur (256-146) . O halde her bir derece
'için okunması gereken değer 110/50=2,2 olacaktır. Pic e uyarlamak için
'okunan değeri 10 ile çarpıp 22 ye bölersek direkt sıcaklığı bulmuş olacağız.

      ISI=(HAM*150)/77
      ONDA=ISI//10
      ISI=ISI/10

     
     
      X= ISI DIG 1:GOSUB AL
      SHIFTOUT DTA,CLK,1,[SAYI]
      HIGH PORTB.2:PAUSEUS 5:LOW PORTB.2
       
      X= ISI DIG 0:GOSUB AL
      SHIFTOUT  DTA,CLK,1,[SAYI]
      HIGH PORTB.3:PAUSEUS 5:LOW PORTB.3

      X= ONDA DIG 1:GOSUB AL
      SHIFTOUT DTA,CLK,1,[SAYI]
      HIGH PORTB.4:PAUSEUS 5:LOW PORTB.4
       
      X= ONDA DIG 0:GOSUB AL
      SHIFTOUT DTA,CLK,1,[SAYI]
      HIGH PORTB.5:PAUSEUS 5:LOW PORTB.5
     
      pause 1000
      goto basla 

AL:    LOOKUP X,[63,6,91,79,102,109,125,7,127,111,99,57],SAYI :RETURN

EMKE

LM35 sensöründen yaklaşık 10-20 adet okuma yap ve bunların ortalamasını al,bu şekilde ekranda sürekli değişen rakamlar sabitlenecektir.

Hattuşa

sitede buble short diye arat, güzel bir filtre algoritması işe yarayacağını düşünüyorum, yok yetersiz dersen burak gunay ustanın paylaştığı rahmetli darrel ustanın algıritmasını uygula işe yarayacaktır. tabi şu da var, işlemcinin adc girişine konacak basit bir cond. çok daha iyidir.

Maxim

hayır ortalama almaya şu an için gerek yok
LM35 çıkışı doğru bağlıysa ve program düzgün ise ekranda değer oynamaz.

1-lm35 ile pic analog girişi arasına 1K - 10k arası değerde bir direnç bağlayın
2-pic analog girişi ile şase arasına 100nf kondansatör koyun

bakalım gene oynayacakmı?

ete

Kimse yanlış yada eksiklere değinmemiş.
LM35 sensörü derece başına 10mV voltaj üreten bir analog sensördür. Dolayısıyla sıcaklık hesabı buna uygun yapılmalıdır.
Sıcaklık aralığı ise -55 ile +150 derece arasındadır. Maksimum sıcaklık 150 derece ise hesaplama formülüde buna uygun olmalıdır.
Senin formüle bakalım istersen;
      ISI=(HAM*150)/77
Bu sensör 150 derecede (maksimum sıcaklık) 1500mv luk bir voltaj verecektir. ADC kanalı bunu 309 olarak okuyacaktır.
309 x 150/77=601 olarak hesaplayacaktırki tamamen alakasız bir sıcaklık olacaktır bu.
Peki doğru formül ne olmalıdır.
Mademki en yüksek okunacak değer 309 dur ve buda 150 dereceye tekabül eder o halde formülümüz
(150/309)*256=124 bu bizim sabit çarpanımız olacaktır. Rakam 124 ama küsüratlarıda olduğu için bunu 1243 olarak kullanacağız.
ISI=Ham*/1243
Bu işlem aslında HAM x 1243/256 işlemine karşılık gelmektedir. Sonuçta sıcaklığın 10 fazlasını hesap ederek ondalık kısmınıda hesaplamış olacağız.  O halde net formüllerimiz;
ISI=Ham*/1243
ONDA=ISI//10
ISI=ISI/10
şeklinde yapılacaktır.

Sigorta ayarlarını vermişsin bu tamam ama işlemcinin bir sürü bacağı var. Sonuçta bazı bacaklarıda kullanacaksın. Hiç kullanmasan bile onları doğru şekilde ayarlaman gerekmezmi? sen yalnızca TRISA=%00000001  komutunu vermişsin diğerleri nerede?
Ayrıca bu işlemcinin komparatör özelliği  de var kullanmadıklarını iptal etmen gerekmezmi?

Aslında bir şeyler yazdım bakın hatam ve eksiklerim neyse söyleyin demek işin kolayına kaçmak olmuyormu sence. Bu şekilde hiç bir şey öğrenemezsin. Etrafında birileri olduğu müddetçe sormak mümkün ama ya olmazsa o zaman kendi başının çaresine bakmayıda bilmelisin.
İşlemci ile didişmeniz gerekir. yapın sorun varsa sebebini araştırın bulun düzeltin. Olmadı yeniden araştırın. Artık bıçak kemiğe dayanınca sorun. Benden tavsiye.

Ete

BİDİL

@EMKE
Söylediğin gibi yaptım epey faydalı oldu.
@Maxim
Bahsettiğin malzemeler yerini alınca ekran sabitlendi.

Erol Hocam bahsettiğiniz gibi komparatör pinlerini iptal ettim. Diğer bacaklara gelince Portb de 595 entegrelerini sürüyorum ve ilgili tanımlamaları yaptım. Ekranda ısıyı alıyorum biraz ısıtınca artış var ve tekrar eski durumuna geliyor ancak ölçüm değeri yanlış veriyor.Ortam sıcaklığı 25 derece iken LM35DZ nin çıkışından 250mv ölçüyorum ancak ekranda 15 derece veriyor. Verdiğiniz formülle ilgili 150 derecede pic'in okuduğu değer 309 olduğunu belirtmişsiniz bunun bir formülümü var yoksa bu değer sabitmidir?
Bazı çalışmalarda LM35dz için 0-100 derece arasında ölçüm yaptığı söyleniyor ve formül olarak ISI=(HAM*61)/125 uygulanmış.
http://etepic.com/index.php/topic,425.msg4531.html#msg4531
Bu konuda nasıl bir yol izlemem gerekiyor?

ete

Data sheet 150 derece ye kadar çalışır diyor ve 150 derecede ise 1500 mv voltaj verir diyor.
Adc ölçümü 5 volt için 1023 değerini verir. Basit bir orantı ile 1,5v için 306,9 değerini alacağınızı hesaplarsınız. Bu değer elbette 306 olarak okunur. 309 verdi isem hata olmuş 306,9 yani 306 olması gerek.

Hiç bir zaman 100 dereceyi aşmayacak ölçümlerde 100 derece (1000 mv) esas alınarakda formül oluşturulabilir. Ama sonuç yine aşağı yukarı aynı çıkması gerekir.
100/204*256=125 değeri elde edilir. Buda işk formülün doğru olduğunu gösteriyor.
İlk formülü yeniden hesaplarsak  (150/306)x256=125,49 olacak, bunu 1255 olarak kullanmak daha doğru olacaktır.

Ete

ferruh

sayın hocam lm35 li devre kurdum sanırım hesap atası olacakkı oda ısısı gercekte 20-21 derece arasında ıken 5 derece olarak okuyorum.
    FOR I = 1 TO 10
    ADCIN 0, HAM1
    HAM=HAM+HAM1
    PAUSE 5
    NEXT I
    HAM=HAM/10   ' 10 DEFA ÖLÇÜP ORTALAMASINI ALIYORUZ
    OKU=HAM*/1244
    OKU=OKU/10
    LCDOUT $FE,1
    LCDOUT $FE,2,"SICAKLIK="#OKU,"C"

ete

Öncelikle buradaki formülü hangi mantığa göre hesapladınız onu açıklayın.
Ayrıca programın başlangıç kısmını buraya koymazsanız yine cevap vermemiz mümkün gözükmüyor.
Zira hem formül hemde onun kullanımını etkileyebilecek bazı şeyleri baş kısımda görmek isterim.
Değilse mesajına şu yanıtı vermem gerekir.
Okunan ADC değerini 1244 ile çarp 256 ya böl ve çıkanı tekrar 10'a böl olsun bitsin.
Burada bir diğer önemli faktör de sensörün 20 derece sıcaklık için ADC üzerinde kaç voltluk bir sinyal oluşturuyor? bunuda bilmek sonuca gitmeyi hızlandıracak.

Ete

muratguenduez

Alıntı yapılan: Maxim - 07 Nisan 2015, 08:24:44
hayır ortalama almaya şu an için gerek yok
LM35 çıkışı doğru bağlıysa ve program düzgün ise ekranda değer oynamaz.

1-lm35 ile pic analog girişi arasına 1K - 10k arası değerde bir direnç bağlayın
2-pic analog girişi ile şase arasına 100nf kondansatör koyun

bakalım gene oynayacakmı?


http://etepic.com/index.php/topic,2873.0.html

maxim hocam bi bakarmısınız başk bi sorun var da =)

karabayram

Arkadaşlar iyi günler. Lm35 sensörü ile su sıcaklığını ölçebilirmiyiz.Yalniz hassas ölçüm yapmam için sensörü suyun içine batirmam gerekli bu durum sensörü bozar mı?

mg1980

Bacakları arasına yalıtım yapılmalı diye düşünüyorum.DS18B20 'yi düşünmüyor musunuz ?

karabayram

Teşekkür ederim.Neden 18B20 açıklarmısın?. Bir de sensörü suyun içine tamamen batırmayacağım sadece kombi çıkışını ölçmek için boruyu delip kılavuz açıp yerleştireceğim. Suya sadece siyah silikon kısım temas edecek.

mg1980

Bacaklarına su temas etmezse olabilir. LM35 ile ADC vasıtasıyla yapacaksınız sanırım. DS18B20 digital ve daha sağlıklı ölçer diye düşünüyorum.Sizi fazla uğraştırmaz.

Powered by EzPortal