Kesme

Başlatan demket, 09 Ocak 2012, 15:32:47

demket

2. örnek isiste çalışmıyor. Led sürekli yanık kalıyor. ? Aslında sürekli yanık kalmıyor ama ne oluyor.

ByTEK

Kesme süresini 10 vermiştim buda 100 ms kesmeyi 1sn ye çevirdi. bende denedim gayet iyi çalışıyor. LED 1sn aralıkla yanıp sönüyor.. Kodu bir daha veriyorum..

include 18f4620
pragma target clock 20_000_000

pragma target OSC  HS
pragma target WDT  disabled
pragma target LVP  disabled
pragma target MCLR external

enable_digital_io()

pin_b0_direction = output

var byte kesme_suresi = 10   -- Vereceğiniz deger kesme süresini belirler.

-- örnek  : 500 ms için değer 5 olmalıdır. (istenen sure / 100)

--------------------------------------------------------------------------------
--       100 ms aralıklarla Kesme Üretip Ledi Yakıp Söndüren Program
--------------------------------------------------------------------------------

TMR3 = 3036                -- Başlangıç Değeri
T3CON_T3CKPS   = 0b11      -- 1:8 prescaler
T3CON_TMR3ON   = on        -- TMR3 Açık
PIE2_TMR3IE    = on        -- TMR3 Kesmesi Etkin
INTCON_PEIE    = on        -- Çevresel Kesmeler Etkin
INTCON_GIE     = on        -- Kesme Kullanımı Etkin

procedure kesme() is
 var byte sure
   pragma interrupt
      sure = sure + 1
      if sure == kesme_suresi then
        pin_b0 = !pin_b0
        sure = 0
      end if
   TMR3 = 3036             -- Başlangıç Kesme Değeri
   PIR2_TMR3IF = off       -- Kesme Bayrağı Sıfırlanıyor
end procedure
--------------------------------------------------------------------------------

-- Gerekli Kesme Zamanlarını aşağıdaki web sitesinden Ayarlayabilirsin..

-- http://eng-serve.com/pic/pic_timer.html


forever loop

end loop

demket

:) çalıştı. son iki satır, kodu kopyalarken kalmış. Forever loop u koyunca düzeldi. Peki bir şey daha sorayım. Lcd ye oluşturduğum bu kesme içinde, okuduğum analog değeri  basacağım. Fakat saçma sapan karakterler çıkıyor. Normalde analog değeri okuma ve ekrana basma kodları çalışıyor. Sebebi ne olabilir?

ByTEK

Alıntı yapılan: demket - 15 Mart 2012, 14:05:05
:) çalıştı. son iki satır, kodu kopyalarken kalmış. Forever loop u koyunca düzeldi. Peki bir şey daha sorayım. Lcd ye oluşturduğum bu kesme içinde, okuduğum analog değeri  basacağım. Fakat saçma sapan karakterler çıkıyor. Normalde analog değeri okuma ve ekrana basma kodları çalışıyor. Sebebi ne olabilir?

ADC okuma ve lcd ye yazma işlemleri zaman alacaktır. 100ms bir kesme üretip adc okutmaya ve LCD'ye yazdırmaya kalkarsanız hatalı sonuclar alabilirsiniz.. mesela 1sn yede bir okutup yazdırmayı deneyin.. kesme süresinle oynayarak aradığın değeri bulabilirsin..

demket

Analog okuma ve LCD ye basma kısımlarını çıkardım. Kendi kodlarım içinde kesme_suresi kullanmadan kesmeyi kullandım, 0,1 s de ledi yaktım. kesme_suresi kullanarak süreyi 1 s. yapmak istediğimde isis teki osiloskopta kesmenin bir kere gerçekleştiğini gördüm. Ama led yanmadı. Kodları incelediğimde verdiğiniz örnekten farklı herhangi bir şey bulamadım. Uzun kodlarda jalV2 problem mi çıkarıyor acaba.

ByTEK

Alıntı yapılan: demket - 15 Mart 2012, 14:23:45
Analog okuma ve LCD ye basma kısımlarını çıkardım. Kendi kodlarım içinde kesme_suresi kullanmadan kesmeyi kullandım, 0,1 s de ledi yaktım. kesme_suresi kullanarak süreyi 1 s. yapmak istediğimde isis teki osiloskopta kesmenin bir kere gerçekleştiğini gördüm. Ama led yanmadı. Kodları incelediğimde verdiğiniz örnekten farklı herhangi bir şey bulamadım. Uzun kodlarda jalV2 problem mi çıkarıyor acaba.

