Pic16f877a menü uygulaması (Alarm menüsü oluşturma)

Başlatan ademtosun58, 28 Mart 2017, 15:53:52

ademtosun58

Sevgili Picproje.org Ailesi .

Daha önce de forumda bi konu açmıştım o sorunu çözdüm şimdi yeni bi sıkıntı ile karşınızdayım(yardımlarınızı eksik etmeyin).


Pic 16f877a ile MPLAB IDE kullanarak bir telemetri sistemi tasarladım(Sıcaklık ölçme,Encoder,Role ile kontrol vs)

Sistemim su an sıkıntısız çalışıyor ekstra olarak son bir şeyim kaldı(Teslim tarihi cuma )

Sıkıntım şu

Örneğin sıcaklık ölçerken sıcaklıgın belli bi durumu geçmesi durumunda bana hata oldugunu söyleyen ekstra bir alarm menüsü oluşturmam lazım.Hani sıcaklık artınca uyarı ledi yanıcak bende alarm menüsüne girince hangi sensörde sıkıntı  oldugunu görücem bunu nasıl yapmam gerekiyor. benim sistemimde Timer interrupt kullanıyorum interruptın içindeki değerleri menülere bastırıyorum kodum asagıdaki şekildedir




int count=0;


void interrupt ISR()
{
    
    if(INTCONbits.TMR0IF)
      {INTCONbits.TMR0IF=0;
        count++;
        if(count==35)
            {
     
               if(sensor1status==1)
            {
                halleffect1();
                  count = 0;
            }
               if(sensor2status==1)
            {
                halleffect2();
                  count = 0;
            }
                 if(sensor3status==1)
            {
                halleffect3();
                  count = 0;
            }
                 if(sensor4status==1)
            {
                halleffect4();
                  count = 0;
            }
                 if(sensor5status==1)
            {
                halleffect5();
                  count = 0;
            }
               if(role1status==1)
               {
                   role1();
                   count = 0;
               }
               if(role2status==1)
               {
                   role2();
                   count = 0;
               }
           if(role3status==1)
               {
                   role3();
                   count = 0;
               }
           if(role4status==1)
               {
                   role4();
                   count = 0;
               }
               if(temp1status)
               {
                   temp1();
                   count = 0;
               }
                if(temp2status)
               {
                   temp2();
                   count = 0;
               }
        
      
        
        
        
        
        
}
}

}

mehmet

Herşey kesme içine koymanız pek iyi olmamış.
"State Machine", "Sonlu Durum makinesi" kelimelerini
araştırınız.

if(sicaklik > 35) 
{ 
     led = 0b1;
}
else led = 0;

Uygun bir yere ilave edilebilir.
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

veysel_eeblog

Şöyle yapılabilir;
1. sensör için
if( sicaklik > x ) //x sıcaklık değeri
{
   //ledi yak
   //sonra
   
  //1. sensör için
  flag_sensor1 = 1;  //sensör 1 değişkeni
}
else
{
  //ledi söndür
  //sonra

  //1. sensör için
  flag_sensor1 = 0;
}


Her sensöre uygulayacağız. Sensörlerin arıza durumunu sıcaklıkla kontrol ediyorsan tabi, orayı tam anlamadım.
Daha sonra menüden sensörlerin flag durumunu kontrol edip arıza hangisinde bakılabilir.