NTC ile Sıcaklık Ölçümü

Başlatan picker, 20 Nisan 2009, 01:55:00

ALakurt


Murat Mert

S.A.
Sayfa olarak güzelmiş. Yukarıdaki programda çok güzel işe yarıyor aslında.
mert07

ertsen

#47
arkadaşlar bu başlıktaki formülleri kullanarak 16f877 ile bir termostat yaptım. çok güzel çalışıyor. Şimdide ucuz olduğu için 16f716 aldım ancak aşağıdaki formül satırına gelince rom bellek doluyor.
"a segment or the program is too large exp"
T = (1.0/(Ra + Rb*LnRt + Rc*pow(LnRt, 3.0)))-273.15;

pow(LnRt, 3.0)
fonksiyonunu kaldırdığımda rom hatası olmuyor. internetten yaptığım araştırmalara göre bu hata bir fonksiyonun ana programdan büyük olması nedeniyle meydana geliyor. Acaba bu fonksiyonu başka türlü yazma imkanı olabilirmi. pic'imi değiştirmek gerekiyor. önerileriniz nedir?

AsHeS

Alıntı yapılan: ertsen - 21 Ocak 2013, 20:41:27
arkadaşlar bu başlıktaki formülleri kullanarak 16f877 ile bir termostat yaptım. çok güzel çalışıyor. Şimdide ucuz olduğu için 16f716 aldım ancak aşağıdaki formül satırına gelince rom bellek doluyor.
"a segment or the program is too large exp"
T = (1.0/(Ra + Rb*LnRt + Rc*pow(LnRt, 3.0)))-273.15;

pow(LnRt, 3.0)
fonksiyonunu kaldırdığımda rom hatası olmuyor. internetten yaptığım araştırmalara göre bu hata bir fonksiyonun ana programdan büyük olması nedeniyle meydana geliyor. Acaba bu fonksiyonu başka türlü yazma imkanı olabilirmi. pic'imi değiştirmek gerekiyor. önerileriniz nedir?
en tepeye #include <math.h>   satırını koyduğunu farzederek diyebilirim ki o fonksiyonu  (LnRt*LnRt*LnRt)  bununla değiştir.Program hafızası o kütüphane fonksiyonlarına yeterli gelmiyor ya daha geniş ROM lu bir pic kullan ya da yazılımı optimize etmeye çalış ve de math.h kütühanesinden kurtularak diğer fonksiyonları ROM'a yazmasını engelle.

ertsen

Alıntı yapılan: AsHeS35 - 21 Ocak 2013, 21:01:15
en tepeye #include <math.h>   satırını koyduğunu farzederek diyebilirim ki o fonksiyonu  (LnRt*LnRt*LnRt)  bununla değiştir.Program hafızası o kütüphane fonksiyonlarına yeterli gelmiyor ya daha geniş ROM lu bir pic kullan ya da yazılımı optimize etmeye çalış ve de math.h kütühanesinden kurtularak diğer fonksiyonları ROM'a yazmasını engelle.

math. h'ı kullanıyorum. (LnRt*LnRt*LnRt)  yide denedim ancak sonuç aynı. math.h'ı da düzenleyim gereksizleri kaldırayım dedim, oda bayağı karışık. en güzeli biraz daha büyük roma sahip bir pic'le devam etmek galiba. Teşekkür ederim.

fractal

bir sürücüden ntc söktüm ama tipi nedir ?bilmiyorum.bu ntc lerin hepsi  aynımıdır?üzerinde kod filan yazmıyor.burdaki yazılımları bunun üzerinde uygulayabilirmiyim?

Restantum cogniscutur Quantum deligutur

JKramer

25 derecede ölçtüğünüz değer neyse ntc'nin değeri odur. Yine ölçüm yaparken ısıtın, değeri artıyorsa ptc, azalıyorsa ntc'dir. Bunların dışında kataloğuna ulaşamıyorsanız, önceki sayfadaki yöntemlerle (kaynatma,vs.) uğraşmanız gerekecek. Bilgilerine ulaşabileceğiniz bir ürün alsanız daha kolay olur sanırım :).

ustad

Alıntı yapılan: fractal - 07 Şubat 2013, 10:53:32
bir sürücüden ntc söktüm ama tipi nedir ?bilmiyorum.bu ntc lerin hepsi  aynımıdır?üzerinde kod filan yazmıyor.burdaki yazılımları bunun üzerinde uygulayabilirmiyim?

