Lm35 ile Sıcaklık Ölçüp Bilgisayara Aktarma

Başlatan vitruvius, 23 Nisan 2011, 23:00:54

vitruvius

Merhabalar bir süredir lm35 ile sıcaklık ölçüp bilgisayara aktaracak bir devre üzerinde çalışıyorum. Bu benim ilk Pic/CCS C çalışmam. O yüzden oldukça takıldım, bu site çok yardımcı oldu teşekkür ederim tekrar, sağdan soldan da araştırdım, kitaplar da aldım bilgilerimi birleştirip aşağıdaki gibi bir kod yazdım. Sizden isteğim sorunumun çözümünü açıklayıcı bir şekilde amatör olduğumu unutmadan söylemeniz.

Sorunuma gelince sıcaklık bilgisini rs232 üzerinden aktarma işini tam olarak halledemedim. Rs232'nin kodlamasında hata yapmış olabilirim, bir çok projeyi inceliyip ve kitaptaki anlatımdaki bilgileri birleştirip kendim denedim. Virtual terminale yazıyı yazdıramadım. Karmaşık karakterlerle bilgi geliyor ve yeni gelen bilgi diğerinin sonundan eklenip sağa doğru devam ediyor. Tamam, ekranda doğru dürüst bir şey yazmıyor ama karmaşık da olsa /n koymuştum bir sonraki satıra geçmesi için. Seri iletişimdeki hatamı söyler misiniz acaba?

Teşekkür ederim.

CCS C'de yazdığım kod:

#include <16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)
#use fast_io(a) // Port yönlendirme a portu için geçerli
#define use_portb_lcd TRUE
#include <lcd.c>
#use rs232 (baud=9600,rcv=PIN_C7, xmit=PIN_C6, parity=N, stop=1) //rs 232 için
unsigned long int bilgi;
float gerilim, sicak;
int i;
void main ()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_a(0x01); // RA0 giriş olarak yönlendirildi
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0); // RA0/AN0 girişi analog
lcd_init();
set_adc_channel(0); //RA0/AN0 ucundaki sinyal A/D işemine sokulacak
delay_us(100);
printf(lcd_putc,"\f    Proje I");
delay_ms(400);
printf(lcd_putc,"\nSicaklik Sensoru");
delay_ms(600);
printf(lcd_putc,"\f Ogretim Uyesi");
printf(lcd_putc,"\n Doc. Dr. Abdullah BAL");
delay_ms(450);
while (i<23) // Kayan yazı
{
i++;
lcd_send_byte(0, 0x1E);
delay_ms(20);
}
delay_ms(100);
printf(lcd_putc,"\f  Baris Yakut");
printf(lcd_putc,"\n   07013038");
delay_ms(700);
printf(lcd_putc,"\fSicaklik=");
while (1)
{
bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
gerilim=(0.0048828125*bilgi)*1000; //Dijitale çevirme işlemine uğrayan sinyalin mv değeri
sicak=(gerilim/10)-0.3;
lcd_gotoxy(10,1);
printf(lcd_putc,"%5.1f'C"sicak);
delay_ms(100);
printf("Sicaklik: %.1f\n\r",sicak);
}
}


Protesu'ta kurduğum devrenin resmi:


kudretuzuner

Merhaba
PIC'in tx çıkışından çıkan dataların özelliği nedir tam olarak biliyor musunuz?Daha doğrusu şöyle sorayım sıcaklık sensoru hangi sıcaklıkta nasıl bir 8 bitlik bir byte paketi gönderiyor.Bu özelliği bildikten sonra yollanan paketler yazılan basit bir ara yüz ile okunabilir.Benim düşüncem PC'ye giren dataların (1 byte lık paketlerin) ASCII değerlerini bilmek işi kolaylaştırma bakımından önemlidir.
Amatör

vitruvius

Merhaba , bahsettiğiniz konular hakkında bir bilgim yok malesef. Ben sadece CCS ile belirttiğim kodları yazdım, datalar hakkında bilgim yok. Zaten data/byte terimlerine yabancıyım. Siz sorduktan sonra lm35'in datasheetine baktım ama sanırım bu paket gönderme işini bizim kontrol etmemiz gerekiyor? Bu konu hakkında bilgi verebilir misiniz?

