pic 16f690 digital i/o på porta, jag lyckas inte!

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

funkar fint!
????
både i pic en och i simulatorn

flyttar värdet på porten till w
borde inte funka eller?
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

AndersG skrev:Menar du:

Kod: Markera allt

	movf	PORTA,w
	movwf	PORTC
?

Har du testat koden i MPLABS simulator?
funkar fint!
både i pic en och MPLABS simulator
men jag hittar inte instruktionen i referensbladet.
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9113
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av AndersG »

Så det funkar nu?

Du hade skrivit "movfw", inte "movwf", Notera även att "movf register, dest", dvs vill du flytta från registret till W eller till registret själv. Därför skall du inte utelämna det. se

Kod: Markera allt

MOVF Move f
Syntax: [ label ] MOVF f,d
Operands: 0 ≤ f ≤ 127
d ∈ [0,1]
Operation: (f) → (dest)
Status Affected: Z
Description: The contents of register ‘f’ is
moved to a destination dependent
upon the status of ‘d’. If d = 0,
destination is W register. If d = 1,
the destination is file register ‘f’
itself. d = 1 is useful to test a file
register since status flag Z is
affected.
Words: 1
Cycles: 1
Example: MOVF FSR, 0
After Instruction
W = value in FSR
register
Z = 1
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

ja programmet läser "porta" och lägger värdet på "portc"
med movfw som instruktion.
men jag skall ändra till movf porta,w för att allt skall vara rätt och riktigt.

men "ra5" och "ra4" läses som 0 oavsett om det ligger en etta eller nolla på.
Senast redigerad av peterjansson20 13 april 2010, 11:55:42, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av sodjan »

> funkar fint!
> ????
> både i pic en och i simulatorn
> flyttar värdet på porten till w
> borde inte funka eller?

Förstår du själv någonting av vad du skriver ?
Använder du "Förhandsgranska" ?
Du borde även läsa på lite om användadet av stor bokstav
där det ska vara det och vanlig interpunktur (punkt, komma o.s.v)

Det är väldigt dålig stil att bara kasta ihop något
hastigt ihophafsat och posta det så där. Om du skriver
din kod med samma eftertanke så förvånar det inte
att dugg att du har problem. Så skärp till dig lite så
får du både bättre svar här och lättare att få koden
att fungera.

Nog om det...

AndersG> Vad är "movfw" ?

Se MPASM manualen, kapitel :
"A.6 12-BIT/14-BIT INSTRUCTION WIDTH PSEUDO-INSTRUCTIONS".

> men jag hittar inte instruktionen i referensbladet.

Vilken instruktion är det du talar om och vad är "referensbladet" ?
Om det är databladet för processorn du menar så har den bara med de
intruktioner som själva processorn känner igen. I MPASM manualen
finns även de "pseudo-instructions" som MPASM känner igen och som
översätts till motsvarande "riktiga" PIC instruktioner. Se kapitlet ovan.

Om det är "MOVFW <f>" du menar så fungerar den, den översätts av MPASM
till "MOVF <f>, W". Men personligen vet jag inte om det gör koden tydligare...

> ja programmet läser "porta" och lägger värdet på "portc"
> men "ra5" och "ra4" läses som 0 oavsett om det ligger en etta eller nolla på.

OK. Så det fungerar alltså inte. Fixa en uppsnyggad och rensad kod och
posta den med code-taggarna så får vi se...
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9113
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av AndersG »

"A.6 12-BIT/14-BIT INSTRUCTION WIDTH PSEUDO-INSTRUCTIONS".
Ah.. Jag skulle dock undvika den då det är lätt att förväxla med movwf.

Annars, testa med något i stil med:

Kod: Markera allt

Start:
	BANKSEL 	TRISC
	clrf 		trisc
	MOVLW 		0ff 
	MOVWF 		TRISA ; make IO Pin B.0 an output

	BANKSEL 	PORTA
	CLRF 		PORTA ;Init PORTA
	BANKSEL		ANSEL
	CLRF 		ANSEL ;digital I/O
	BANKSEL		ANSELH
	CLRF 		ANSELH ;digital I/O
	BANKSEL		PORTA


MainLoop:
	movf 		PORTA,w
	movwf 		PORTC
	goto MainLoop ; Do it again...
end
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

Tack AndersG
Du är till stor hjälp!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av sodjan »

Nedanstående fungerar OK i MPLAB/SIM.
Det som jag lägger på RA0-5 kopieras till RC0-5.

Kod: Markera allt

#include <p16F690.inc>
 __config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
 

 org 0

 banksel   TRISC
 clrf      TRISC
 MOVLW     h'ff'
 MOVWF     TRISA

 banksel   ANSEL
 CLRF      ANSEL

MainLoop
 movf      PORTA, W
 movwf     PORTC
 goto      MainLoop

 end
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

Nu fungerar det!
Tack sodjan

mvh
Peter
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av sodjan »

Och vad var det ?
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9113
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av AndersG »

Ja, precis. Vi vill veta vad felet var :)
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

Grund problemet var att jag bara kunde läsa in data från "RA3"

Med
BANKSEL ANSELH
CLRF ANSELH ;digital I/O

Så gick det att läsa "RA0" - "RA3"
Men inte "Ra4" och "Ra5"

Med komandot movfw som visade sig vara ett felaktigt komando gick det att läsa "PORTA"
i MPLAB SIM.
Men med komandot

MOVF PORTA,W

Så går det inte att läsa av PORTA men det fungerar på en programerad pic.

Jag tog beslutet att flytta min puls givare från "RA4" och "RA5" Till "RA1" och "RA2".
Så var problemet löst.

Jag kommer att lösa problemet senare och ge er de svar ni önskar!
diman
EF Sponsor
Inlägg: 192
Blev medlem: 14 februari 2007, 09:58:06
Ort: Löddeköpinge

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av diman »

jag minns något som skrevs om att ibland kan MPLAB klydda med att låsa MCLR som inte gick att rubba varken in eller ut
hände bara när man körde via IDE och pickit2 med 16f690
RA3 är ju MCLR annars som ska stängas av med _MCLRE_OFF i configen om man vill använda den som I/O (nåväl bara I :-) )

kan det också vara en del av problemet kanske...
Användarvisningsbild
peterjansson20
Inlägg: 66
Blev medlem: 12 april 2010, 09:07:16

Re: pic 16f690 digital i/o på porta, jag lyckas inte!

Inlägg av peterjansson20 »

_MCLRE_OFF
Är med i configen
Skriv svar