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;
}
}
}
}
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.
Şö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.