2 program çalıştırılması

Başlatan ekozo, 06 Mart 2012, 14:12:48

ekozo

Arkadaşlar Merhaba
Bir sorum olacak.  Benim programda şöyle bir sıkıntım var. Programda LCD yi sürüyorum. Ama aynı zamanda LCD sürülürken başka bir porttan 1 adet ledin 500 ms aralıklarla yanıp sönmesini istiyorum.  LCD sürerken 5 adet delay (delay ın bir tanesi 3 sn) kullanıyorum. Bu da yaklaşık 15 sn sürüyor. Yani kısacası o 15 sn içerisindede led in yanıp sönmesini istiyorum. (Bir program çalışırken arada başka bir program daha çalışsın) Bunu nasıl yapabilirim.  Şimdiden teşekkürler.

ferit06

#1
PWM si olan bir PIC kullanıp hardware PWM kullanarak yapabilirsin... tabii üretilecek minimum frekansı dikkate almak gerekir...

mr_knox

bu led yanıp sönerken lcd deki yazı değişecekmi?
kutsal kitapları okuyup anlamayan dindar okuyup anlayan ateist olur.  ( Nikola Tesla )

ekozo

Evet LCD de sürekli yazılar değişecek.

zamzam23

#4
kesme kullanarak yapabılırsın.

eraygil

delay_cycles (xx) 0-255 arasında değer girilebilir. yada kesme kullanılabilir yadaaaa  program içerisinde sonsuz döngü içerisine bir sayaç konulur ve program bu satırdan geçtiğinde bu değer bi artar ve bu sayacın değerini istediğimiz bir değerle sınarız dur  yaa bunu bir örnek prog la yazayım böyle olmayacak :)

xxxxx
xxxxxx
xxxxxx
xxxxxxxx
delay_us(1); //bir mikro saniye programın çalışmasını yavaşlatmayacağını düşünüyorum
a=a+1;
if(a==1000)
{
output_toggle(led);
a=0;
}
xxxxxxx
xxxxxxxx
xxxxxxxx
xxxxxxx
xxxxx
xxxxxxxxxxxxxxxx

umarım anlatabilmişimdir.  :)


ekozo

Anladığım kadarıyla yapmaya çalışıcam  :)  Teşekkür ederim.

haydarpasamikro

Timer kesmesi kullan. Timer ı kur, 500ms elde etmek için oluşan kesmeleri saydır. Sonra istenen süre elde etmişssen led i toggle yaptır. Meslea Timer1 i kullan ve kesmesini aktif et. Kesme içinde süre hesaplamasını yap ve ledi kontrol et.
Mikro Dünyası.Haydarpaşa Teknik ve Endüstri Meslek Lisesi Mikrodenetleyici Atl. Şefi

ekozo

Arkadaşlar programı PWM ve Timer1 kullanarak ayrı ayrı yaptım şu an sorunsuz çalışıyor.  Yanlız PWM de 244 Hz (4ms)  e kadar düşebiliyor (4MHz Xtal) Anladığım kadarıyla bu şartlarda 500ms için kristal değiştirmek lazım (sadece PWM için)  başka çözümü olan varsa söylerse sevinirim.   T1 de istediğim ms yi elde ediyorum.

camby

PWM ile evet yapılabilir ancak PWM doğru çözüm değil.


Ana programın boş olsun , örneğin :

ANA
      nop
      nop
      GOTO    ANA

gibi. ( Ben asm yazdım sen CCS anla )

Sen istediğin tüm işleri kesme kullanarak yapabilirsin yine de. Bir kesme Led için çalışır , bir kesme lcd yenileme için çalışır.

Led için kurduğun kesme geldiğinde istediğin port işlemini yapar geri dönersin.

LCD için kurduğun timer kesmesi geldiğinde , LCD'de yazıları yenilersin ve ana programa geri dönersin.

Kesmeleri ve fonksiyonları istediğin gibi sürelerini sayısını değiştirebilirsin.

Bu mantığa tam olarak hakim olursan çok sayıda işi aynı anda yapabilirsin.


Teorik olarak mantık bu olsa da bu iş pratikte şu şekilde yapılmalı :

LCD ve Led üzerinden gidelim yine :

Flag adında bir değişken tanımla , herhangi bir bitini LCD için başka bir bitini LED için kullan.

Led için ayarladığın timer'ın kesmesi geldiğinde kesme bölümünde LED'in bayrağını 1 yapıp ana programa dön ,

LCD için ayarladığın timer'ın kesmesi geldiğinde de ona ait kesme bölümünde LCD'nin bayrağını 1 yapıp ana programa dön.

Ana programda da sürekli olarak LCD ve LED bayralarını kontrol et , eğer 1 olan varsa ilgili işlemi yap.

Bu sayede program imlecin vaktinin çoğunu ana döngüde geçirir , kesmede kalma sürelerin kısalır.