Watchdog timer PBP ile çalışmıyor

Başlatan ACM, 01 Mart 2021, 15:11:55

ACM

Arkadaşlar merhaba.

  Watchdog timeri protonda çalıştırıyorum ,  aynı kodlar omlasına karşın pbp ile çalışmıyor.Birebir aynı kodlar. İşlemci 16F1829 ,

Datasheete baktım , ama yalnızca bakabildim gerisi yok. Protonda timeri çalıştırdığımızda yapılması gereken bir ayarı otomatik yapıyor olabilir mi ? Yardımcı olursanız çok makbule geçecek , 6 saattir bununla uğraşıyorum.

Watchdog çalıştırmak için bunlar yetiyor (protonda).

1:Sigorta ayarlarında wdt yi aç
2:WDTCON.0 bitini high yap

Bunler proton kodlarım:

Device = 16F1847
Config1 FOSC_XT, WDTE_ON, PWRTE_OFF, MCLRE_OFF, CP_ON, CPD_OFF, BOREN_OFF, CLKOUTEN_OFF, IESO_ON, FCMEN_ON
Config2 WRT_OFF, PLLEN_OFF, STVREN_ON, BORV_LO, LVP_OFF

Xtal=4 
    
APFCON1.0 = 0  
APFCON0.7 = 0  
OSCCON=0
DACCON0 = %00000000 
DACCON1 = %00000000      
FVRCON =  %00000000        
WPUA.5=1                    
WPUB =%11111111      
CM1CON0=0
CM1CON1=0
CM2CON0=0
CM2CON1=0 
ANSELA = %00000000 
ANSELB = %00000000
ADCON0 = %00000000
ADCON1 = %00000000

PORTB=0
PORTA=0
TRISA=%11111101
TRISB=%10101111
PORTB=0
PORTA=0


Dim i As Byte
Symbol TX=PORTB.5
Symbol LED=PORTB.0

Serial_Baud = 9600  
Rsout_Pin = PORTB.5
Rsout_Mode = 0      
Rsout_Pace = 1

Clear
DelayMS 100 

Output LED
Output TX

For i=1 To 5
Toggle LED
DelayMS 100
Next

WDTCON=%00011000
WDTCON.0=1        

BAsLA:

GoTo BAsLA


Buda çalışmayan PBP kodu

define OSC 4
    
APFCON1.0 = 0  
APFCON0.7 = 0  
OSCCON=0
DACCON0 = %00000000 
DACCON1 = %00000000      
FVRCON =  %00000000        
WPUA.5=1                    
WPUB =%11111111      
CM1CON0=0
CM1CON1=0
CM2CON0=0
CM2CON1=0 
ANSELA = %00000000 
ANSELB = %00000000
ADCON0 = %00000000
ADCON1 = %00000000

PORTB=0
PORTA=0
TRISA=%11111101
TRISB=%10101111
PORTB=0
PORTA=0


i VAR Byte
Symbol TX=PORTB.5
Symbol LED=PORTB.0

Clear
pause 100 
Output LED
Output TX

for i=1 to 5
toggle led
pause 100
next

WDTCON=%00011000
WDTCON.0=1        


BAsLA:


goto basla


Buda .inc dosyası , bununla yapıyorum config ayarlarını

      NOLIST
    ifdef PM_USED
        LIST
        "Error: PM does not support this device.  Use MPASM."
        NOLIST
    else
        LIST
        LIST p = 16F1829, r = dec, w = -302
        INCLUDE "P16F1829.INC" ; MPASM  Header
        __config _CONFIG1, _FOSC_XT & _WDTE_ON & _PWRTE_OFF & _MCLRE_OFF & _CP_ON & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF
        __config _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _LVP_OFF
        NOLIST
    endif
        LIST
BLOCK_SIZE EQU 32

OG

üretilen asm dosyasına bakmakta fayda var,
araya clrwdt ekliyor olabilir,
bu komut uygun zamanda verilirse, wdt reset atacak duruma ulaşamadan baştan alır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ACM

#2
Alıntı yapılan: OG - 01 Mart 2021, 15:28:39üretilen asm dosyasına bakmakta fayda var,
araya clrwdt ekliyor olabilir,
bu komut uygun zamanda verilirse, wdt reset atacak duruma ulaşamadan baştan alır.

OG hocam asm dosyasına baktım , herhangi bir clrwdt kodu yok. Tabii asm de clrwdt komutu varsa.  Clrwdt yi özellikle kullanmadımki reseti görebileyim diye.

ASM kodlarını ekliyorum