Teşekkür ederim.

rf

Merhaba,
CCS C pek bilmiyorum fakat kodda "sicak" dan önce virgül unutulmuş sanki. Bilmiyorum etkisi varmıdır.
printf(lcd_putc,"%5.1f'C"sicak);


hex dosyası ile simulasyon dosyanızı eklerseniz daha çok yardımcı olabiliriz sanırım.

saygılarımla,

Edit: Yazdıklarınız baud rate sorununu işaret ediyor. Kristal sorunu olabilir.
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

vitruvius

printf(lcd_putc,"%5.1f'C"sicak);


Bu kodda sorun yaşamıyorum, lcd'de gözüküyor istediğim her şey. Dosyaları ekleyeceğim ancak CCS C'de compile edince oluşan dosyaların hiçbirini oluştuğu klasörde bulamıyorum. CCS C'de girip open diyince hepsi gözüküyor. Open diyip oluşan dosyalara baktığımda simgelerinin üstüne kilit işareti görüyorum. Sorun bu olabilir mi? Sorun oysa nasıl düzeltebilirim? Aynı şekilde de Proteus'ta yaptığım bütün çalışmaları Program Files'ta göremiyorum. Proteus'u açıp open diyince hepsi gözüküyor ve yine hepsinin simgesinde kilit işareti var. Nedir acaba bunun sebebi?

Demek istediğim şey:





Save as yapıp Proteus dosyamı aldım, aşağıdaki linkte:

https://rapidshare.com/files/458864929/lm35.zip

rf

Merhaba,
Simulasyon dosyasını açabiliyorum fakat  "..\..\..\PICC\Examples\lm35proje.cof" bu dosyayıda vermeniz gerekiyor.

Bu arada simulasyon dosyanızda işlemci frekansı 1mhz görünüyor. CCS de tanımlamalarınız 4Mhz olarak yapılmış.
Bahsettiğiniz bozuk karakterler simulasyonda gördükleriniz ise nedeni budur.

iyi çalışmalar dilerim.
Saygılarımla,
KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

vitruvius

Sayın fxDev ve rf'nin dediklerini uyguladım ve sorunum düzeldi. Max232'yi kullanmazsam bir sıkıntı olmaz mı? Bir de bu dosyaları program files'ta niye bulamıyorum acaba? Teşekkür ederim yardımlarınız için.

rf

max232'yi kullanmanız sorun oluşturmaz ama virtual terminali max232nin TTL tarafına yani soluna bağlamanız gerekiyor ozaman çalışacaktır. (yani işlemcinin bacaklarına)

Simulasyon dosyanız yada derleme sonucu çıkan cof doyalarının illaki program files altında olma zorunluluğu yok başka bir yere kaydetmiş olabilirsiniz.

iyi çalışmalar dilerim.




KOSGEB Girişimcilik Desteği Bilgi ve Paylaşım Platformu http://www.girisimcilikdestegi.com/

vitruvius

Evet işlemcinin bacaklarına bağlayınca çalıştı. Teşekkür ederim.

CCS C ve Proteus'ta kaydettiğim dosyaların yerini ellemiyorum, hepsi Program Files'ta verdiğim resimde CCS C'den open diyip program files'ın altına gidince dosyalar görüyor aynı yere Bilgisayarımın içinden gidince aynı klasörde sadece desktop ve "projects" adlı image gözüküyor. Zaten Farklı kaydet diyip yeni yarattığım bir klasöre kaydedince de o klasöre çift tıklayıp bakınca boş gözüküyor. Ancak CCS C'den girip aç dediğim zaman içindeki dosyalar gözüküyor.

Bu arada farkettim ki compile edince .hex dosyası oluşmuyor. BAK dosyası, C Source, C Object File, ERR Dosyası, ESYM Dosyası, ICD, MASM Listing, C Source File, C Output File oluşuyor.