Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

arkadaşlar kod hatalı mı ?

Başlatan atillaa, 05 Şubat 2013, 14:18:53

atillaa

/******************************************************
      PIC16F877 ile LM35 Sıcaklık Sensörü Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.

// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(a) //Port yönlendirme komutları A portu için geçerli

#define use_portb_lcd TRUE   // LCD B portuna bağlı

#include <lcd.c>   // lcd.c dosyası tanıtılıyor

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1)

char klavye[20];
unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj,sicaklik;   // ondalıklı tipte değişkenler tanıtılıyor

//********** ANA PROGRAM FONKSİYONU*******

#int_rda

void seri_haberlesme()
{
disable_interrupts(int_rda);
output_high(pin_c5);

gets(klavye);
output_low(pin_c5);
}

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı

   set_tris_a(0x01);  // RA0 Giriş olarak yönlendiriliyor
   output_low(pin_c5);

   setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
   setup_adc_ports(AN0); //RA0/AN0 girişi analog

   lcd_init();   // LCD hazır hale getiriliyor

   set_adc_channel(0);   // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak
   delay_us(20);         // Kanal seçiminde sonra bu bekleme süresi verilmelidir
   enable_interrupts(global);

   printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor
   while(1)   // sonsuz döngü
   {
      bilgi=read_adc();  // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
      enable_interrupts(int_rda);

      voltaj=(0.0048828125*bilgi)*1000;   // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor
      sicaklik=(voltaj/10)+2;    // Her 10mV'ta 1 derece artma
      if(klavye=='L')
      {
      lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda
      printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor
      // Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak.
      // Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f
      // komutu ile bu işlemler yaptırılmıştır.
      }
      delay_ms(100); // 100 msn gecikme
   }
}

skara1214

proteusta deneyebilirsiniz ama şurada hata olduğunu düşünüyorum diyorsanız fikir yürütebiliriz
Herkes ölür ama herkes gerçekten yaşamaz

atillaa

direk devreyi kurdum çalışmadı , şimdi isisde devreyi kuracağım
hata beklediğim nokta kesme kısmı

skara1214

Herkes ölür ama herkes gerçekten yaşamaz

Salih

#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, stop=1,Errors)


Şu anki problemle ilgili olmasa da, hatırlatmak için;

3 bayt'dan fazla data gelecekse, problem olmaması için mutlaka Errors eklenmelidir.

nuriozdas

#5
lütfen yanlış anlamayın belki benden dahada deneyimlisinizdir benim tafisyem herzaman bir plan ile hareket etmek kendinize bir plan oluştrun plana uygun sıralı uygulamanızı geliştirin.
Mesela

1-Lcd test
2-Lm35 test
3-Adc test
4-3 ünü birleştir..
5-Geliştir
6-Mutlu son :))

Herzaman işe yaramıştır =))

breadboardunuzuda kontrol edin
pinlerde sorun olabilir küçük bir uygulama yaparak breadbourdunuzu test edin..

toprak0258

merhabalar....
gelistirme acisinda guzel bir ornege benziyor....ama mumkunse isissini verebilsen yada ne icin kulanacagini soylersen farkli tasarimlarda yapilabilinir....
selamlar...

birde  gunduzleri neden siteye girilmede sorun yasaniyor...acaba fazla yukleme oldugundamidir....
Bilgi paylaşıldıkca değer kazanır.

sadogan

Seri portu kurmussun
Seriport kesmesini de kurmussun.
ama seriportan herhangi birşey yollamıyorsun
seri portan aldigin veriyide bir yerde kullnmıyorsun.

voltaj=(0.0048828125*bilgi)*1000;   
burda sadeleştirme yapabilirsin
voltaj=4.8828125*bilgi; //daha hızlı çalışır.

seriport kesmeni ve gloabal kesmeyi kapatıp devrenizi öyle test edin.

shark27

lcdd.c dosyasında veya lcd bağlantılarında bir sorun olabilirmi?

atillaa

arkadaşlar çok teşekkürler yorumlarınız için büte hazırlandığımdan dolayı 1-2 gündür giremiyordum.
@nuriozdas dostum dediğin yol en temiz olanı , ancak bu devreyi bi anda kurmak istedim ve pic ile 3 aydır bi devre kurmamıştım o yüzden aceleye geldi biraz direk kuruyim dedim  :)

arkadaşlar devreyi isis te kurdum ancak bi türlü kesmeyle klayvye değişkenine değer aktaramıyorum ?
lcd de sadece sıcaklık yazıyor if şartı sağlanmıyor hiç ?