tmr0 nasıl durdurulur yardım

Başlatan lordtorm, 15 Ağustos 2007, 21:54:16

lordtorm

BASLA
 
IF INTCON.1=1 THEN
    INTCON.2=0
IF INTCON.2=1 THEN I=I+1
  GOTO BASLA

portb.0 tekrar bir oldugunda sayma işlemini nasıl durdurum.daha dogrusu
rb yükselen kenar kesmesi geldiginde sayma baslayacak tekrar geldiginde duracak bir türlü durduramadım durmadan sayıyor
bırakayım diyorum bu işleri

SpeedyX

Hocam sözkonusu işlemcinin tmr0 ile ilgili kısmına datasheetten bakarsanız çok güzel anlarsınız. interrupt enable bitleri vardır, timer içinde ayrıyetten vardır. O bit ile oynarsanız start/stop gibi işler yaparsınız, başka kesme kullanmıyorsanız direkt gie=0 da yapabilirsiniz... Datasheette tablo yapmışlar yazıyor.

Birde konuyu pic basic kısmına açmanız gerekiyordu ve kullandığınız işlemciyide yazmanız iyi olurdu.

omenek

Eğer dahili sinyal kullanıyorsanız durdurmak gibi bir şansınız yok sadece yeni değer yazabilirsiniz.Ama sayım esnasında harici sinyale yönlendirip harici sinyal göndermezseniz sayıcı durmuş olur.

Eagle_Tim

TMR0 , INTCON, GIE - INTCON ,T0IE - bitlerinin set olması durumunda kesme verebilir. kesmeyi durdurmak için iki bitten birinin clear edilmesi yeterlidir. Ancak kesme durdurulsa bile, TMR0 arka planda hala çalışıyor fakat kesme veremiyor diye hatırlıyorum çünki bu harici bir sayıcıdır ve osilatör palsiyle otomatik ilerler. bu sebeple bu yeterli olmaz diye düşünüyorum,
TMR0 ı dahili osci için durdurma imkanı yok sanırım. Ancak TMR0 duruyormuş gibi yapılabilir.

TMR0 ı durdurmak istediğiniz zaman önce INTCON, T0IE clear edilir. Sonra TMR0 registerinde ki değer başka bir registere aktarılır. TMR0 I tekrar çalıştıracağınız zaman önce TMR0 a registerde tuttuğunuz biligiyi yüklersiniz,
ardından da INTCON , T0IE set edip çıkarsınız.. Durdurulmuş ve başlatılmış gibi olur.İlk aklıma gelen fikir bu, iyi çalışmalar...
Software and Hardware Design...

nonstradam

T0CON un 7. biti yani TMR0ON bitini 1 yaparsan TMR0 saymaya başlar. aynı biti 0 yaparsan TMR0 saymayı durdurur. Tekrar başlattığında ise TMR0 içeriğini silmediysen TMR0 kaldığı yerden saymaya devam edecektir.

Eagle_Tim

Alıntı yapılan: "nonstradam"T0CON un 7. biti yani TMR0ON bitini 1 yaparsan TMR0 saymaya başlar. aynı biti 0 yaparsan TMR0 saymayı durdurur. Tekrar başlattığında ise TMR0 içeriğini silmediysen TMR0 kaldığı yerden saymaya devam edecektir.

T1CON , T2CON diye registerler vardır dediğiniz işlem bunlar için olabilirde olmayabilirde denemek gerekir içeriği silinir mi kalır mı bilemiyorum ama harici sayıcı olduğu için değişir diye düşünüyorum. Ama T0CON u ilk defa duyuyorum hangi PIC de böyle bir register var, söylerseniz sevinirim bende bilmediğim birşey öğrenmiş olurum...
Software and Hardware Design...

lordtorm

16F877kullanıyorum şebeke frekansını ölçmeye calısıyorum,RB0 yükselen kenar kesmesini kullanarak bir periodun süresini ölçüp 1/T formulunden hassas ölçüm yapacaktım amacım;rb0 bir oldugun da timer baslatıp zaman aşımı kesmesinde sayacı bir artırıp tekrar 1 geldiginde durdurarak
sayac içindeki degerden gecen zamanı hesaplamak:


IF INTCON.1=1 THEN 'RB0 KESMESİ OLUSMUSMU BAK
    INTCON.2=0 'TMR KESME BAYRAGINI SİL
IF INTCON.2=1 THEN I=I+1 'KESME BAYRAGI 1'SE SAYACI BİR ARTTIR
IF INTCON.1=1 THEN  'İŞTE BURADA KALIYORUM
                                TEKRAR BİR OLDUGUNDA

TÜM KESMELERİ KAPATMAYI DENEDİM GENEDE SAYMAYA DEVAM EDİYOR
bırakayım diyorum bu işleri

SpeedyX

Bir sayımı bitirdikten sonra diğer sayıma geçmeden tmr0 değerini sıfırlayarak yapabilirsiniz.
ON INTERRUPT goto xxx şeklinde kesme sırasında bir etikete (rutine) gidilmesini sağlayabilirsiniz.
Interrupt rutininden çıkarkende INTCON.2=0 yaparak çıkmalısınız.
Ayrıca PBP de PULSIN ve RCTIME adlı komutlarda pals genişliği ölçüyorlardı diye hatırlıyorum.

nonstradam

Eagle_Tim T0CON 18F452 de bulunmakta. arkadaşımız sorusunda hangi pic i kullandığı belirtmemişti bende en çok kullandığın pic in pdf ine bakıp cevap verdim. sonraki mesajında 16F877 kullandığını belirtmiş.

16F877 nin TMR0 ını start stop edebileceğin bir biti bulunmamakta. bu sorununu T0CS biti 1 yaparak çözebilirsin. yani saymaya başlayacağında T0CS bitini 0 yapıp dahili clock tan sayma yapar durduracağın zamansa T0CS bitini 1 yapıp T0CKI pininden clock alacak şekilde ayarlarsın. ama mutlaka T0CKI pini yani PORTA nın 4. pinini şaseye bağlaman gerekecek. yani PORTA.4 ü kullanamayacaksın.

Veya TMR1 i kullanıp start stop bitini kullanıp bu kadar teferruatla uğraşmazsın.

Veya arkadaşlarımızın bahsettiği gibi bu işi yazılımda bir kaç eklemeyle çözebilirsin.

lordtorm

HEKESE TESEKKUR EDERİRM
PULSIN KOMUTUYLA 10 MİCRO SANİYEDEKİ 1 LERİ SAYDIRIP 1 SANİYEYE GORE HESAP YAPTIM VE ANLADIMKİ HALA TİMER KESMELERİNİ ÖGRENEMEMİŞİM
bırakayım diyorum bu işleri

Eagle_Tim

Alıntı yapılan: "nonstradam"Eagle_Tim T0CON 18F452 de bulunmakta.

Öğrenmek istediğim buydu, çünki çoğu pıcde olmayan bir register, 18f serilerinde bulunuyor sanırım, hangilerinde olduğunu arayıp bulmakta çok zaman alıcak bir iş, böylece en azından 18f452 T0CON unun da olduğunu önceden öğrenmiş olduk, herkese iyi çalışmalar..
Software and Hardware Design...

nonstradam

evet kullandığım 4-5 çeşit 18 serisi pic in tamamında T0CON bulunmakta. sanırım 16 serilerinde yok. çalışmalarınızda başarılar...