; PICBASIC PRO(TM) Compiler 2.60C, (c) 1998, 2011 microEngineering Labs, Inc. All Rights Reserved. 
_USED EQU 1

 INCLUDE "C:\PBP\PBP2.60\16F1829.INC"


; Define statements.
; C:\PBP\PBP2.60\16F1829.BAS 00027 DEFINE  CODE_SIZE 8
#define CODE_SIZE 8
; D:\A\ABC.BAS            00003 define OSC 4
#define OSC 4

RAM_START      EQU 00020h
RAM_END        EQU 0064Fh
RAM_BANKS      EQU 0000Dh
BANK0_START    EQU 00020h
BANK0_END      EQU 0007Fh
BANK1_START    EQU 000A0h
BANK1_END      EQU 000EFh
BANK2_START    EQU 00120h
BANK2_END      EQU 0016Fh
BANK3_START    EQU 001A0h
BANK3_END      EQU 001EFh
BANK4_START    EQU 00220h
BANK4_END      EQU 0026Fh
BANK5_START    EQU 002A0h
BANK5_END      EQU 002EFh
BANK6_START    EQU 00320h
BANK6_END      EQU 0036Fh
BANK7_START    EQU 003A0h
BANK7_END      EQU 003EFh
BANK8_START    EQU 00420h
BANK8_END      EQU 0046Fh
BANK9_START    EQU 004A0h
BANK9_END      EQU 004EFh
BANK10_START    EQU 00520h
BANK10_END      EQU 0056Fh
BANK11_START    EQU 005A0h
BANK11_END      EQU 005EFh
BANK12_START    EQU 00620h
BANK12_END      EQU 0064Fh
EEPROM_START    EQU 0F000h
EEPROM_END      EQU 0F0FFh

; C:\PBP\PBP2.60\PBPPI14E.RAM 00012 A00020 R0      VAR    WORD BANK0 SYSTEM      ' System Register
R0              EQU RAM_START + 000h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00013 A00022 R1      VAR    WORD BANK0 SYSTEM      ' System Register
R1              EQU RAM_START + 002h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00014 A00024 R2      VAR    WORD BANK0 SYSTEM      ' System Register
R2              EQU RAM_START + 004h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00015 A00026 R3      VAR    WORD BANK0 SYSTEM      ' System Register
R3              EQU RAM_START + 006h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00016 A00028 R4      VAR    WORD BANK0 SYSTEM      ' System Register
R4              EQU RAM_START + 008h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00017 A0002A R5      VAR    WORD BANK0 SYSTEM      ' System Register
R5              EQU RAM_START + 00Ah
; C:\PBP\PBP2.60\PBPPI14E.RAM 00018 A0002C R6      VAR    WORD BANK0 SYSTEM      ' System Register
R6              EQU RAM_START + 00Ch
; C:\PBP\PBP2.60\PBPPI14E.RAM 00019 A0002E R7      VAR    WORD BANK0 SYSTEM      ' System Register
R7              EQU RAM_START + 00Eh
; C:\PBP\PBP2.60\PBPPI14E.RAM 00020 A00030 R8      VAR    WORD BANK0 SYSTEM      ' System Register
R8              EQU RAM_START + 010h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00028 A00032 FLAGS  VAR    BYTE BANK0 SYSTEM      ' Static flags
FLAGS          EQU RAM_START + 012h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00027 A00033 GOP    VAR    BYTE BANK0 SYSTEM      ' Gen Op Parameter
GOP            EQU RAM_START + 013h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00023 A00034 RM1    VAR    BYTE BANK0 SYSTEM      ' Pin 1 Mask
RM1            EQU RAM_START + 014h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00026 A00035 RM2    VAR    BYTE BANK0 SYSTEM      ' Pin 2 Mask
RM2            EQU RAM_START + 015h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00021 A00036 RR1    VAR    BYTE BANK0 SYSTEM      ' Pin 1 Register
RR1            EQU RAM_START + 016h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00024 A00037 RR2    VAR    BYTE BANK0 SYSTEM      ' Pin 2 Register
RR2            EQU RAM_START + 017h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00022 A00038 RS1    VAR    BYTE BANK0 SYSTEM      ' Pin 1 Bank
RS1            EQU RAM_START + 018h
; C:\PBP\PBP2.60\PBPPI14E.RAM 00025 A00039 RS2    VAR    BYTE BANK0 SYSTEM      ' Pin 2 Bank
RS2            EQU RAM_START + 019h
; D:\A\ABC.BAS            00030 A0003A i VAR Byte
_i              EQU RAM_START + 01Ah
; C:\PBP\PBP2.60\16F1829.BAS 00031 PORTL  VAR    PORTA
_PORTL          EQU PORTA
; C:\PBP\PBP2.60\16F1829.BAS 00032 PORTH  VAR    PORTC
_PORTH          EQU PORTC
; C:\PBP\PBP2.60\16F1829.BAS 00033 TRISL  VAR    TRISA
_TRISL          EQU TRISA
; C:\PBP\PBP2.60\16F1829.BAS 00034 TRISH  VAR    TRISC
_TRISH          EQU TRISC
#define _TX              _PORTB??5
#define _LED            _PORTB??0
#define _APFCON1??0      APFCON1, 000h
#define _APFCON0??7      APFCON0, 007h
#define _WPUA??5        WPUA, 005h
#define _PORTB??5        PORTB, 005h
#define _PORTB??0        PORTB, 000h
#define _WDTCON??0      WDTCON, 000h
 INCLUDE "ABC.MAC"
 INCLUDE "C:\PBP\PBP2.60\PBPPI14E.LIB"


