Bu kod ne iş yapıyo :(

Başlatan raprap17, 01 Ocak 2006, 13:02:01

raprap17

merhaba
pic 16f877 ile termometre uygulaması yapmak istiyorum
bununla ilgili pic c de yazılmış bi program buldum

KOD :


const float lsb=5000.0/1024.0;
float mV,santigrat;
unsigned int sicaklik;
TRISB=0;
TRISA=1;
ADCON1=0x8E;
ADCON0=0x41;
for(;;)
{

   ADCON0=0x45;
   while((ADCON0 & 4)!=0){
      sicaklik=ADRESH;
      sicaklik=256*sicaklik+ ADRESL;
      mV=sicaklik*lsb;
      santigrat=mV/10.0;
      PORTB=(int)santigrat;
      DelayUs(250);
            }


  }


fakat  elde edilen sıcaklık değerini neden 5000/1024 ile çarpma ihtiyacı duymuş anlamadım
???   const float lsb=5000.0/1024.0;
Yardımcı olursanız sevinirim
Teşekkürler
Neyi arıyorsan osun sen ! Hz. Mevlana

arslan74

16F877 10bit adc sahib olduğu için 1024'e bölmüş yani 2nin 10cu kuvveti 1024 eder.

Vref volajı da sistem beslemesi olarak ayarlanmış, oda 5Volt eder.

Bu durumda ADC her bir bitinin Voltaj değeri 5Volt/1024 eder.
Ancak programı yazan arkadaş burda mVolt cinsinden bulmak istediği için 5000mV/1024 şeklinde yapmış. Bu da 1bit ortalama 4.88 mV değerine tekamül eder. Yani sen ADC aldığın değerin mVolt karşığını bulmak için 4.88 ile carpman gerek. O zaman doğru bir değer elde edebilirsin.

Sen sıcaklık okumasının sanırım LM35 ile yapiyorsun cünkü verdiği mV değeri direkt sıcaklığa tekamül ediyor. Yani okuduğun Voltaj değeri 250mV ise sıcaklık 25,0 C dir.

Çalışmalarında başarılar,

Hasan ARSLAN

raprap17

@arslan74

haklısınız lm35 kullanıyorum. 2 tane display bağlıyorum 877 ye.

bi sorum daha olucak
16877 de port bol olduğundan  bi problem cıkmaz heralde.  :)

fakat ben bu iş için  4 display  kullansam nasıl olurdu
Örn:
45@C ... gibi

Teşekkürler...
Neyi arıyorsan osun sen ! Hz. Mevlana

tnen

2 dijit sıcaklık gostereceksen neden 4 display kullanasınki.Displaye attıgın sıcaklıgın yanında C yı de gostereceksen 1 display daha kullan ama ters monte et. bunun nedeni C nin onundeki derece işareti için displsyin noktasını kullanman için bu sayede bir display az kullanırsın. Derece ve C ı yakmak içinde picin cıkışına ihtiyacın olmayacaktır. Bununla ilgili segmentleri direnc üzerinden beslemene bagla.

arslan74

Bu cok basit bir şekilde yapabilirsin. Ama gösterge olarak ne kullanacaksın? LCD ekran mı yoksa 7segment LED ekranmı?
LCD sorun yok zaten LCD'nin hazır kütüphanelerini kullanarak yapabilirsin.
LED kullanmak istiyorsan o zaman ya tarama mantığını ile sürmelisin yada daha basit bir yöntem olan ile 74HC595 yapmalısın. Sayıyı dijitlere ayırıb her bir dijiti ekrana yazacaksın.

raprap17

Alıntı yapılan: "tnen"2 dijit sıcaklık gostereceksen neden 4 display kullanasınki.Displaye attıgın sıcaklıgın yanında C yı de gostereceksen 1 display daha kullan ama ters monte et.

:oops:   bunu daha önce düşünmeliydim önerin için sağol. Mesajı yazdıktan sonra internet te araştırma yaptım .Multiplexing diye bişeyden bahsediyo... 2 tane displayi aynı porta bağlamış ( amcam ) :)  bunları 5mS gibi süreyle sırayla yakıyo. Bu da ikisi de aynı anda  çalışıyo gibi gözüküyor..   8O   Velhasıl-kelam bunun programını  nasıl yazarım diye düşünüyodum.   :P  
                         
gerçekten de buna gerek yokmuş  üzerimden büyük bi yük kalktı .  
bu arada                                                  
gösterge olarak      
7 segment display kullanıcam. 3 tane işimi görücek anlaşılan. 2 tanesini pic e bağlayıp ; sayıyı digitlere ayırarak gondericem. diğeri de dirençlerle beslemeye...
Yardımlarınız için teşekkürler
Neyi arıyorsan osun sen ! Hz. Mevlana

arslan74

Tarama mantığı, ledler için daha iyi cünkü sürekli sabit bir akım gelmediği için ledlerin yanma ömürleri uzun oluyor ve parlaklığı daha iyi.
örnek olarak;



Bu devrenin mantığını kullanabilirsin.

Yapman gereken bunun için bir timer intterrupu kullanmak. Timer int. süresini 10ms olarak ayarladınmı yeterde. Her timer int.'da sırayla led göstergeleri yakacaksın. diyelimki 4 dijit kullanacaksın o zaman her int. gösterge için dijitlerin sadece bir tanesini sırayla yakacaksın. Önce dijit1, sonra dijit2, sonra dijit3 en son dijit4'ü yakacaksın. dijit 4 den sonra işlemi tekrar başa alıb başlatacaksın. Olay cok basit.

Çalışmalarında başarılar.

raprap17

tekrar merhaba
display değerlerini lm35 yardımıyla gönderdim
yani buna termometre de diyebiliriz

normal değerden 8-10 C fazla okuyordum
baktım ki adaptörüm devreye 3.5 v veriyo
5V a ayarlayınca normal değerler  vermeye  başladı.
fakat
2sn de bir sıcaklık okuması yapıyor ve  her defasında sıcaklık 2 derece artıyo - azalıyo
yani  20 - 22 -20 - 22  ...gibi...
Sizce sorun nerde olabilir.
İlginize teşekkürler
Neyi arıyorsan osun sen ! Hz. Mevlana