(Resim gizlendi görmek için tıklayın.)

Merhaba,
Lug tip diye geçer bu tip ntcler.
http://www.google.com/search?ie=UTF-8&oe=UTF-8&sourceid=navclient&gfns=1&q=lug+type+ntc

oyaz

Konuyu hortlatıyorum ama NTCCal. programı için verilen link açılmıyor.Tekrar yükleyebilecek ya da gönderebilecek olan var mı?
Become a learning machine...

ECHO

#54
FORM SİTELERİNDE BİLGİ PAYLAŞILIR 
BAHSEDİKEN PROJENİN KAYNAK KODLAR (SERİ DİREN 10K, NTC 25 DERECEDE 10K ) DEĞERLERİNE GÖRE HESAPLANMIŞTIR  >:(


#include <16F88.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)
   #define use_portb_lcd TRUE   
   #define LCD_ENABLE_PIN PIN_B3
   #define LCD_RS_PIN PIN_B1
   #define LCD_RW_PIN PIN_B2
   #define LCD_TYPE 1
   #include <lcd.c>
   #include <math.h>
   
   // which analog pin to connect
   
#define THERMISTORPIN A0         // resistance at 25 degrees C
#define THERMISTORNOMINAL 10000  // temp. for nominal resistance (almost always 25 C)
#define TEMPERATURENOMINAL 25   // how many samples to take and average, more takes longer

#define NUMSAMPLES 5 // The beta coefficient of the thermistor (usually 3000-4000)
#define BCOEFFICIENT 3950  // the value of the 'other' resistor
#define SERIESRESISTOR 10000   

int samples[NUMSAMPLES];
unsigned int t ,i;
float average;
float steinhart;
   

void main()
{
   lcd_init();
   setup_adc_ports(sAN0|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_32);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();   
   set_tris_a(0xFF);
   set_tris_b(0x00);
   lcd_putc("\f");
   lcd_putc("EVRENSEL ISI KONTROL");
   delay_ms(100);
   
   
       
       while(1)   
   {
   
   set_adc_channel(0);

  for (i=0; i< NUMSAMPLES; i++)
  {
   samples = read_adc();
   delay_ms(10);
  }
 
 
  for (i=0; i< NUMSAMPLES; i++)
  {
     average += samples;
  }
  average /= NUMSAMPLES;
 
  average = 1023 / average - 1;
  average = SERIESRESISTOR / average;

  steinhart = average / THERMISTORNOMINAL;          // (R/Ro)
  steinhart = log(steinhart);                       // ln(R/Ro)
  steinhart /= BCOEFFICIENT;                        // 1/B * ln(R/Ro)
  steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart;                      // Invert
  steinhart -= 273.15;

  lcd_putc("\f");
  printf(lcd_putc,"%3.1f 'C",steinhart);
  delay_ms(1000);

   }
}

mistek

10k NTC ile logaritmik hesaplarla uğraşmadan en kolay ve en az yer kaplayacak şekilde 0.2 derece hassasiyetle nasıl sıcaklık okuyabilirim?

Şuan logaritmik hesaplamayla sıcaklığı okuyorum ancak bu bana 2kb hafıza kaybına mal oluyor. Daha ekonomik çözümler nedir? Tablo mu yapayım ? 
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

ErsinErce

tablo boyutunuz 11 bit okuma yaparsanız kafa kafaya denk geliyor.
10 bit olursa 1kB kazançtasınız tabi 1C-2C şeklinde görmek yeterliyse
diğer türlü 10 bit kafa kafaya gelir
NTC ile 0.2 derecelik yüksek çözünürlüğe ihtiyaç neden peki ?

mistek

Yani virgülden sonrada bişeyler göstermek için aslında çokta kritik değil (Ortam sıcaklığı ölçülecek)

ADC 12bit ama Çözünürlükte çok sıkıntı değil. 1kb kazanç iyi bi değer. Bununla ilgili bir örnek var mıdır? Daha doğrusu hazır yapılmış bir tablo.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R

ErsinErce

önceki sayfalarda PC yazılımı mevcut NTC nin ve pull-up direncinin değerlerini girip istediğiniz tabloyu alabilirsiniz

mistek

Ntc_Calc programı elinde olan yükleyebilir mi? Linkler uçmuş.
boş işlerin adamı ---- OHM Kanunu: I = V/R ---- Güç Formülü: P = V*I = I^2*R = V^2/R