; C:\PBP\PBP2.60\16F1829.BAS 00012 BANK0  $0020, $007F
; C:\PBP\PBP2.60\16F1829.BAS 00013 BANK1  $00A0, $00EF
; C:\PBP\PBP2.60\16F1829.BAS 00014 BANK2  $0120, $016F
; C:\PBP\PBP2.60\16F1829.BAS 00015 BANK3  $01A0, $01EF
; C:\PBP\PBP2.60\16F1829.BAS 00016 BANK4  $0220, $026F
; C:\PBP\PBP2.60\16F1829.BAS 00017 BANK5  $02A0, $02EF
; C:\PBP\PBP2.60\16F1829.BAS 00018 BANK6  $0320, $036F
; C:\PBP\PBP2.60\16F1829.BAS 00019 BANK7  $03A0, $03EF
; C:\PBP\PBP2.60\16F1829.BAS 00020 BANK8  $0420, $046F
; C:\PBP\PBP2.60\16F1829.BAS 00021 BANK9  $04A0, $04EF
; C:\PBP\PBP2.60\16F1829.BAS 00022 BANK10  $0520, $056F
; C:\PBP\PBP2.60\16F1829.BAS 00023 BANK11  $05A0, $05EF
; C:\PBP\PBP2.60\16F1829.BAS 00024 BANK12  $0620, $064F
; C:\PBP\PBP2.60\16F1829.BAS 00025 EEPROM  $F000, $F0FF
; C:\PBP\PBP2.60\16F1829.BAS 00026 LIBRARY "PBPPI14E"
; C:\PBP\PBP2.60\16F1829.BAS 00027 DEFINE  CODE_SIZE 8

; C:\PBP\PBP2.60\16F1829.BAS 00029         include "PI14EEXT.BAS"

; C:\PBP\PBP2.60\16F1829.BAS 00036         include "PBPPI14E.RAM"
; D:\A\ABC.BAS            00003 define OSC 4

; D:\A\ABC.BAS            00005 APFCON1.0 = 0  
 MOVE?CT 000h, _APFCON1??0

; D:\A\ABC.BAS            00006 APFCON0.7 = 0  
 MOVE?CT 000h, _APFCON0??7

; D:\A\ABC.BAS            00007 OSCCON=0
 MOVE?CB 000h, OSCCON

; D:\A\ABC.BAS            00008 DACCON0 = %00000000 
 MOVE?CB 000h, DACCON0

; D:\A\ABC.BAS            00009 DACCON1 = %00000000      
 MOVE?CB 000h, DACCON1

; D:\A\ABC.BAS            00010 FVRCON =  %00000000        
 MOVE?CB 000h, FVRCON

; D:\A\ABC.BAS            00011 WPUA.5=1                    
 MOVE?CT 001h, _WPUA??5

; D:\A\ABC.BAS            00012 WPUB =%11111111      
 MOVE?CB 0FFh, WPUB

; D:\A\ABC.BAS            00013 CM1CON0=0
 MOVE?CB 000h, CM1CON0

; D:\A\ABC.BAS            00014 CM1CON1=0
 MOVE?CB 000h, CM1CON1

; D:\A\ABC.BAS            00015 CM2CON0=0
 MOVE?CB 000h, CM2CON0

; D:\A\ABC.BAS            00016 CM2CON1=0 
 MOVE?CB 000h, CM2CON1

; D:\A\ABC.BAS            00017 ANSELA = %00000000 
 MOVE?CB 000h, ANSELA

