iki farklı led iki farklı delay

Başlatan AYKIRI, 02 Eylül 2013, 23:10:38

AYKIRI

merhaba arkadaşlar

rb0 ve rb1 de birer led bağlı   rb0 olan ledin 100 ms aralıklarla yanıp sönerken  rb1 ledininde 500 ms aralığında olmasını istiyorum

örnek olarak :

output_high(pin_b0);
delay_ms(100);
output_low(pin_b0);
delay_ms(100);
output_high(pin_b1);
delay_ms(500);
output_low(pin_b1);
delay_ms(500);

koda bakıldığında b0 a bağlı ledin 1000 ms sonra aktif olduğu görülüyor
istediğim şey her iki ledinde aynı anda belirtilen gecikme doğrultusunda çalışması bu sorunu nasıl giderebilirim?
kesmemi kullanmalıyım ? kısa bir örnekle yardımcı olacak arkadaşlara teşekkür ederim
saygılarımla.


Okan AKÇA

timer kullanarak yapacaksın güzel kardeşim



Bayramsumbul

Bence Timer Kullanmaya Gerek Yok.500 ms 100 ms'nin 5 Katı Değil mi?Öyleyse Beş Defa 100 ms Bekle Beşincide Led'i Yak/Sondur.
Bu Şekilde Bir Kod Yazabilirsiniz.
Bir Elektronik Meraklısının Serüveni...

AYKIRI

Alıntı yapılan: Bayramsumbul - 02 Eylül 2013, 23:32:41
Bence Timer Kullanmaya Gerek Yok.500 ms 100 ms'nin 5 Katı Değil mi?Öyleyse Beş Defa 100 ms Bekle Beşincide Led'i Yak/Sondur.
Bu Şekilde Bir Kod Yazabilirsiniz.

sizin dediğiniz gibi yaparsamda değişiklik olmayacak sanırım
çünkü birinci led 100ms yanarken aynı anda diğerinin 500ms yanmasını istiyorum (877 kullanıyorum)

everygelem

#4
Yazdığın dili bilmiyorum ama mantık olarak şunu uygulayabilirsen timer kullanmadan da yapabilirsin.


////////////////////////////////////////
sayac_1=0;
sayac_2=0;


ana_program(){

bekle_ms(10);
sayac_1=sayac_1 + 1;
sayac_2=sayac_2 + 1;

if (sayac_1>=0) and (sayac_1<10)
then {led1=on;}
if (sayac_1>=10)and (sayac_1<20)
then {led1=off;}
if (sayac1_>=20)
then {sayac_1=0;}

if (sayac_2>=0) and (sayac_2<50)
then {led2=on;}
if (sayac_2>=50) and (sayac_2<100)
then {led2=off;}
if (sayac_2>=100) {sayac_2=0; }

}

karşılaştırma bloklarında kaybın olursa bekleme süresini düşürüerek hatayı azaltabilirsin

Bayramsumbul

Kod Şöyle Olacak..;
int x=0;
while(1)
{
__delay_ms(100);
x++;
led1tersle();//bu fonksiyon led sonukse yanık/yanıksasonuk yapar
if(x>5){x=0;led2tersle;}
}
Kolay Gelsin...
Bir Elektronik Meraklısının Serüveni...

Gökhan BEKEN

#6
timer ile daha gelişmiş şeyler yapabilirsiniz ama basit işler için aşağıdaki gibi kullanabilirsiniz.
int i=0;
while(1)
{
if(i%1==0){output_toggle(pin_b0);}
if(i%5==0){output_toggle(pin_b1);}
delay_ms(100);
i++;
if(i==5){i=0;}
}



en kaba hali ise şöyle:

while(1)
{
output_toggle(pin_b0);
delay_ms(100);
output_toggle(pin_b0);
delay_ms(100);
output_toggle(pin_b0);
delay_ms(100);
output_toggle(pin_b0);
delay_ms(100);
output_toggle(pin_b0);
output_toggle(pin_b1);
delay_ms(100);
}

Böyle birşey yazın ama denemedim büyük ihtimal çalışır.
not: output_toggle bir pini terslemek için kullanılır
Ben yazarken arkadaşlar yazmış ama madem yazdım silmeyim dedim.
Özel mesaj okumuyorum, lütfen göndermeyin.

tacettin

#7
....

AYKIRI

teşekkür ederim arkadaşlar sayenizde çözdüm

Bayramsumbul

@meftun Hocamızın Yazdığı Kod Çalışması Lazım Evet..
Eğer i 1'e Kalansız Bölünüyorsa Led1 Toggle Yap.
Eğer i 5'e Kalansız Bölünüyorsa Led2 Toggle Yap...
@tacettin Yazdığı Kod Benim Örneğimin CCS Versiyonu(Yalnız Başta i=0;Olarak Belirtilmeli.CCS'de Gerek Yoksa Bilemiyorum.)
(Bir Mesaj Yazamadım :D "Uyarı: Siz iletinizi yazarken yeni bir ileti daha gönderildi. Gönderilen iletiyi incelemeniz önerilir.")
Bir Elektronik Meraklısının Serüveni...

everygelem