Sida 1 av 1
Pic12f629 och Watchdog Timer problem
Postat: 27 april 2009, 15:37:41
av PopUnoNkoK
Jag har problem med att INTE använda Watchdog timern på en PIC12f629.
Mina configbitar ser ut såhär:
Kod: Markera allt
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON
Alltså WatchDog Timer OFF.
Mitt OPTION_REG ser ut så här:
Kod: Markera allt
movlw b'00000111'
Banksel OPTION_REG
movwf OPTION_REG
Alltså 1:256 prescaler som är satt till TMR0 alltså "0" på bit 3 i OPTION_REG:en.
Trots detta så när jag kör MPLABSIM så säger den att programmet stängts av pga WatchDog timern Expired.
Jag antar att det är något enkelt som jag missat men jag kan inte komma på vad.
Någon som har ett förslag.
PS. det är första gången jag testar att programera en annan processor än P16F628A. Ds.
Re: Pic12f629 och Watchdog Timer problem
Postat: 27 april 2009, 15:47:41
av sodjan
Posta gärna ett litet "test-case" som visar problemet så att fler kan
titta på det (i t.ex MPSIM)...
Re: Pic12f629 och Watchdog Timer problem
Postat: 27 april 2009, 17:55:29
av PopUnoNkoK
Det kan jag absolut fixa. Det får dock vänta tills jag kommer hem i natt.
Jag förstod att jag skulle stöta på lite bekymmer första gången jag bytte processor men detta problem hade jag inte räknat med. Eftersom jag haft problem med MPLAB SIM tidigare så blir jag direkt lur på att det kan vara den.
Min kod kommer upp efter 12 ikväll.
Ps Är förståss ändå intresserad om någon har något förslag på vad det kan vara trots att jag inte tillhandahållit koden.

