avatar_Hattuşa

INTERRUPT içinde TIMER kullanımı

Başlatan Hattuşa, 16 Ocak 2017, 12:40:01

Hattuşa

slm ETE hocam gene saçma sapan bir soru ile karşınızdayım. bir timing oluşturup bu timinge göre frekans çıkartmam gerekiyor. çıkartacağım 2 adet frekans birbirisi ile bağlantılı olduğu için kafamda bir türlü oturtamadım. sorunum şöyle;

Kesme:
context save
if tmr1if =1 then
     tmr1h =frekans.highbyte
     tmr1l =frekans.lowbyte
toggle sec
  if sec =0 then
        portb.5 =1
                 delayus bekle
        portb.6 =1
      delayus 5
      portb.6 =0
else
        portb.5 =0
                 delayus bekle
        portb.6 =1
        delayus 5
        portb.6 =0
  endif
tmr1if =0
endif
'.
'.
'.
'.   diğer kesme işlemleri

context restore


hocam sec değişkeni ile ilk frekansımı oluşturuyorum frekansımın değerini de tmr1 belirliyor. burda sıkıntı yok ancak oluşturduğum frekansın aralarında 5uS luk pencere kadar ikinci bir pinde frekans oluşturmam gerekiyor. yukarıda onuda yapabildim. ancak bu 2. frekansım hareketli olması gerekiyor ki kodda delayus bekle ile o hareketi sağlatıyorum sıkıntı burda başlıyor zira bekle değişkeni ile belirttiğim süre tmr1 i bozuyor zira tmr1 ile oluşan frekansın duty ve cycle değeri yaklaşık 60uS, bekle komutu bu süreye göre uzun olduğunda sapıtıyor. aşağıda resim olarakta ekledim.
derdime gelince;
ben 2. frekansı 1. frekanstan bağımsız ancak bu frekansı takip edecek ve bozmayacak şekilde nasıl oluşturabilirim. olabilirliği varmıdır?


ete

#1
Gördüğüm kadarı bu iş için kesme kullanmaya gerek görmüyorum.
İşlem sırası şöyle olmalı,
1.  PORTB.5=1 deyip TMR1'i 60us için kurmalısın.
2. bu işlemden sonra 5us bekleyip PORTB.6=1 demelisin.
3. 5us bekleyip PRTB.6=0 demelisin
4. Biraz bekleyip TMR1 kesme bayrağının (TMR1IF) set olmadığına bakacaksın set oluncaya kadar bekleyeceksin.
5. Bayrağı sıfırlayacak ve ardından PORTB.5=0 diyeceksin ve TMR1 sayacını yeniden 60 us için kuracaksın.
6. 5us bekleyip PORTB.6=1 diyeceksin
7. 5us bekleyip PORTB.6=0 diyeceksin.
8. Tekrar TMR1IF=1 oluncaya kadar bekleyeceksin.
Bu noktadan sonra yeniden 1 ci  maddeye atlayabilirsin.

İlla kesme içinde bunu yapayım diyorsan işin zor ama şöyle olabilir sanırım
1. İşe başlarken PORTB.5=1 yapılıp TMR1 sayacı 60us için kurulur ve kesme oluşunca;
2. TOGGLE PORTB.5 yapılır
3. PORTB.6=1 yapılıp 5 us beklenir.
4. PORTB.6=0 yapılıp tekrar 5 us beklenir.
5. Burada 60 us lik sürenin dolması beklenmelidir. Aslında bu işi kesmeyebırakma daha doğru olur ama kesme oluşmuş ve sen içindesin. Bu durumda hesapla bu işi çözebilirsin. 5+5+5=15us lik bir süreyi PORTB.6 için kullanmış oldun bunu 60 dan çıkartırsan geriye 45us kalır . Burada 45us beklersin ve kesmeden çıkarsın .
6. Yeniden kesme oluştuğunda 2 den itibaren olan işlemleri sırası ile yaparsın.

Ete

Powered by EzPortal