TERMISTOR KULLANIMI

Başlatan oyhan, 17 Ocak 2005, 16:42:30

oyhan

SELAM
PICLERİN ANALOG PORTLARINI KULLANARAK DAHA ÖNCE HİÇ ISI ÖLÇÜMÜ YAPTINIZMI? PICLERDE ANALOG POTLAR NASIL KULLANILIR? ÖRNEGIN 16F877 İÇİN  ANALOG PORTLARIN KULLANIMI ILE ILGILI DOKUMANI OLAN VARMI?
BİRLİKTEN KUVVET DOĞAR:

Ersin

Oyhan, biraz board u dolas hatta google da ara "16f877+thermo"  , o kadar cok bilgi var ki.Arastirmadan bu is olmaz  :D

tnen

Hocam bu kodu bir dene

kod ve proteus 6.5 Sp5 de hazırlanan DSN dosyası ve MCS de yazılan kod aşağıdaki adreste


http://groups.yahoo.com/group/PicProjeUP/files/Termo/

[/img]

ete

@Oyhan,

Anlaşılan bu konuda bayağı tecrübesizsin. Genelde tarmistör dediğimiz şey sıcaklıkla direnci değişen bir elemandır. Ancak sıcaklığa bağlı olarak tüm değer değişmez. Benim edindiğim tecrübelerde genelde değerin üçte biri değişmektedir. Bu oran yinede çalıştığın sıcaklık aralığına bağlıdır. Örneğin 0-50 derece arasındaki değişimle 0-100 derece arasındaki değişim aynı olmayacaktır. Buradan yola çıkarak bana kalırsa şöyle bir yol takip et.
Öncelikle simulasyon devresinde kullanacağın termistörü iki parçalı eleman olarak kullan. Birinci (R1) parça bir ucu GND ye bağlı sabit bir direnç ki bu termistörün değişmeyen kısmını temsil etsin. Diğeri buna seri olarak kullanacağın ayarlı direnç ki (R2)  buda termistörün değişen bölümünü temsil etsin. Bunlara üçüncü bir eleman olarak seri 1K lık bir direnç bağla(R3). Bu 1K direncin üst kısmına referans voltajını gir (+5V). Ayarlı dirençle 1K direncin bağlı olduğu noktayı ise Pic'in ADC0 bacağına gir. Böylece sistemin çalışmaya hazır olur. Yine benim tecrübelerimde ayrıca dış devre istemeyen uygun değerin 2K-5K arası olduğunu gördüm. Bu değer termistör değeridir. Örnek olarak termistör değerini 5 K alalım. BU durumda  R1 direncini 3K3 alalım R2 ayarlı direnci 1K8 alalım R3 zaten 1K sistemi bu şekilde kurduktan sonra programa başlayabiliriz.
Önce kaç bit ADC çevrimi yapacağını kararlaştır. 8 bit veya 10 bit çalışabilirsin. Bunu ;

DEFINE ADC_BITS 8  (veya 10) KOMUTU YAPACAKTIR.

Çevirim için kullanacağın Clock kaynağını tepit et. Genelde aşağıdakini kullan.
DEFINE ADC_CLOCK 3 ‘(rc =3)

Daha sonra örnekleme zamanını seç

DEFINE ADC_SAMPLEUS 50

Daha sonra analog olarak kullanmak istediğin bacakları ayarla. Bunu;

ADCON1=0 dediğin zaman tüm ADC girişleri analog yapılır. İstersen bazı

girişleri digital olarak bırakabilirsin. Bunun için F877 nin data sheetini incele.

Bundan sonra programa yani ADC okumaya başlayabilirsin.
İstersen şöyle başla;

OKU:
      ADCIN0, HAM  'Burada ham okunan ADC değeri olacaktır)
bak: If ADCON0.2=1 then BAK 'yani ADC işlemi bitmemiş ise tekrar bak'a git
      Bu aşamaya kadar ADC okumasını yapmış oldun ve elinde HAM yani işlenmemiş bir bilgi var. Şimdi bu bilgiyi sıcaklık bilgisine çevireceğiz.
Diyelimki 0-100 derece arasındaki sıcaklıkları okumak istiyoruz. Bunun anlamı şudur. Bizim termistör'ün değişen bölümü 1K8 idi. Termistör olarak genelde NTC tipi yani ısı arttıkça direnci küçülen elemanlar kullanılır. Bu şu demektir. 100 derecede bizim 1K8 direnci sıfır olacaktır. Dolayısıyla okunan ADC değeride 8 bitte 255 olarak gelecektir. Sıfır derecede ise direnç değeri 1K8 değerine ulaşacak ve okunan ADC değeri ise 0 olacaktır.
Aslında termistörlü sistemlerde bu değerler burada söylendiği gibi çok net bir aralık olmayacaktır. Belki 25-200 arasında kalacaktır veya biraz daha değişik olacaktır. Ancak senin olayı anlayabilmen için okunan değerleri 0-255 kabul edeceğiz. SOnra okunan değere göre sen gerekli ayarlamanı yaparsın.
Bu durumda şöyle bir hesap yapmamız gerekir.
Bizim 255 değeri 100 dereceye tekabül ediyor. 0 değeri ise 0 dereceye. DOlayısıyla okunan ADC başına olması gereken derece değeri 100/255 dir. Bunu okunan değer ile çarpınca direkt dereceyi buluruz. Tabiiki okunan değer lineer ise bu geçerlidir. Genelde okuma değerleri lineer kabul edilir ve ufak tefek sapmalar program içinde düzeltme faktörleri ile düzeltilir.
Doğru hesap için WORD değişkeni tanımlamalısın. Böylece okunan değeri
100 ile çarpacak sonra 255'e böleceksin. Diyelimki okuduğumuz sıcaklık değeri 85 olsun. Şimdi bu kaç dereceye tekabül ediyor bulalım;
HAM=85   HAM= 85*100=8500,   ISI=8500/255=33 Derece olarak bulunur. Aslında bu hesap değeri 33,33 olarak çıkar. Şayet küsüratıda hesaplayıp ekranda göstermek istersen şöyle bir hesap yapman gerekir.
Ondalık=((85*100)//255)*100/255
Buraya kadar anlatılanları anladı isen şimdi kendin bir sistem kurup yapabilirsin sanırım.

Kolay Gelsin
ETE
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

oyhan

SEVGİLİ ETE
Çok teşekkür ederim sen zor günlerin adamısın. Farkettiğin gibi adc konusunda hiç tecrübem yoktu çok iyi oldu bu açıklama en azından basicde bu iş nasıl yapılır bunu tecrübe ettim. Yoksa araştıma yapmaya erindiğimden değil neyi arayacağımı bilmediğimden sordum. Herkeze Teşekkürler...
BİRLİKTEN KUVVET DOĞAR: