Sida 9 av 9

Postat: 7 oktober 2007, 13:47:34
av sodjan
> Är den korrekt nu?

Fungerar det nu ?

Postat: 7 oktober 2007, 13:52:41
av basmicke
Har inte mplab ide på den här datorn är inte hemma än. Å det är inte min dator som jag sitter på. Lyckades bara hitta den demo filen, men hittade även assembel programmet och den funkade inte där, hittade 25 errors men jag kan kolla över den mer senare, å se om jag hittar dem. Vad som jag har gjort fel med andra ord.

Postat: 7 oktober 2007, 13:56:25
av sodjan
Postar du kod som du inte ens har testat själv ??

Postat: 7 oktober 2007, 20:27:42
av basmicke

Kod: Markera allt

processor pic16f267
include <P16F627.inc>

	__CONFIG        _BODEN_ON & _CP_OFF & _DATA_CP_OFF & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _MCLRE_ON & _XT_OSC

;==========================================================================
;       Variable Definition
;==========================================================================
TIMER1		EQU	H'20'		;Used in delay routine
TIMER2		EQU	H'21'		; "	"	"	
PATERN		EQU	H'22'		;Pattern data for effect's

		ORG	0		;Reset vector address
		GOTO	RESET		;goto RESET routine when boot.


;		*********************************************
;		*  Example of a delay routine               *
;		*********************************************

DELAY_ROUTINE   MOVLW   D'255'         ;54 Generate approx 10mS delay at 4Mhz CLK
                MOVWF   TIMER2
DEL_LOOP1       MOVLW   D'255'	       ;60	
                MOVWF   TIMER1
DEL_LOOP2       DECFSZ  TIMER1,F
                GOTO    DEL_LOOP2
                DECFSZ  TIMER2,F
                GOTO    DEL_LOOP1
		RETURN


;	       **********************************
;              **  RESET :  main boot routine  **
;              **********************************

RESET		MOVLW	B'00000111'	;Disable Comparator module's
		MOVWF	CMCON
		;
		BANKSEL	0006		;Switch to register bank 1
					;Disable pull-ups
					;INT on rising edge
					;TMR0 to CLKOUT
					;TMR0 Incr low2high trans.
					;Prescaler assign to Timer0
					;Prescaler rate is 1:256
		MOVLW	B'11010111'	;Set PIC options (See datasheet).
		MOVWF	OPTION_REG	;Write the OPTION register.
		;
		CLRF	INTCON		;Disable interrupts
		MOVLW	B'11000000'
		MOVWF	TRISB		;RB7 & RB6 are inputs.
					;RB5...RB0 are outputs.
		MOVLW	B'11111111'	;all RA ports are inputs
		MOVWF	TRISA
		BANKSEL	0005		;Switch Back to reg. Bank 0
		CLRF	PORTB		
		;

EFFECT_1	MOVLW	B'00000001'	;Activate LD1 (RB0)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000010'	;Activate LD2 (RB1)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00000100'	;Activate LD3 (RB2)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00001000'	;Activate LD4 (RB3)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00010000'	;Activate LD5 (RB4)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		MOVLW	B'00100000'	;Activate LD6 (RB5)
		MOVWF	PORTB
		CALL	DELAY_ROUTINE
		GOTO	EFFECT_1
		END
Så nu visar det inga fel när jag assembla det så nu borde den vara korrekt.
Är det ngt mer med den koden som är "fel"?

Postat: 7 oktober 2007, 20:34:38
av björn
Att skriva kod för en microprocessor utan att kunna testa mot hårdvaran är inget *jag* skulle göra eller rekkomendera.
Visst, man kan ju simulera i mplab men även det är ganska segjobbat jämfört med test IRL.

Jag förstår inte ens hur du kan försöka lära dig detta utan att kunna testa det ordentligt, hur skall du hitta eventuella fel om du skriver all kod utan att testa någon gång på vägen?

Postat: 7 oktober 2007, 22:32:16
av sodjan
> Så nu visar det inga fel när jag assembla det

Fint !
Och fungerar den ??

Postat: 8 oktober 2007, 01:26:24
av Kaggen
> Är det ngt mer med den koden som är "fel"?

Det enda jag reflekterar över är att banksel används lite underligt. Jag använder inte banksel på det viset, men det kanske funkar. Sedan är processor definitionen på första raden fel. Det står "pic16f267" jag antar att du igentligen menar "pic16f627".

Om det sedan fungerar får du prova själv, ingen utvecklare med självbevarelsedrift skulle med säkerhet konstatera att din kod kommer att funka utan problem bara genom att läsa den, oavsett hur många gånger man läst och kontrollerat koden. Det är bättre att be om hjälp att läsa koden efter det du konstaterat att det *inte* funkar, och tillhandahållit en noggran utförlig felbeskrivning för den som skall lägga tid på detta.

Och redan nu kan jag ju ge exempel på hur en felbeskrivning inte ska se ut och hur den bör se ut (enligt mitt tycke):

Hur en felbeskriving INTE skall se ut
Det funkar inte, vad är felet? (bifogar 2000 rader okommenterad kod, alternativt ingenting)

Hur en felbeskrivning BÖR se ut
Jag räknade med att LED1 skulle lysa i 10 ms och vara släckt i 20ms, men den lyser i 40 ms och är släckt i 10 ms. Det här tror jag är de relevanta avsnitten i min kod (bifogar väl utvalda ej skrymmande stycken av kod där felet tros ligga). I ditt fall här är dock koden så liten att det inte är mycket att stycka upp.

För att kunna hjälpa behöver man veta:

1. Vad förväntade du dig skulle hända?
2. Vad hände istället?

Postat: 8 oktober 2007, 10:33:47
av sodjan
> Sedan är processor definitionen på första raden fel. Det står "pic16f267"

Jag har bestämt för mig att MPLAB säger ifrån om "processor" inte
stämmer överens med "device" inställningen i menyerna...

Nä, basmicke får nog göra sin hemläxa lite bättre och återkomma då det
finns mer att gå på. Att korrekturläsa källkod finns ingen anledning till,
det gör MPLAB/MPASM utan problem.

Postat: 11 oktober 2007, 17:35:06
av basmicke
japp jag ska kolla mer på min hemläxa nu.
sen så kanske de blir lite lättare framöver när jag börjar med växelströmsläran.

Postat: 11 oktober 2007, 20:28:18
av Tjille
Ersätt

BANKSEL 0006
med
BSF STATUS,RP0

och

BANKSEL 0005
med
BCF STATUS,RP0

och testa.

Postat: 11 oktober 2007, 21:24:56
av sodjan
Nej nej nej... :ajabaja:

ANVÄND BANKSEL !!

Men gör det på korrekt sätt.

T.ex

Kod: Markera allt

      BANKSEL   PORTB      ;Switch Back to reg. Bank 0
      CLRF   PORTB       
O.s.v....

Postat: 11 oktober 2007, 22:28:51
av Tjille
Metoden med BCF och BSF funger och är enligt rekommendation i kap 3.2.2.1 i databladet för PIC16F62X. Genom detta undviker man dessutom att förändra statusbitar.

Postat: 11 oktober 2007, 22:33:44
av sodjan
BCF/BSF fungerar men det är *väldigt* lätt att göra fel.
BANKSEL både fungerar och gör rätt.

Välj det du föredrar....

> Genom detta undviker man dessutom att förändra statusbitar.

Förtydliga.