yukarıda verdiğim kodu kullanırsanız kesme_suresi değişkeni dahil sorun olacağını sanmam.. sizde son deneme yaptığınız kodu ekleyebilirseniz hatanız varmı yokmu bir bakarım.. Kesinlikle Jalv2 kısada olsa uzunda olsa sorunsuz derler ve derlenen program çalışır..

demket

Problemin kaynağını buldum. servo_rc_master modülünü kullanmaktayım. Servo ile ilgili ne varsa kaldırınca işler yoluna girdi. Bildiğim kadarıyla servo da timer kullanıyor.  SERVO_USE_TIMER = 0 idi. 3 yaptım. Timer 3 ü kullanmaya başlayınca işler yoluna girdi de niye timer0 ı kullanamadı. Ayrıca led düzgün istediğim süre yanıp sönüyor. ADC ve LCD yi işin içine katınca yine aynı oldu. Kesme başladığında kesme içinde ki kodlar bitmeden çıkmaz diye biliyorum. Eğer böyleyse lcd ye basmada ve analog okumada sürenin etkisinin olmaması gerekmez mi?

ByTEK

Alıntı yapılan: demket - 15 Mart 2012, 15:11:12
Problemin kaynağını buldum. servo_rc_master modülünü kullanmaktayım. Servo ile ilgili ne varsa kaldırınca işler yoluna girdi. Bildiğim kadarıyla servo da timer kullanıyor.  SERVO_USE_TIMER = 0 idi. 3 yaptım. Timer 3 ü kullanmaya başlayınca işler yoluna girdi de niye timer0 ı kullanamadı. Ayrıca led düzgün istediğim süre yanıp sönüyor. ADC ve LCD yi işin içine katınca yine aynı oldu. Kesme başladığında kesme içinde ki kodlar bitmeden çıkmaz diye biliyorum. Eğer böyleyse lcd ye basmada ve analog okumada sürenin etkisinin olmaması gerekmez mi?


Biz timer3 kullanıyoruz servolar Timer0  kullanması gerekiyor. burada bir sıkıntı var anladığım kadarıyla. Kodları gözden geçirmen gerekiyor.ADC ve LCD kodları bir şekilde kesme ayarlarını bozuyor olabilir.. bir gözden geçirirsen  faydalı olacaktır.

demket

#23
Sizin örneğin içine lcd yi dahil ettim. Isis te gayet güzel çalıştı. Benimkinde ise ekrana bastıktan sonra 1 s gecikme ilave ettim. Ekrana çıkan o saçma sapan şeyler değişti. Lcd 4 bitlik veriyi belirli bir zaman aralığında alıyor ve ekrana bu veriyi basıyor. Hal böyleyse biz ne kadar kesme_suresi koyarsak koyalım kesme işlemi 0,1 s de oluşuyorsa ve bu süre lcd için yeterli değilse saçma sapan karakterler görülebilir mi?. Doğru mudur? Bu arada dikkat ettim de timer3 yapınca servolar çalışmıyor.

ByTEK

Alıntı yapılan: demket - 15 Mart 2012, 15:47:07
Sizin örneğin içine lcd yi dahil ettim. Isis te gayet güzel çalıştı. Benimkinde ise ekrana bastıktan sonra 1 s gecikme ilave ettim. Ekrana çıkan o saçma sapan şeyler değişti. Lcd 4 bitlik veriyi belirli bir zaman aralığında alıyor ve ekrana bu veriyi basıyor. Hal böyleyse biz ne kadar kesme_suresi koyarsak koyalım kesme işlemi 0,1 s de oluşuyorsa ve bu süre lcd için yeterli değilse saçma sapan karakterler görülebilir mi?. Doğru mudur? Bu arada dikkat ettim de timer3 yapınca servolar çalışmıyor.

Evet Doğrudur. anlatmak istediğim şey tam olarak buydu.. Zaten o servo kütüphanesini bende çalıştıramamıştım. Timer3 kesme ürettiği için aynı zamanda servo için çalışmaz. Kendime servo alınca tekrar servo üzerine uğraşacağım..