16F877A,LM35 Sıcaklık ile fan hız kontrolü

Başlatan duwolfy, 20 Aralık 2015, 15:11:53

duwolfy

Merhaba arkadaşlar sizlere bir sorum olacak ,proje için başlıkta belirttiğim gibi sıcaklığa bağlı olarak fan hızının kontrol edilmesi devresi için uğraşıyorum.Devrem güzel çalışıyor fakat LCD de çıktı alırken yüksek sıcaklıklar gözüküyor yada çok değişken sıcaklıklar geliyor örneğin 21 25 18 15 21 derece gibi.Kodu derlediğimde sadece while(1) de warning uyarısı veriyor benim yanlış yaptığım yer varmı anlamadım yardım ederseniz sevinirim iyi günler.
#include <16F877A.h>

#device ADC=10                              //Setting ADC bits

#FUSES NOWDT               
#FUSES NOBROWNOUT          
#FUSES NOLVP
    
#use fast_io(b)
#use delay(crystal=8000000)
     #define LCD_ENABLE_PIN  PIN_B2                                    ////
     #define LCD_RS_PIN      PIN_B0                                    ////
     #define LCD_RW_PIN      PIN_B1   ////
     #define LCD_DATA4       PIN_B4                                    
     #define LCD_DATA5       PIN_B5                                    ////
     #define LCD_DATA6       PIN_B6                                    ////
     #define LCD_DATA7       PIN_B7  
     #include <lcd.c>
long int adc_value,real_value;        

char value[4];

void motor();
void main()
{
  set_tris_b(0x00);
  output_b(0x00);
  lcd_init();
  setup_timer_2(T2_DIV_BY_16,255,1);    //Setting timers for PWM      
  SETUP_ADC_PORTS(AN0);                   //Setting ADC PORTS
  SET_ADC_CHANNEL(0);                       //Selecting Channel
  SETUP_ADC(ADC_CLOCK_INTERNAL);
   lcd_gotoxy(1,1);
   lcd_putc("\fSicaklik:");
   lcd_gotoxy(1,2);
   lcd_putc("Fan Hizi:");
     while(1)
      {
        delay_us(200);
        adc_value=READ_ADC();            //Reading ADC value
        delay_us(100);
        real_value=adc_value/2;           //Obtaining real value
        motor();
        sprintf(value,"%lu",real_value);  //Changing int to char
        lcd_gotoxy(11,1);
        printf(lcd_putc,"%s",value);  
        delay_ms(200);
      }
 }

 
void motor()
{
  if(real_value<10)
   {
   setup_ccp1(CCP_OFF);             
   }
  if(real_value>10)
   {
     setup_ccp1(CCP_PWM);
      if(real_value>=10&&real_value<=29)
      {
        set_pwm1_duty((int16)204);         //20% duty cycle PWM
        lcd_gotoxy(11,2);
        lcd_putc("%20");
      }
      else if(real_value>=30&&real_value<=69)
     {
       set_pwm1_duty((int16)510);         //50% duty cycle PWM 
               lcd_gotoxy(11,2);
        lcd_putc("%50");
      }
      else if(real_value>=70&&real_value<=99)
      {
         set_pwm1_duty((int16)715);      //70% duty cycle PWM
                 lcd_gotoxy(11,2);
        lcd_putc("%70");
       }
      else if(real_value>=100&&real_value<=150)
       {
         set_pwm1_duty((int16)919);     //90% duty cycle PWM
                 lcd_gotoxy(11,2);
        lcd_putc("%90");
       }
    }
 }

mierdogan

acaba bir kaç okuma yaptırıp ortalama alsanız daha stabil olurmuı?

duwolfy

anladım for döngüsü koyup yapmaya çalışacağım.Hocam peki buna rf devresi eklesek ekstra olarak sadece açıp kapamak için bu nasıl bişey olur fikir verebilirmisiniz ?



eemuratozan

Ölçümlerinizi bir filtreden geçirip sonra ekrana yazdırabilirsiniz. Kalman filtresine bakmanızı öneririm.
I&C Engineer in Bereket Enerji Çates Elektrik Üretim A.Ş.

garezza

Rf eklemek isterseniz eğer projeniz pil ile çalışaksa sadece kendiyle alakalı veri geldiğinde interup üretecek bir modül kullanarak yapabilirsiniz. Diğer türlü havadan her veri geldiğinde mcu yu uyandırıp çok kısa sürede pili tüketecektir. Enerji tüketimi problem değilse haberleşeceğiniz maksimum mesafeye göre işinizi görecek modüllerle yapabilirsiniz. Biraz daha fazla detay verebilirseniz yardımcı olmaya çalışırım.

duwolfy

Şöyle anlatıyım rf eklemek istememizin nedeni proje biraz basit kaçması diye hocamız ekleseniz iyi olur dediği için sordum,devreyi 12v adaptör ile besliyoruz 7805 ile 5 v alıyoruz ,rf te pek bilgimiz yazılım konusunda da ayrıntı bilmediğim için sadece 12 giriş kısmında açıp kapama işlemini yapması yeterli olacaktır.Ayrı olaraktan farklı ekleme yapmamız için fikir verebilirseniz onu artık finallerden sonra kendimi geliştirmek için onlarıda kendim uğraşa bilirim bu işi öğrenmeyi istiyorum gerçekten.Teşekkürler.

garezza

Piyasadan temin edebileceğin 433 Mhz de çalışan modüller işini görecektir. Gökan hocamızın bu yazısında bilgisardan mcu ile kablosuz haberleşmeyi gayet güzel açıklamış. Bence bununla projeni birleştirebilirsin. Bilgisayarla mcu'yu başaralı bir şekilde haberleştirdikten sonra gerisi çok basit gelen veriye göre açıp kapatabilir hız kontrolü yapabilirsin.

duwolfy


mehmet

Eğer amaç sadece sistemi açıp - kapatmak
ise; PT2272 ve PT2262 ile yapılmış hazır
hybrid modüller var. İki butonlu "L" tip
olanlardan alırsanız işinizi girecektir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr