lm35 sıcaklık bilgisini seven segmente aktarma pic16f877

Başlatan yupo, 04 Ekim 2015, 12:29:04

yupo

arkadaşlar lm35 ten aldığım sıcaklık verisini iki tane seven segmente aktarmaya çalışıyorum fakat segmentlerde hiçbirşey gözükmüyor pina1 ve a2 den ölçüm yaptığım zamanda voltaj alamaıyorum nerde hata yapıyorum anlamadım


bunlar da ccs c de yazdığım kodlar:
#include <16F877A.H>
#DEVICE ADC=10
#include <math.h>

#fuses xt,nowdt,noprotect,nobrownout,nolvp,noput,nowrt,nodebug,nocpd
#use delay (clock=4000000)
#use fast_io(b)
#use fast_io(a)
#define display_1 pin_a1
#define display_2 pin_a2
const int digit[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x90};
unsigned long int bilgi;
float voltaj,sicaklik;
int8 birler,onlar;
void main()
{
   
 
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_ccp1(ccp_off);
   setup_ccp2(ccp_off);
   set_tris_A(0x01);
    setup_adc(adc_clock_internal);
   setup_adc_ports(an0);
   set_tris_B(0x00);
   output_low(display_1);
   output_low(display_2);
   while(1)
   {
   set_adc_channel(0);
   delay_us(20);
   bilgi=read_adc();
   delay_us(20);
   voltaj=0.0048828125*bilgi*1000;
   sicaklik=(voltaj/10)+2;
      birler=fmod(sicaklik,10);
   onlar=sicaklik/10;
   output_high(display_2);
   output_b(digit[birler]);
   delay_ms(5);
   output_low(display_2);
   output_high(display_1);
   output_b(digit[onlar]);
      delay_ms(5);
      output_low(display_1);
   }
   
}

Gökhan BEKEN

setup_adc_ports(an0);
kodu ile an0'ı kurmuşsunuz, yani RA0 pinini analog pin olarak ayarlamışsınız, çıkış alamazsınız, o pin giriş.
Özel mesaj okumuyorum, lütfen göndermeyin.

Recep METE

Arkadaşım gerçek devrede mi yoksa isiste mi sorun yaşıyosunuz. eğer isisde sorun yaşıyorsanız isis dosyasını yüklerseniz yardımcı olmaya çalışırım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Melih1802

Alıntı yapılan: Gökhan BEKEN - 14 Ekim 2015, 21:22:10
setup_adc_ports(an0);
kodu ile an0'ı kurmuşsunuz, yani RA0 pinini analog pin olarak ayarlamışsınız, çıkış alamazsınız, o pin giriş.

Gökhan hocam kafam karıştı, burayı biraz daha açarmısınız, bendeki kitapta da arkadaşın yazdığı satır gibi yazıyor bu hatalımı.
Serdar ÇİÇEK kitabında;

setup_adc_ports (AN0);

olarak yazmış.

yupo

Alıntı yapılan: Gökhan BEKEN - 14 Ekim 2015, 21:22:10
setup_adc_ports(an0);
kodu ile an0'ı kurmuşsunuz, yani RA0 pinini analog pin olarak ayarlamışsınız, çıkış alamazsınız, o pin giriş.
Hocam zaten analog pinden çıkış almak istemiyorum ki analog pinden lm 35 in yolladığı değer okunup seven segmentlere yollanmalı.

yupo

Alıntı yapılan: Recep METE - 14 Ekim 2015, 22:44:57
Arkadaşım gerçek devrede mi yoksa isiste mi sorun yaşıyosunuz. eğer isisde sorun yaşıyorsanız isis dosyasını yüklerseniz yardımcı olmaya çalışırım.
isis te sıkıntı yok hocam gerçekte çalışmıyor.pic sağlam elemanlar sağlam.Anlamsız şeyler çıkıyor segmentte bir iki ledi yanıyor sadece segmentlerin,bağlantıları kontrol ettim.

fahri-

Önce seven segmentte sayıları gösteren bir program yazın. Sonra analog porttan okuma yapar gösterirsin.

