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?
(http://i.hizliresim.com/9VkBzZ.png) (http://hizliresim.com/9VkBzZ)
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:
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
(http://i.stack.imgur.com/2Re5M.jpg)
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?
(http://i.hizliresim.com/7oRlnr.png) (http://hizliresim.com/7oRlnr)
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:
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
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?
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ş
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
If sonuc > 20 and sonuc<30 Then
PORTC.0=1
Else
PORTC.0=0
EndIf
olarak dene
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.
http://i.stack.imgur.com/2Re5M.jpg (http://i.stack.imgur.com/2Re5M.jpg)
http://www.oocities.org/elektronikevii/pic/karisik/op-amp10.gif (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
https://www.picproje.org/index.php/topic,66531.0.html
Burada ccs c ile yapılmış var