; D:\A\ABC.BAS            00018 ANSELB = %00000000
 MOVE?CB 000h, ANSELB

; D:\A\ABC.BAS            00019 ADCON0 = %00000000
 MOVE?CB 000h, ADCON0

; D:\A\ABC.BAS            00020 ADCON1 = %00000000
 MOVE?CB 000h, ADCON1

; D:\A\ABC.BAS            00022 PORTB=0
 MOVE?CB 000h, PORTB

; D:\A\ABC.BAS            00023 PORTA=0
 MOVE?CB 000h, PORTA

; D:\A\ABC.BAS            00024 TRISA=%11111101
 MOVE?CB 0FDh, TRISA

; D:\A\ABC.BAS            00025 TRISB=%10101111
 MOVE?CB 0AFh, TRISB

; D:\A\ABC.BAS            00026 PORTB=0
 MOVE?CB 000h, PORTB

; D:\A\ABC.BAS            00027 PORTA=0
 MOVE?CB 000h, PORTA
; D:\A\ABC.BAS            00031 Symbol TX=PORTB.5
; D:\A\ABC.BAS            00032 Symbol LED=PORTB.0

; D:\A\ABC.BAS            00034 Clear
 CLEAR? 

; D:\A\ABC.BAS            00035 pause 100 
 PAUSE?C 064h

; D:\A\ABC.BAS            00036 Output LED
 OUTPUT?T _LED

; D:\A\ABC.BAS            00037 Output TX
 OUTPUT?T _TX

; D:\A\ABC.BAS            00039 for i=1 to 5
 MOVE?CB 001h, _i
 LABEL?L L00001 
 CMPGT?BCL _i, 005h, L00002

; D:\A\ABC.BAS            00040 toggle led
 TOGGLE?T _LED

; D:\A\ABC.BAS            00041 pause 100
 PAUSE?C 064h

; D:\A\ABC.BAS            00042 next
 NEXT?BCL _i, 001h, L00001
 LABEL?L L00002 

; D:\A\ABC.BAS            00045 WDTCON.0=1        
 MOVE?CT 001h, _WDTCON??0

; D:\A\ABC.BAS            00048 BAsLA:

 LABEL?L _BAsLA 

; D:\A\ABC.BAS            00051 goto basla
 GOTO?L _BAsLA

 END

OG

#3
cevabı şu gibi
WDTCON.0 bitini kullanabilmek için

CONFIGURATION WORD 1 
4 ve 3 bitini doğru seçmelisin
PBP kodunda bu config1 eklemesi yok
proton kodunda ise config1 var (ama wdt hep açık, WDTCON.0 kullanılamıyor)

data 48. sayfa
CONFIGURATION WORD 1

bit 4-3 WDTE<1:0>: Watchdog Timer Enable bit
11  = WDT enabled
10  = WDT enabled while running and disabled in Sleep
01  = WDT controlled by the SWDTEN bit in the WDTCON register
00  = WDT disabled


sayfa 100
WDTCON.0 biti (SWDTEN)

bit 0 SWDTEN: Software Enable/Disable for Watchdog Timer bit
If WDTE<1:0> =  00 :
This bit is ignored.
If WDTE<1:0> =  01 :
1  = WDT is turned on
0  = WDT is turned off
If WDTE<1:0> =  1x :
This bit is ignored.

Config 1
bit 4 ve 3 e şu değeri atarsan

01  = WDT controlled by the SWDTEN bit in the WDTCON register
WDTCON.0 kullanılabilir duruma geçiyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ACM

#4
  Config ayarlarına direkt müdahale etmeyi bilmiyorum , .inc dosyasında wdt  ayrını on yapıyorum (_WDTE_ON) , bununla WDTE bitlerini kendi düzenlemesi gerekmiyormu?  Program içerisinde (kodumdada var)  WDTCON.0=1 ile başlamada yapıyorum. Bir eksiğim kaldımı ?

   Kod içerisinde WDTCON=%00011000 ayarı vardı , buraya yazmadan önce  kodları sadeleştireyim derken silmişim , bu kod var. Verdiğim kodada ekliyorum. Kusura bakmayın hocam bu hatamdan dolayı.

  OG hocam datasheeti buldunuz , o sayfaları açtınız , kontrol ettiniz hemi ? Çok teşekkürler OG hocam.

OG

bence .inc dosyasını orjinal hali ile bırak

uzun zamandır pbp kullanmadım
koda config ekleme şekli, şuradan
http://www.picbasic.co.uk/forum/showthread.php?t=19257&highlight=1829

