LM35 negatif sıcaklık

Başlatan DİRİLİŞ_MAK, 11 Nisan 2015, 23:18:52

DİRİLİŞ_MAK

Arkadaşlar LM35 ile sıcaklık bilgisi LCD'ye aktaran bir program ve devre oluşturdum. LM35 ile ilgili kullanım bilgisine ve voltaj-sıcaklık dönüştürme işlemini Serdar ÇİÇEK'in CCS C ile PIC Programalam kitabından faydalanarak yaptım. PIC 16f877 ve 10  bitlik ADC kullandım. Kitaptaki hesap;
voltaj=(0.004828125*okunan adc degeri)*1000;
sicaklik=voltaj/10;
LM35'in ölçme aralığının -50 ve +150 arasında  olması için devrede gördüğünüz R2 direncini bağlayıp -5V uyguladım (kitapta bu şekil ve birde diyotlu kullanımın negatif sıcaklık vereceği yazıyor) ama LCD ekranda negatif sıcaklık okuyamadım.0 dereceden daha aşağı inmiyor. Sorunu nasıl çözebilirim?



Device 16F877
XTAL 4

Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.2 
Declare LCD_RSPIN PORTB.0 
Declare LCD_INTERFACE 4 
Declare LCD_LINES 2

ADCON1 =%10000000 
TRISA = %00000001 
Dim Sicaklik As Word
Dim hesap1 As Float  
Dim hesap2 As Float 

DelayMS 250
Cls

basla:
Sicaklik=ADIn 0
DelayUS 50
hesap1=(0.0048828125*Sicaklik)*1000
hesap2=(hesap1/10)
Print At 1,1, "SICAKLIK:"
Print At 1,11,DEC1 hesap2," C "
DelayMS 1000
GoTo basla:


Maxim

hiç lm35 ile negatif sıcaklık ölçme yapmadım ama
onun 2 çeşidi var bildiğim kadarı ile

birincisi çıkışa negatif voltaj eklemek
fakat bu şekilde pic, gelecek negatif voltajı göremeyeceğinden arada opamplı devre falan yapmak lazım sanırım

ikinciside lm35 in gnd ayağına 2 tane IN914 seri diyot takarak 2. bir adc çıkışı almak
sonra 2. adc girişinde okuduğumuz değeri 1. den çıkarmak
yani 2 tane adc kullanacağız.

devrede şöyle birşey

DİRİLİŞ_MAK

#2
Bağlantıyı ve programı dediğiniz şekilde düzelttim. Negatif sıcaklıklarda gözükmeye başladı. Programı da inceler misiniz bir daha herhangi bir hata var mı? Gerçek hayatta stabil ve doğru olarak çalışır mı bu şekliyle yoksa eklenti yapmak gerekli mi?



Device 16F877
XTAL 4

Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN PORTB.2 
Declare LCD_RSPIN PORTB.0 
Declare LCD_INTERFACE 4 
Declare LCD_LINES 2

ADCON1 =%11000000 
TRISA = %00000011 
Dim Sicaklik As Word
Dim nsicaklik As Word
Dim hesap1 As Float  
Dim hesap2 As Float
Dim hesap3 As Float 
Dim hesap4 As Float
Dim sonuc As Float

DelayMS 250
Cls

basla:
Sicaklik=ADIn 0
DelayUS 50
hesap1=(0.0048828125*Sicaklik)*1000
hesap2=(hesap1/10)
nsicaklik=ADIn 1
DelayUS 50
hesap3=(0.0048828125*nsicaklik)*1000
hesap4=(hesap3/10)
sonuc= hesap2-hesap4
Print At 1,1, "SICAKLIK:"
Print At 1,10,DEC1 sonuc," C "
DelayMS 1000
GoTo basla:

Maxim

işlemci sigorta ayarları yok (fuse)

kullanılmayan pinleri çıkış tanımlayın
TRISA = %00000011
TRISC = %00000000
TRISC = %00000000

MCLR girişinde 47nf kondansator olsun
yani butonu 47nf ile değiştirin

işlemci besleme ayaklarında 100nf mutlaka olsun

portA.0 seri bir 4k7 ekleyin, sonra gnd ile arasına 100nf koyun

Print At 1,1, "SICAKLIK:"
Print At 1,10,DEC1 sonuc," C "
yerine

Print At 1,1, "SICAKLIK:",DEC1 sonuc," C "
yazabilirsiniz

ahmetbudak

Alıntı yapılan: Maxim - 12 Nisan 2015, 15:00:28
işlemci sigorta ayarları yok (fuse)

kullanılmayan pinleri çıkış tanımlayın
TRISA = %00000011
TRISC = %00000000
TRISC = %00000000

MCLR girişinde 47nf kondansator olsun
yani butonu 47nf ile değiştirin

işlemci besleme ayaklarında 100nf mutlaka olsun

portA.0 seri bir 4k7 ekleyin, sonra gnd ile arasına 100nf koyun

Print At 1,1, "SICAKLIK:"
Print At 1,10,DEC1 sonuc," C "
yerine

Print At 1,1, "SICAKLIK:",DEC1 sonuc," C "
yazabilirsiniz
"portA.0 seri bir 4k7 ekleyin, sonra gnd ile arasına 100nf koyun" demişsiniz bunun sebebi nedir bir de bu işlemi RA0 ANALOG  gitrişinede uygulamamız gerekmez mi?

Maxim

doğru aynı şey, diğer analog girişede uygulamak lazım

sebebi low pass filtre yaparak dalgalanmaları engellemek
gerçi arkadaş 1sn lik bekleme koymuş

DİRİLİŞ_MAK

Programa ek olarak sıcaklık belli değerler arasındaysa bir motor çalışsın değilse motor dursun demek istiyorum şu şekilde bir kod yazdım ama hata alıyorum. Yazımda yanlılık mı var? (sıcaklık değeri sonuc değişkenine yazdırılıyordu)
If 20<sonuc<30 Then 
PORTC.0=1
Else 
PORTC.0=0
EndIf

ahmetbudak

If sonuc > 20 and sonuc<30 Then 
PORTC.0=1
Else 
PORTC.0=0
EndIf


olarak dene

zeka43

Hiç işlemci işine girmeden kullanabileceğimiz pot okuyup ntc ile ölçüm yapan termostat entegresi yokmudur acaba. Analok bir oda termostadında görmüştüm entegreyi kazımışlar pek fazla incelemedim ama hatırladığım çok az parça var dı 18 pin bir entegre pic olma ihtimali yüksek 3 jumper birkaç direnç ve bir pot 2 ntc gibi birşey di.

ido2323

http://i.stack.imgur.com/2Re5M.jpg
http://www.oocities.org/elektronikevii/pic/karisik/op-amp10.gif
bu devreyi kullanıp opamp ile fark alıcı devre yapacaksın fakat kullandığın dirençler %1 lik olsun

sifirzero

sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir