MCLR problem, aktivera/avaktivera via tabelwrite?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
wolfheat
Inlägg: 202
Blev medlem: 14 oktober 2007, 20:42:51
Ort: Gävle

MCLR problem, aktivera/avaktivera via tabelwrite?

Inlägg av wolfheat »

Har fått lite problem med mitt senaste projekt.

Eftersom jag kommer vilja använda PICen (18LF1330) med batteri så vill jag kunna gå ned i Sleep-mode för att spara batteri när den inte används. (Har aldrig använt sleep-funktionen tidigare)

I den piccen jag använder så finns det möjlighet att välja mellan MCLR och RA5 på port 4.

Eftersom jag kommer vilja styra Piccen med inputs från endast en knapp så antog jag att jag behöver någon typ av speciallösning för att få Wake-up från sleep-läget.

Min tanke är att jag skall kunna använda "knappen" och skicka in inputs under tiden piccen skall vara igång på (RA0), och när knappen hålls inne konstant i några sekunder så skall piccen gå ned i sleepmode. Att ta sig dit har inte varit något problem än så länge, men problemet ligger i hur jag väcker piccen igen. Det verkar som om enda sättet (så länge jag inte använder nån extern klocka, WDT etc) är att använda interrupt genom MCLR (och då ha både MCLR-inputen och RA0 kopplat till knappen), och väcka piccen genom den. Jag tänker mig då att jag bör slå igång MCLR funktionen precis innan piccen går ned i sleep-mode så att den kan slås igång igen via MCLR. Och att vid uppstarten så slås MCLR funktionen av igen.

MCLR on/off ändras genom CONFIG3H,07 och denna kan man inte skriva till direkt så jag använder table pointers (TBLPTRU,TBLPTRH,TBLPTRL)

Kod: Markera allt

		movlw	h'05'
		movwf	TBLPTRL ; Samma som TBLPTR
		movlw	h'00'
		movwf	TBLPTRH
		movlw	h'30'
		movwf	TBLPTRU
		movlw	h'8F'		;MCLR enable
		;movlw	h'0F'		;MCLR disable
		movwf	TABLAT
		tblwt	*;			;skriv till register 300005h
Dock verkar det som om det inte går att ändra värdet på CONFIG3H,07 eller iaf inte på det sättet jag försöker.
Skall det gå att ändra detta värde under körningen? Jag kommer jobba vidare på det här under kvällen. Vi får se om det ger något resultat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Ett vanligt extern interrupt ska väl väcka processorn?
Alltså RA0/INT0 pinnen.
Användarvisningsbild
wolfheat
Inlägg: 202
Blev medlem: 14 oktober 2007, 20:42:51
Ort: Gävle

Inlägg av wolfheat »

Det har jag inte tänkt på. Dock så fick jag det hela att fungera till slut. Nu fungerar det så som jag önskat.


löste det genom att lägga till lite kod som jag hittade i ett exempel i databladet.

Kod: Markera allt

;**** CONFIG-WRITE ENABLE  (OR DISABLE) MCLR **** 
mclr_on		movlw	h'8F'		;MCLR enable
		movwf	TABLAT
		goto	configwrite
mclr_off	movlw	h'0F'		;MCLR disable
		movwf	TABLAT
configwrite	nop	; vill skriva till " _CONFIG3H EQU  H'300005' "
		movlw	05h
		movwf	TBLPTRL ; Samma som TBLPTR
		movlw	00h
		movwf	TBLPTRH
		movlw	30h
		movwf	TBLPTRU

		; ** tillägg
		BSF EECON1, EEPGD ; point to Flash program memory
		BSF EECON1, CFGS ; access Flash program memory
		BSF EECON1, WREN ; enable write to memory
		BSF EECON1, FREE ; enable Row Erase operation
		BCF INTCON, GIE ; disable interrupts
		MOVLW 55h
		MOVWF EECON2 ; write 55h
		MOVLW 0AAh
		MOVWF EECON2 ; write 0AAh
		BSF 	EECON1, WR ; start erase (CPU stall)
		BCF EECON1, WREN ; disable write to memory
		; ** tillägg

		tblwt	*;	skriv till 300005
		return
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Hur ofta görs detta ?
Tänk på att antalet skrivningar till flash är begränsat...
Användarvisningsbild
wolfheat
Inlägg: 202
Blev medlem: 14 oktober 2007, 20:42:51
Ort: Gävle

Inlägg av wolfheat »

Det tror jag inte skall vara något problem, är det inte över 100 000ggr man kan skriva till flash? Eller var det 10 000ggr, oavsett så kommer det inte spela någon roll så länge det rör sig om så många gånger. Kommer ligga under 1000 gånger skulle jag tro.

sodjan: Jag gjorde ett snabbt försök att använda INT0, men utan positivt resultat. Så jag använder metoden som jag till slut fått att fungera, nämligen med MCLR. Får se om jag orkar lägga mer tid på det senare och eventuellt byter.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

OK. Bara du har koll på det.
Jag kollade inte så noga, såg bara att INT är ett sätt att komma ur
sleep.
Skriv svar