#CONFIG
__config _CONFIG1, _FOSC_HS & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF
__config _CONFIG2, _PLLEN_OFF & _LVP_OFF
#ENDCONFIG

gibi..

birde farklı format var
başka işlemci için örnek

#CONFIG
  CONFIG  FOSC = INTIO67
  CONFIG  PLLCFG = OFF
  CONFIG  PRICLKEN = OFF
  CONFIG  FCMEN = OFF
  CONFIG  IESO = OFF
  CONFIG  PWRTEN = OFF
  CONFIG  BOREN = SBORDIS
  CONFIG  BORV = 190
  CONFIG  WDTEN = ON
  CONFIG  WDTPS = 32768
  CONFIG  CCP2MX = PORTC1
  CONFIG  PBADEN = OFF
  CONFIG  CCP3MX = PORTB5
  CONFIG  HFOFST = ON
  CONFIG  T3CMX = PORTC0
  CONFIG  P2BMX = PORTB5
  CONFIG  MCLRE = EXTMCLR
  CONFIG  STVREN = ON
  CONFIG  LVP = OFF
  CONFIG  XINST = OFF
  CONFIG  DEBUG = OFF
  CONFIG  CP0 = OFF
  CONFIG  CP1 = OFF
  CONFIG  CP2 = OFF
  CONFIG  CP3 = OFF
  CONFIG  CPB = OFF
  CONFIG  CPD = OFF
  CONFIG  WRT0 = OFF
  CONFIG  WRT1 = OFF
  CONFIG  WRT2 = OFF
  CONFIG  WRT3 = OFF
  CONFIG  WRTC = OFF
  CONFIG  WRTB = OFF
  CONFIG  WRTD = OFF
  CONFIG  EBTR0 = OFF
  CONFIG  EBTR1 = OFF
  CONFIG  EBTR2 = OFF
  CONFIG  EBTR3 = OFF
  CONFIG  EBTRB = OFF
#ENDCONFIG

gibi

bir başka şekli
@ DEVICE PIC16F676, HS_OSC, WDT_ON, PWRT_ON, PROTECT_OFF

bir başkası
@ __config _XT_OSC & _WDT_ON & _MCLRE_OFF & _CP_OFF

bunlar forumdan rastgele alıntılar,
şu başlıkta config konusunu işlemişler
http://www.picbasic.co.uk/forum/showthread.php?t=543



aslında protonda oldugu gibi config değerleri direk sayısal girilebilse daha iyi
şunun gibi,
Declare Reminders Off
@ CONFIG_REQ = 0 ; Override Compiler's configuration settings
Asm-
__Config _Config1, 0x0E2C ;FOSC_INTOSC & WDTE_SWDTEN & PWRTE_OFF & MCLRE_OFF & CP_ON & CPD_ON & BOREN_ON & CLKOUTEN_OFF & IESO_OFF & FCMEN_OFF 
__Config _Config2, 0x1CFF ;WRT_OFF & PLLEN_OFF & STVREN_OFF & BORV_LO & LVP_OFF 
Endasm-
Declare Reminders On
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

ACM

   Aslında proton kullanıyordum ama benim için çok önemli bir programın girişinde atadığım değer programın başında sıfırlanıyordu. Hiçbir değişiklik yapmadan tekrar yüklediğimde sorun olmuyordu. Daha önce aynı şekilde birkaç kere başıma gelmişti ama bu program önemli ,  hataya yer yok diyerek pılıyı pırtıyı toplayıp pbp ya geçtim.

  Vediğiniz config yarlarını daha önce defalarca denedim , her zaman hata aldım bende hiç didişmeyip .inc dosyasıyla yaptım config ayarlarını.Verdiği hatalarıde ekleyeyim




OG hocam sizi fazla yormayayım , teşekkür ederim cevaplar için. Daha önce sorunu yaşamış ve çözmüş bir arkadaş yardımcı olabilir belki.

ACM

#7
   OG hocam hata inanılmaz biryerden çıktı.

1:Programda kesme mutlaka olacak
2:Kesme içinde timer1 kesmesi kullanılmayacak

Eğer bunlar yapılmaz ise wdt yi arada bul çalışsın , hav bile demiyor it , en az 10 kere denedim.  Timer1 de 3 sayıcım vardı şimdi 16 bit nasıl saydıracam onu düşünüyorum , mahfetti beni alçak pbp.

 Umarım kullanmak isteyen arkadaşların işine yarar

 Yardımda bulunan OG hocama tekrar teşekkür ederim , başımızdan eksik olmayın , hoşcakalın.