Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip XC Serisi => Microchip XC8 => Konuyu başlatan: selvi - 24 Ekim 2020, 10:28:29

Başlık: watchdog timer
Gönderen: selvi - 24 Ekim 2020, 10:28:29
    16F689 işlemciyi kullandım. XC8 derleyicinde kodları yazdım. işlemciyi uyku moduna girmesi ve sonrasında watchdog timer ile uyandırmak istedim. basit bir program yazdım. led yakma programı. sigorta ayarlarında  watchdog timer kapalı iken led yanıyor. ama watchdog timer aktif olduğunda led yanmıyor.

yazdığım kodlar aşağıdaki şekildedir.
Alıntı Yap#include <xc.h>
#include "string.h"
#include<math.h>

// CONFIG
#pragma config FOSC = INTRCIO   // Oscil
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)lator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = ON       // Watchdog Timer Enable bit (WDT disabled and can be enabled by SWDTEN bit of the WDTCON register)
#pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select bit (MCLR pin function is MCLR)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown-out Reset Selection bits (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)

//#define  LED_TX      RA0    //output, indication of tx
#define  LED_RX      RC4    //output, indication of rx

void port_init(void);

void main(void)
{
   uint8_t  i;
   
    OSCCON = 0X70;   // internal osc, 8M osc
    WDTCON = 0X00;  // watchdog
   
   port_init();         
   //LED_TX = 0;
   LED_RX = 0;
   
    //OPTION_REG=0x0f;
    //STATUS= 0x08;
    INTCON = 0xc0;

    while(1){
      for(i=0;i<6;i++)
      {
        LED_RX=LED_RX^1;
        delay_1ms(100);
      }
      LED_RX=0;
}
}

void port_init(void)
{
    ANSEL = 0;
    ANSELH = 0;   // AD is not used
    WPUA = 0;   // no pull up resister
    IOCA = 0;  // no io interupt
    //LED_TX=0;
    LED_RX=0;
 
   MCLR_set =INPUT;
   
}

Başlık: Ynt: watchdog timer
Gönderen: power20 - 24 Ekim 2020, 14:02:30
watchdog açıksa, döngü içinde clrwdt kullanılmalıdır. Aksi halde süre dolduğunda watchdog tarafından resetleme yapılır. 
clrwdt eklense bile   Delay_1ms(100);   watchdog süresinden uzun ise yine resetleme yapar.
Başlık: Ynt: watchdog timer
Gönderen: ahuramazda - 24 Ekim 2020, 14:34:10
software watchdog enable disable diye bir seçenek olması lazım. program uykuda değilken disable uykudayken enable edin o biti
Başlık: Ynt: watchdog timer
Gönderen: selvi - 25 Ekim 2020, 09:49:25
   belirtilen şekilde tekrar denedim led yanmadı. zaten programda sadece WDT  sigorta ayarlarında ON yapmışım. program içerisinde wdt  aktifleştirmemiştim. buna rağmen ledin yanmaması sorun olarak açığa çıkıyor.
Başlık: Ynt: watchdog timer
Gönderen: power20 - 25 Ekim 2020, 11:08:27
 Clrwdt  kullanılmazsa watchdog aktif etmek anlamsız . Çünkü  sürekli reset olacaktır. watchdog aktif etmek, zaman aşımı olduğunda pic resetlensin demektir. Herhangi sebepten program  takılmış Clrwdt yi çağıramamışsa reset olur.
Başlık: Ynt: watchdog timer
Gönderen: selimkoc - 25 Ekim 2020, 15:21:33
https://elektrokod.wordpress.com/2013/10/21/wdtwatch-dog-timer-bekci-kopegi-zamanlayicisi/ (https://elektrokod.wordpress.com/2013/10/21/wdtwatch-dog-timer-bekci-kopegi-zamanlayicisi/)
Başlık: Ynt: watchdog timer
Gönderen: selvi - 31 Ekim 2020, 09:51:01
ben bu programda 16f689 işlemcisinin 2 saniye uyumasını ve 8 saniye normal çalışacak şekilde bir döngü oluşturmasını istiyorum. sleep modunda çıkması için watchdog timer kullanacam. dahili osilatör kullandım. sleep modunda çıkmasını sağlamak için wdt kesmesi oluşmak zorunda mı? CLRWDT komutu kullandığında pic uyuma modunda çıkabilir mi? 
Başlık: Ynt: watchdog timer
Gönderen: ahuramazda - 31 Ekim 2020, 10:22:48
Alıntı Yapsleep modunda çıkmasını sağlamak için wdt kesmesi oluşmak zorunda mı?