Melih1802

Alıntı yapılan: yupo - 15 Ekim 2015, 12:09:27
isis te sıkıntı yok hocam gerçekte çalışmıyor.pic sağlam elemanlar sağlam.Anlamsız şeyler çıkıyor segmentte bir iki ledi yanıyor sadece segmentlerin,bağlantıları kontrol ettim.
Ortak Anod yada Kadot yapısına dikkat ettiniz mi.

eeburakdemir

#8
setup_adc(adc_clock_div_32)
prescaler ayarını yapmamıssın. Mesela 32 yerine 8 de yazabilirsin. senin nasıl bir program yazacağına kalmış. Ayrıca sana tavsiyem program yazacağın zaman project wizard arayüzündeki ayarlardan arayüzü kullnarak yapman. Hata oranını gözardı edilmeyecek kadar azaltır. Kolay gelsin
Asla pes etme...

yupo

Alıntı yapılan: eeburakdemir - 15 Ekim 2015, 21:22:42
setup_adc(adc_clock_div_32)
prescaler ayarını yapmamıssın. Mesela 32 yerine 8 de yazabilirsin. senin nasıl bir program yazacağına kalmış. Ayrıca sana tavsiyem program yazacağın zaman project wizard arayüzündeki ayarlardan arayüzü kullnarak yapman. Hata oranını gözardı edilmeyecek kadar azaltır. Kolay gelsin
tavsiyeleriniz için teşekkürler hocam.Ben setup_adc(adc_clock_internal); komutunu yazarak iç saat sinyalini bölmeden kullanamazmıyım böyle bir kullanım görmüştüm sanki.Bir de hocam illa ki işe yaradığı bir yer vardır 32 ve ya 8 e veya 16 ya bölünmesinin ya da direk internal kullanılmasının ,aydınlatabilir misiniz bizi?

sifirzero

arkadaşlar acil olduğu için buradan yazıyorum ds18b20 ile termometr  devrsi kurdum 85 derec gösteriyor sabit kaldı ne yapmama gerekiyor.ds18b20 mi bozuk acaba yardımcı olurmusnuz
sifirzero.blogspot.com [email]sifirrzero@gmail.com[/email] iman hem nurdur hem kuvvettir

Gökhan BEKEN

Alıntı yapılan: yupo - 15 Ekim 2015, 12:06:32
Hocam zaten analog pinden çıkış almak istemiyorum ki analog pinden lm 35 in yolladığı değer okunup seven segmentlere yollanmalı.
Evet hocam şimdi farkettim, ben ilk okuduğumda nasıl olduysa a0 pininden çıkış almaya çalışıyorsunuz sanmıştım.
@Melih1802 hocam yanlışlık olmuş.
Özel mesaj okumuyorum, lütfen göndermeyin.

sarikayamusa

Alıntı yapılan: Melih1802 - 15 Ekim 2015, 14:25:36
Ortak Anod yada Kadot yapısına dikkat ettiniz mi.
Evet aynen Melih hocanın dediği gibi. Senin kod ortak anod display'e göre yazılmış şema buna uygun değil, sana tavsiyem devreyi sadece isiste gerçekleyeceksen ortak anot display kullan ve A1 ve A2 çıkışlarını trn kullanmadan direk displaylerin 1 ve 2 nolu pinlerine bağla çalıştığını göreceksin.

yupo

Alıntı yapılan: sarikayamusa - 23 Aralık 2015, 11:32:44
Evet aynen Melih hocanın dediği gibi. Senin kod ortak anod display'e göre yazılmış şema buna uygun değil, sana tavsiyem devreyi sadece isiste gerçekleyeceksen ortak anot display kullan ve A1 ve A2 çıkışlarını trn kullanmadan direk displaylerin 1 ve 2 nolu pinlerine bağla çalıştığını göreceksin.

picte yapamadan msp430 da aynı projeyi gerçekte yaptım saolun hocam :) ama yinede deneyeceğim isis üzerinde dediğinizi