Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

daha fazla lm 35

Başlatan mcn, 21 Temmuz 2008, 23:52:48

mcn

Alıntı Yap#include<16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#define use_portb_lcd TRUE
#include<lcd.c>
unsigned long int bilgi;
float voltaj,sicaklik;

//ANA PROGRAM
void main(){
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_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);//A PORTU GİRİŞ
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);

lcd_init();

set_adc_channel(0);

delay_us(20);

printf(lcd_putc,"\fB.sicaklik=");// lcd ye sıcaklık yazdırılıyor

while(1)
{
bilgi=read_adc();
voltaj=(0.0048828125*bilgi)*1000;

sicaklik=(voltaj/10)+2;

lcd_gotoxy(10,1);
printf(lcd_putc,"%5.1f'C",sicaklik);

delay_ms(100);

}
}

Bir kaynaktan bu şekilde LM35 li ısı sensörü kodları buldum. ADC ile ölçme yapılıyor ve ekrana değeri yazıyor.
sorum şu:
devreye 2 tane daha lm35 bağlayıp başka yerlerinde ısısını görmek istesem,bunun için kodlara ne eklemem gerekli?Biraz uğraştım ama içinden çıkamadım.
Şimdiden teşekkürler...
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

tayyar

öncelikle

setup_adc_ports(AN0);

bu satırda AN0_AN1 gibi bir değişiklik yapıp kaç tane analog port kullanmak istiyorsan onları secmen lasım, 8 kanal analogu açmak için ALL_ANALOG yazılacak,

Daha sonra program içerisinde okumak istedigin analog kanalı seciceksin;

set_adc_channel(0);
set_adc_channel(1); gibi



atıyorum AN0_AN1 portlarını actıgı varsayalım

program içerisinde

set_adc_channel(0);
delay_us(20);
bilgi=read_adc(); //1 kanaldaki analogtan dijitae cevrilmiş bilgi bilgi degişkenine atılır


set_adc_channel(1);
delay_us(20);
bilgi2=read_adc(); //2 kanaldaki analogtan dijitae cevrilmiş bilgi bilgi degişkenine atılır


daha sonra bu dijital bilgileri istedigin gibi evirip çevirirsin
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

mcn

@tayyar,çok teşekkürler
kodu aşağıdaki gibi değiştirdim ancak,ekrandaki 2 değerde sonra tanımlanmış olan analog girişin değerini gösteriyor.ikiside aynı oluyor ve değiştimi ikiside değişiyor.Sanki aynıymış gibi.

//-

#include<16f877.h>
#device ADC=10
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#define use_portb_lcd TRUE
#include<lcd.c>
unsigned long int bilgi,bilgi2;
float voltaj,voltaj2,sicaklik,sicaklik2;

//ANA PROGRAM
void main(){
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_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);//A PORTU GİRİŞ
setup_adc(adc_clock_div_32);
setup_adc_ports(ALL_ANALOG );

lcd_init();

set_adc_channel(0);
delay_us(20);
bilgi=read_adc();

set_adc_channel(1); 
delay_us(20); 
bilgi2=read_adc();

printf(lcd_putc,"\fB.sicaklik=");// lcd ye sıcaklık yazdırılıyor

while(1)
{
bilgi=read_adc();
bilgi2=read_adc();
voltaj=(0.0048828125*bilgi)*1000;
voltaj2=(0.0048828125*bilgi2)*1000;

sicaklik=(voltaj/10)+2;
sicaklik2=(voltaj2/10)+2;

lcd_gotoxy(10,1);
printf(lcd_putc,"%5.1f'C",sicaklik);

lcd_gotoxy(10,2);
printf(lcd_putc,"%5.1f'C",sicaklik2);

delay_ms(100);


}
}


bilgi=read_adc();
komutlarında da bir değişiklik mi yapmam gerek?yada ne?
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

tayyar

set_adc_channel(0); 
delay_us(20); 
bilgi=read_adc();

set_adc_channel(1); 
delay_us(20); 
bilgi1=read_adc();


kısımları while döngüsü içerisinde olmalı yoksa bi kere okurlar sonra aynı degerlerle kalırlar


Birde While(1)  yerine while(true) yazarsan warning almazsın

yoksa "condition on line (sayı) allways true" gibisinden bir warning verir

programın çalışmasını etkilemez ama gözüne takılır rahatsız eder falan :)
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

mcn

@tayyar,çok teşekkür ederim.Bazı sorunlar var genede onları da kendim hallederim inş.
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

tayyar

bak bu adreste serdar cicegin kitbındaki tüm örnek programların kodları mevcur icerisinde adc örnekleride var ordan bakarak bişeyler yapabilirsin

adres burası

Kolay gelsin.
--EGEMENLİK KAYITSIZ ŞARTSIZ MİLLETİNDİR--

mcn

Tekrar selamlar,yukarıdaki kodlarla okuduğum sıcaklık değerlerini rs232 iletişimi ile göndermek için printf() komutunun içine değişkenleri nasıl tanımlamalıyım ve alıcı tarafa da?Biraz uğraştım ancak virtual terminalde hep saçma sapan şeyler çıkıyor
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

mcn

yukarıya
#use rs232(baud=9600,xmit=PIN_C6,parity=N,stop=1) kodunusonrada
sondaki delay_ms(100); kodundan sonra şunu ilave ediyorum:
printf("%f",sicaklik);



virtual terminalde çıkan görüntü bu...
Hatam nerde,ne yapmam gerek :(
www.teknikyazi.com --üşenme,erteleme,vazgeçme...

707yunus

hocam max232 kullanıyoran virtual terminali sağsol tıklayıp rx/tx polarity i inverted etmeyi unutma.normalde 'normal' diye yazılıdır.

mcn

Hocam max kullanmıyorum.Pic in çıkışına direk bağladım virtual terminali.Denedim yaptığınızıda fakat başka değişik şeyler çıktı...
www.teknikyazi.com --üşenme,erteleme,vazgeçme...