Ds.
Re: Pic12f629 och Watchdog Timer problem
Postat: 27 april 2009, 20:04:12
av v-g
Du har inte ställt in så att du configurerar CONFIG bitarna i kompilatorn istället för i koden? (Configure/configure bits)
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 00:34:26
av PopUnoNkoK
Då ska vi se...
När jag kollar i "Configure -> Configuration Bits" så ser det ut så här:
Alltså det visar juh att den är på, men varför den är på kan jag inte förstå. Slår jag av den manuellt i detta fönster och sedan trycker "Build All" så slås den på igen, så det är defenitivt i koden som WD Timern slås på (För att svara på V-g's fråga).
Meddelandet som jag får upp ser ut så här:

(Säkert helt irellevant för att lösa problemet men när jag ändå tagit en Screenshoot så är det väl lika bra att använda den.

)
Koden ser ut så här:
Kod: Markera allt
;************************************************************************
; Processor: 12F629 *
; *
;************************************************************************
; *
; *
; *
; *
;************************************************************************
processor 12f629
include <p12f629.inc>
;**** CONFIGURATION
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON ;& _LVP_OFF
errorlevel -302 ; no "register not in bank 0" warnings
errorlevel -312 ; no "page or bank selection not needed for this device" messages
;=====================================================================
; File register use
;=====================================================================
cblock H'20'
; variables used for context saving
cs_W
cs_STATUS
endc
;=====================================================================
; Konstanta värden
;=====================================================================
goto Start
;=====================================================================
; INTERRUPT SERVICE ROUTINE
;=====================================================================
ISR ORG 0004h
; save context
movwf cs_W ; save W
movf STATUS,w ; save STATUS
movwf cs_STATUS
; service Timer0 interrupt
bcf INTCON,T0IF ; clear interrupt flag
movlw b'111111'
banksel GPIO
xorwf GPIO
;Första pulsen
isr_end ; restore context then return
movf cs_STATUS,w ; restore STATUS
movwf STATUS
swapf cs_W,f ; restore W
swapf cs_W,w
retfie
;***** MAIN PROGRAM
Start
;---------------------------------------------------------------------
; Set up I/O
;---------------------------------------------------------------------
banksel GPIO
clrf GPIO ;Init GPIO
movlw 07h ;Set GP<2:0> to
movwf CMCON ;digital IO
bsf STATUS,RP0 ;Bank 1
;clrf ANSEL ;Digital I/O
movlw b'000000' ;Set GP<3:2> as inputs
movwf TRISIO ;and set GP<5:4,1:0>
;as outputs
; configure Timer0
movlw b'00000111' ; Prescaler = Ingen
Banksel OPTION_REG ;
movwf OPTION_REG ;
banksel GPIO
;---------------------------------------------------------------------
; Initialize memory
;---------------------------------------------------------------------
; configure interrupts
bsf INTCON, GIE
bsf INTCON, T0IE
bsf INTCON, PEIE
loop
goto loop
nop
END
Jag gissar att det blir fel någonstans så att inte min __config inställning blir rätt men jag lyckas inte "debugga". Alltså jag hittar inte så att jag kan se vilket värde Config registret har när jag kört igång koden. Hittar inte adress 2007h i "File Registers" fönstret eller så att jag kan lägga till det i "Watch" fönstret. Skulle vilja se det binära talet för att kunna jämföra med bitarna i manualen på sidan 52 (eller 54 beroende på om man tittar på PDF numreringen eller sidnumreringen längst ner på sidan).
Alla tips tas tacksamt emot.
MVH Peter F
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 01:57:59
av bearing
Är rätt modell vald för projektet?
Configure -> Select Device
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 09:43:18
av sodjan
Testkört u.a.
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 10:58:20
av PopUnoNkoK
Nix, rätt modell för Projektet var INTE vald.
Jag har lärt mig sätta upp Projekt i MpLab från någon guide som jag inte har tillhands nu och jag har inget minne av att jag någonsin ställt in vilken pic jag använt, har förvisso bara använt en typ av pic men i alla fall.
Jag trodde verkligen att det räckte med att ändra i början av koden, alltså:
Men men, nu blinkar i alla fall dioden även på min lilla 8benta Pic.
Tack för hjälpen.
MVH Peter F
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 11:26:23
av sodjan
Väldigt märkligt...
Jag får alltid nedanstående om jag väljer fel processor.
Som sagt, väldigt märkligt att du inte fick det...
Kod: Markera allt
Warning[215] C:\DATA\PROJ\TEST\UNTITLED.ASM 12 : Processor superseded by command line. Verify processor symbol.
Message[301] C:\PROGRAM\MICROCHIP\MPASM SUITE\P12F629.INC 36 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 12:03:23
av PopUnoNkoK
Sodjan: Jag fick säkert det där meddelandet. Jag har varit så nöjd så länge det inte varit något error medelande.
Får hålla bättre koll i framtiden.
Tack för svaren.
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 12:33:22
av sodjan
> Får hålla bättre koll i framtiden.
På denna punkt är vi helt överens.
Men jag håller med om att det skulle kunna bli ett "Error" och avbrytas...
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 15:05:27
av v-g
Händer även mig att jag glömmer ställa in allt i MPLAB. Det är inte lätt att komma ihåg allt direkt från start heller men det brukar gå att lösa mha felmeddelandena. Jag ser det som självklart att det inte ska vara några warnings när något är kompilerat.
En sak jag upptäckt som är smidig att utgå från är de färdiga template (=mallarna) som finns i c:\Program\Microchip\MPASM Suite\Template\Object\ finns för alla modeller.
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 15:29:54
av PopUnoNkoK
Ok, ska kolla in de mallarna, det låter mycket smidigt.
Kan bara meddela att jag nu lyckats att stänga av och på en diod med hjälp av en signal från en R/C mottagare. Alltså samma typ av signal som behövs för att styra ett servo.
Just nu är det bara i två lägen, alltså när motagar signalen som går in i picen har en Duty cycle som är längre än 1,5mSec så är dioden tänd och när den är kortare än 1,5mSec så är den släckt. Känns riktigt bra.

Dioden har dock lite blink/flimmer om signalen är precis i mitten alltså precis 1,5mSec. Detta tar juh bort en del av den sköna känslan men för den applikation som detta är tänkt kommer det inte att spela någon roll. Signalen kommer bara att vara i ändlägena.
Tack för all hjälp.
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 16:08:59
av sodjan
> ...om signalen är precis i mitten alltså precis 1,5mSec.
Alltså är den inte "precis" 1.5 ms, och den kommer aldrig att vara det heller.
Enklast är att bygga in lite hysteres, d.v.s att om lysdioden just har tänts så
sänker du gränsen lite, t.ex t-ex till 1.4 ms, och när den har släckts så höjer
du till t.ex 1.6 ms. Eller tvärtom...
Re: Pic12f629 och Watchdog Timer problem
Postat: 28 april 2009, 18:29:21
av PopUnoNkoK
Det låter som en bra ide Sodjan, jag får (eventuellt) titta på det när jag kommer hem. Som sagt, för den aplikation som jag har tänkt detta så funkar det bra nu.
Tack för alla svar.