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. :humm:

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:
Bild

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:
Bild
(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å:

Kod: Markera allt

       	processor   12f629
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. :oops:

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.