WATCHDOG ve TMR0 İLİŞKİSİ

Başlatan oyhan, 27 Mayıs 2007, 23:47:29

oyhan

Merhabalar.
Ben kod içerisinde wdt aktif edip aynı zamanda TMR0 sayıcısını kullanabilirmiyim. Bu ikisi arasındaki bağlantı nedir. Önbölücü WDT seçildiğinde ona göre atanıyor tamam fakat TMR0 sayması nasıl olacak?
Yada TMR0 seçildiğinde önbölücü 1/256 iken wdt aktif edildiğinde 1/128 mi yapmalı TMR0 ın sayma ölçüsünün aynı olması açısından.? Nedersiniz bu ilişki tam anlamı ile nedir acaba?

void main()
{ 
   //setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128); //128us timer0   
  
   setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_2304MS);
   set_tris_b(0b00000000);
   output_b(0b00000000);
   x=0; 
   set_timer0(0);

   while (1)
	{   
                   restart_wdt();
                   sinyal = get_timer0();
                   printf("*** x:%u sinyal:%u *** \n\r",x,sinyal);
                   x+=1;
  }
}
BİRLİKTEN KUVVET DOĞAR:

arslan74

Merhaba,

Bu bahs ettiğin olay kullandığın PIC göre değişir. 12 ve 16 serisinde ikisini beraber kullanamiyorsun. Ancak 18 WDT'ın kendi sayacı var, TMR0 kullanmiyor. 18 serisinde ikisi beraber kullanılabilir. Hiç bir sorun cıkmaz.

Ama 12 ve 16 serisinde WDT aktif yaptığın zaman TMR0 sayacını WDT kullanmaya başliyor.


Selamlar.

oyhan

Merhaba kodun birinci ve ikinci yazılışı arasında TMR0 açısından fark olmadığını gözlemledim. İkisindede sayım değerleri rs232 ye aynı şekilde çıkıyor. Sorunun bu kısmını kendim cevapladım sanırım umarım yanlış anlamamışımdır? Help dosyalarından "restart_wdt();" komutunuda
restart_wdt();
00B3:  CLRWDT


asm görüntüsünden bu şekilde gördüm. Zaman aşımına gelinmeden wdt silinirse zaman yeniden başlıyor bu arada registerler silinmez değilmi ccs de? Ama registerler zaman aşımı ile birlikte siliniyor olsa gerek!?

TMR0 açısından fark olmayan durumlar

BİRİNCİ ŞEKİL
setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_2304MS);


İKİNCİ ŞEKİL
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128); //256us timer
BİRLİKTEN KUVVET DOĞAR:

oyhan

PIC 16 SERİSİ İÇİN; en azından şuanda...
Örnek ikisini aynı anda nasıl kullandığım konusunda;

setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_2304MS);

*** x:1 sinyal:188 ***
.
.
.
*** x:45 sinyal:164 ***
   
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128);

*** x:1 sinyal:188 ***
.
.
.
*** x:45 sinyal:164 ***
   

her iki kullanımda da aynı çıktıyı aldım..

Sizce yanlış anladığım birşeymi var merak ettim ve doğrusunu öğrenemk adına soruyorum..
BİRLİKTEN KUVVET DOĞAR: