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
ü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.
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
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.
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.
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
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
(https://i.ibb.co/MBzKCH1/A.jpg) (https://ibb.co/MBzKCH1)
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.
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.