kesme veya reset hariç işlemciyi uykudan uyandıramazsınız
Başlık: Ynt: watchdog timer
Gönderen: mufitsozen - 31 Ekim 2020, 11:29:18
Alıntı yapılan: selvi - 31 Ekim 2020, 09:51:01CLRWDT komutu kullandığında pic uyuma modunda çıkabilir mi? 

Uyuyan pic'de CLRWDT komutunu nasil isleyeceksiniz?
Başlık: Ynt: watchdog timer
Gönderen: z - 31 Ekim 2020, 12:06:32
Watchdog kurulu iken sleep moda girersen watchdog counter tastiginda islemciyi uyandirir ve reset rutininden itibaren kosmaya baslar.

Diger wakeup modlarinda ise sleep komutunu takip eden komuttan itibaren kodlar isletilir.
Başlık: Ynt: watchdog timer
Gönderen: selvi - 31 Ekim 2020, 16:30:38
wdt kesmesi oluştuğunu kontrol etmek için şöyle bir koşul yazmak istedim derleyici hata verdi.

Alıntı Yapif(!STATUSbits.PD)
{
     for(i=0;i<6;i++)
      {
        LED_RX=LED_RX^1;
        delay_1ms(100);
      }
      LED_RX=0;
   
}

bu şekilde hata veriyor.
lora_1262_slaver.c:342: error: (255) not a member of the struct/union ""
lora_1262_slaver.c:342: error: (199) logical type required
Başlık: Ynt: watchdog timer
Gönderen: JOKERAS - 31 Ekim 2020, 17:12:22
if(!STATUSbits.PD) {

    for(i=0;i<6;i++)
      {
        LED_RX=LED_RX^1;
        __delay_ms(100); //Xc8'de delay Fonksiyonu böyle çağrılıyordu.
      }
      LED_RX=0;
}

Test etmek için delay'ı kaldırıp test edin.Yada yukarıdaki gibi çağırın.
Başlık: Ynt: watchdog timer
Gönderen: selvi - 31 Ekim 2020, 19:31:50
Alıntı Yapdelay_1ms(100);

gecikme fonksiyonunu programda kendim hazırlamışım. bu noktada hata vermiyor.
hata  verdiği kısım status registerin kullanım biçimine dönüktür.

if(!STATUSbits.PD)   // bu tanımlamayı kabul etmiyor
Başlık: Ynt: watchdog timer
Gönderen: JOKERAS - 31 Ekim 2020, 20:26:23
STATUSbits. yazdığınız zaman İlgili Bitleri gösteren bir pencere açılması ve bitleri göstermesi
lazım.Register bitleri çıkmıyorsa veya Alakasız bitler çıkıyorsa Proje oluştururken
hata olmuş olabilir.Projeyi Project Properites'e sağ tıklayıp Device doğrumu kontrol edin.

Sizin yerinizde olsam XC'nin hazır Proje klasörünün altındaki Samples Embedded Sekmesini kullanarak oluştururdum.

Edit; Şu şekilde deneyin bir.

if(!STATUSbits.nPD)
Başlık: Ynt: watchdog timer
Gönderen: selvi - 01 Kasım 2020, 10:21:44
bahsettiğiniz şekilde denedim. program hata vermedi.

if(!STATUSbits.nPD) [/quote]

pic işlemcisinin 2sn uyuması ve 8 sn kadar normal çalışacak şekilde bir döngü oluşturmak istiyorum. uyuma modundan watchdog timer ile çıkması gerekiyor. bu durumda pic işlemcisinin bu tarz 10sn'de bir reset olması sorun yaratmaz mı?