RS232 Seri haberleşme Alıcısı (BİTİRME PROJESİ)

Başlatan yasinkir55, 26 Nisan 2012, 20:41:03

yasinkir55

   #include <16F877.h>
   #device ADC=10
   #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
   #use delay (clock=4000000)
   #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
   #use fast_io(a)
   #use fast_io(c)
   #include <stdio.h>
   #define sht_data     PIN_c1
   #define sht_clock    PIN_c0
   #INT_AD
   #include <lcd.c>
   #use fast_io(d)
   
   unsigned long int bilgi;
   float voltaj, basinc;
   
   /* SHT11 SICAKLIK SENSÖRÜ BAŞLA */
   void comstart (void)
   {
       output_float(sht_data);
       output_bit(sht_clock, 0);
       delay_us(1);
       output_bit(sht_clock, 1);
       delay_us(1);
       output_bit(sht_data,  0);
       delay_us(1);
       output_bit(sht_clock, 0); 
       delay_us(2);
       output_bit(sht_clock, 1); 
       delay_us(1);
       output_float(sht_data  );
       delay_us(1);
       output_bit(sht_clock, 0);
      }
     
      /* SHT11 yazma fonksiyonu */

      int1 comwrite (int8 iobyte)
      {
       int8 i, mask = 0x80;
       int1 ack;
       //Komut gönderilir
   delay_us(4);
   for(i=0; i<8; i++)
  {
   output_bit(sht_clock, 0);           
   if((iobyte & mask) > 0)
   output_float(sht_data);
   else output_bit(sht_data, 0);         
   delay_us(1);
   output_bit(sht_clock, 1);                   
   delay_us(1);
   mask = mask >> 1;                               
  }
 
   /* Shift in ack */
    output_bit(sht_clock, 0); 
    delay_us(1);
    ack = input(sht_data); 
    output_bit(sht_clock, 1);
    delay_us(1);
    output_bit(sht_clock, 0); 
    return(ack);
   }
   
   /* SHT11 veri okuma fonksiyonu */

   int16 comread (void)
   {
    int8 i;
    int16 iobyte = 0;
    const int16 mask0 = 0x0000;
    const int16 mask1 = 0x0001;
   
        /* shift in MSB data */
    for(i=0; i<8; i++)
     {
      iobyte = iobyte << 1;
      output_bit(sht_clock, 1);             
      delay_us(1);
      if (input(sht_data)) iobyte |= mask1; 
      else iobyte |= mask0;
      output_bit(sht_clock, 0);               
      delay_us(1);
     }
     
        /* send ack 0 bit */
    output_bit(sht_data, 0);
    delay_us(1);
    output_bit(sht_clock, 1);
    delay_us(2);
    output_bit(sht_clock, 0);
    delay_us(1);
    output_float(sht_data); 
   
     /* shift in LSB data */
   for(i=0; i<8; i++)
  {
   iobyte = iobyte << 1;
   output_bit(sht_clock, 1);               
   delay_us(1);
   if (input(sht_data)) iobyte |= mask1;
   else iobyte |= mask0;
   output_bit(sht_clock, 0);     
   delay_us(1);
  }

    /* send ack 1 bit */
    output_float(sht_data); 
    delay_us(1);
    output_bit(sht_clock, 1); 
    delay_us(2);
    output_bit(sht_clock, 0);
   
    return(iobyte);
   }
   
   /* SHT11 okuma için bekleme fonksiyonu */
   
   void comwait (void)
   {
    int16 sht_delay;
   
    output_float(sht_data);                     
    output_bit(sht_clock, 0);                   
    delay_us(1);
    for(sht_delay=0; sht_delay<30000; sht_delay++) 
     {
      if (!input(sht_data)) break;           
      delay_us(10);
     }
   }
   
   
   /* SHT11 iletişimini resetleme fonksiyonu */
   
   void comreset (void)
   {
    int8 i;
   
    output_float(sht_data); 
    output_bit(sht_clock, 0);
    delay_us(2);
    for(i=0; i<9; i++)
     {
      output_bit(sht_clock, 1);
      delay_us(2);
      output_bit(sht_clock, 0);
      delay_us(2);
    }
    comstart();
   }
   
   /* SHT11 soft-reset fonksiyonu */
   
   void sht_soft_reset (void)
   {
    comreset();         
    comwrite(0x1e);     
    delay_ms(15);     
   }
   
   /* SHT11 sıcaklık ölçüm fonksiyonu */
   
   int16 measuretemp (void)
   {
    int1 ack;
    int16 iobyte;
   
    comstart();           
    ack = comwrite(0x03);
    if(ack == 1) return;
    comwait();           
    iobyte = comread();     
    return(iobyte);
   }
   
   /* SHT11 nem ölçüm fonksiyonu */
   
   int16 measurehumid (void)
   {
    int1 ack;
    int16 iobyte;
   
    comstart();           
    ack = comwrite(0x05);
    if(ack == 1) return;
    comwait();           
    iobyte = comread();   
    return(iobyte);
   }
   
   /* SHT11 sıcaklık & nem hesaplama fonksiyonu. */
   
   void calculate_data (int16 temp, int16 humid, float & tc, float & rhlin, float & rhtrue)
   {
    float  rh;
 
    tc = ((float) temp * 0.01) - 40.0; // Sıcaklık hesaplama
   
    rh = (float) humid;                // RH Hesaplama
   
    rhlin = (rh * 0.0405) - (rh * rh * 0.0000028) - 4.0;
   
    rhtrue = ((tc - 25.0) * (0.01 + (0.00008 * rh))) + rhlin;
   }
   
   /* SHT11 sıcaklık &nem ölçme ve hesaplama fonksiyonu */
   
   void sht_rd (float & temp, float & truehumid)
   {
    int16 restemp, reshumid;
    float realhumid;
    restemp = 0; truehumid = 0;
   
    restemp = measuretemp();    // Sıcaklık ölçme
    reshumid = measurehumid();  // RH ölçme
   calculate_data (restemp, reshumid, temp, realhumid, truehumid);  // Sıcaklık ve nem hesaplama
   }
   
   /* SHT11 başlatma fonksiyonu */
   
   void sht_init (void)
   {
    comreset();   
    delay_ms(20);
   }
   
   /* MPX5100 okuma fonksiyonu */
   void mpx5100_read(){
         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
         bilgi=read_adc();                      // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
         voltaj=0.0048828125*bilgi;             // Dijitale çevirme işlemine uğrayan sinyalin gerilimi hesaplanıyor
         basinc=((voltaj+5*0.085)/(5*0.0090));  //Gerilim değerinden basınç hesaplama formulu
   }
   
   /* ANA PROGRAM FONKSİYONU */
   
   void main()
   {
    float restemp, truehumid;
    int i=0,k=0;
      setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
      setup_spi(SPI_SS_DISABLED);     // SPI 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_C(0xFF);
      set_tris_A(0x0F);   
      set_tris_d(0x0F);
   
      setup_adc(adc_clock_div_32);   // ADC clock frekansı fosc/32
      setup_adc_ports(ALL_ANALOG);   // Tüm AN girişleri analog
   
      enable_interrupts(INT_AD);     // AD çevrimi bitti kesmesi tanıtılıyor
      enable_interrupts(GLOBAL);     // Tüm kesmeler aktif
   
      lcd_hazirla();                 // LCD hazır hale getiriliyor
      sht_init();
      delay_ms(500);
      lcd_komut(0x01);
      output_high(PIN_D7);          //LCD backlight aktif
      printf(lcd_veri," YASIN & AHMET");
      imlec(2,1);
      printf(lcd_veri,"   BIYOMEDIKAL");
      delay_ms(70000);   
      lcd_komut(0x01);   
      i=0; 
     
      while(1)                       // sonsuz döngü
      {
      sht_rd (restemp, truehumid);
      mpx5100_read();   
   
    if(i>8)
    {
     i=0;
     imlec(2,15);
     printf(lcd_veri,"->");
     printf("xxxxxS%3.1fN%3.1fB%3.1fFxxxxx\r",restemp,truehumid,basinc);
     imlec(2,15);
     printf(lcd_veri," sss ");
    }
   
     imlec(1,1);
     printf(lcd_veri,"S:%3.1f%cC N:%3.1f%%",restemp,223,truehumid);
     imlec(2,1);
     printf(lcd_veri,"B:%3.1f kPa",basinc);
     delay_ms(100); 
     i=i+1;
   }
   
   



 



{

   int data;

   set_tris_b( 0x00 );   //portb çıkış
printf("calisiyor...nr");

   while (TRUE)
   {

     data = getch();
     portb =data;   //gönderilen sayıyı portb de göster
     delay_ms(1000);

   }//sürekli tekrarla
}}







PROGRAMDA BU KISIMI ÇALIŞMAKTADIR. BİLGİLERİN ALICI KISIMIN PROGRAMINI YAZAMADIM ÇOK ZORLANDIM BİTİRME PROJEM YARDIMCI OLURSANIZ SEVİNİRİM. ALICI PROGRAMIN YAZILIMINDA YARDIM LÜTFEN
Üniversite'de Benden Yardımını Esirgemeyen Sn. Serdar ÇİÇEK Hocama Çok Teşekkür Ederim. Bu Seviyeye Gelmemde Yardımları Kişisel Olarak Gelişmemde Hocama Tekrardan Çok Teşekkürlerimi Sunarım :)

alexsi

Bu konuda yapılmıs çalışma var umarım sana yardımcı olur.

Google dan kablosuz-sicaklik-nem-basinc-kaydedici diye arat karşına çıkacak sitelerde bulursun. Kablosuz yazdığına bakma RS-232  bağlantısı yap.bağlantı kurarsın.
kolay gelsin..
http://www.kontrolarge.com/ Bildiklerimiz öğrendiklerimiz kadardır. Ya bilmediklerimiz ..?