- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: Wie am einfachsten Ausführungszeit Unterprogramms messen?

  1. #11
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Anzeige

    Praxistest und DIY Projekte
    O.K.Vielen Dank! Das soll auf dem PIC18F252 laufen. Na ja, bischen habe ich schon mit timer "gebastelt", da habe ich keine Angst.
    MfG

  2. #12
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Mein "Werkzeug" dazu habe ich schon fertig und mehrmals ausprobiert (z.B. für sehr genaue Einstellung Verzögerungschleifen). Es ist für den PIC18F2X2 geschrieben. Die konfiguration des Systemoscillators kann geändert werden (aktuell: externer Quarzoscillator). Das komplette Unter/Programm ohne RETURN (stattdessen 2xNOP) muss zwischen die zwei Sternlinien (wo jetzt zum Testen 10xNOP steht) kopiert und assembliert werden.

    Nach dem Einschalten des programmierten PICs, steht die Ablaufzeit des Unter/Programms als hex Zahl in dem A Register (A3-A0) (obere Zeile des Displays links) und als dec Zahl in dem D Register (D3-D0) (untere Zeile des Displays rechts). Die maximale Zahl beträgt FFFFFFh (16777215d) Systemtakte (Fosc/4). Als Display habe ich die in dem Thema:

    https://www.roboternetz.de/phpBB2/viewtopic.php?t=13685

    beschriebene Hardware benutzt. Die alle mit @ bezeichneten Unterprogramme gehören zu dem Display und können für anderes Display ersetzt werden. Falls jemand dafür interessiert ist, bin ich zur Hilfe bereit.

    Dank dem "Werkzeug" konnte ich mir die Frage, ob die POSTINC und POSTDEC Programmablauf verlangsamen selber mit klarem NEIN beantworten und aus dem Forum löschen.

    Inzwischen habe ich ein ASM Messprogramm geschrieben und in Wiki hochgeladen:

    https://www.roboternetz.de/wissen/in...r#PIC_Profiler

    MfG
    Code:
    ;	Profiler
    	LIST      P=18F252
    	include "P18F252.inc"
    ;		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H
    		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _EC_OSC_1H
    ;		__CONFIG    _CONFIG1H, _OSCS_OFF_1H & _HSPLL_OSC_1H
    		__CONFIG    _CONFIG2L, _BOR_OFF_2L & _BORV_20_2L & _PWRT_ON_2L
    		__CONFIG    _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H
    		__CONFIG    _CONFIG3H, _CCP2MX_ON_3H
    		__CONFIG    _CONFIG4L, _STVR_OFF_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
    		__CONFIG    _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L 
    		__CONFIG    _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
    		__CONFIG    _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L 
    		__CONFIG    _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
    		__CONFIG    _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    		__CONFIG    _CONFIG7H, _EBTRB_OFF_7H
    #define	@PORT	PORTB
    #define	@TRIS	TRISB
    #define	@DT	@PORT,7
    #define   @CK	@PORT,6
    ;************************
    #define	_C	STATUS,C
    #define	_Z	STATUS,Z
    #define	_Fcra	Flags,0
    #define	_Fcrp	Flags,1
    #define	_Ferr	Flags,2
    ;************************
    A3		EQU	0x00
    A2		EQU	0x01
    A1		EQU	0x02
    A0		EQU	0x03
    B3		EQU	0x04
    B2		EQU	0x05
    B1		EQU	0x06
    B0		EQU	0x07
    C3		EQU	0x08
    C2		EQU	0x09
    C1		EQU	0x0A
    C0		EQU	0x0B
    D3		EQU	0x0C
    D2		EQU	0x0D
    D1		EQU	0x0E
    D0		EQU	0x0F
    Flags		EQU	0x10
    ATemp		EQU	0x11
    HTemp		EQU	0x12
    RTemp		EQU	0x13
    Tmp		EQU	0x15
    Tmp1		EQU	0x16
    ;************************
    @Tmp		EQU	0xFF
    @Tmp1		EQU	0xFE
    @Tmp2		EQU	0xFD	
    @Tmp3		EQU	0xFC
    ;************************
    		ORG	0x0000
    		call	Init
    Main		bcf	INTCON,GIE		; disable interrupts
    		movlw	7
    		movwf	T0CON			; configure Timer0
    		clrf	TMR0H			; clear Timer 0
    		clrf	TMR0L
    		bsf	T0CON,TMR0ON		; start Timer0
    ;*******************************************************
    		nop				; Hier wird das gemessene Programm kopiert
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    		nop
    ;*******************************************************
    		movlw	0xA7			; "stop" Timer0
    		movwf	T0CON
    		call	GetTime
    		call	@
    		goto	Main 
    GetTime		movff	TMR0L,A1
    		movff	TMR0H,A2
    		movff	TMR0L,HTemp
    		clrf	ATemp
    		bcf	TRISA,5
    FToggle		incf	ATemp,1
    		bsf	T0CON,T0SE
    		bcf	T0CON,T0SE
    		movf	TMR0L,0
    		subwf	HTemp,0
    		btfsc	_Z
    		goto	FToggle
    		comf	ATemp,1
    		incf	ATemp,0
    		movwf	A0
    		bcf	T0CON,TMR0ON
    		bsf	TRISA,5
    Hex_Dec	call	CDClr			; Hex>A,D>Dec
    		movlw	1
    		movwf	C0
    		movlw	0x18			; 24 bit Hex (6digits) > 32 bit Dec (8 digits)
    		movwf	HTemp
    Hex_DecL	btfsc	A0,0
    		call	AddDC
    		call	CopyCB
    		call	AddCB
    		call	ARotRb
    		decfsz	HTemp,1
    		goto	Hex_DecL
    		call	BCClr
    		return
    BCClr		movlw	8
    		movwf	ATemp
    		lfsr	FSR0,B3
    BCClrL		clrf	POSTINC0
    		decfsz	ATemp,1
    		goto	BCClrL
    		return
    CDClr		movlw	8
    		movwf	ATemp
    		lfsr	FSR0,C3
    CDClrL		clrf	POSTINC0
    		decfsz	ATemp,1
    		goto	CDClrL
    		return
    CopyCB		lfsr	FSR0,C0
    		lfsr	FSR1,B0
    CopyReg	movlw	4
    		movwf	ATemp
    CopyRegL	movff	POSTDEC0,POSTDEC1
    		decfsz	ATemp,1
    		goto	CopyRegL		
    		return
    AddCB		lfsr	FSR0,B0			; C+B>C
    		lfsr	FSR1,C0
    		goto	AddReg
    AddDC		lfsr	FSR0,C0			; D+C>D
    		lfsr	FSR1,D0
    AddReg		bcf	_Ferr			; 32 bit, (4 Bytes)
    		bcf	_Fcrp
    		movlw	4
    		movwf	ATemp
    AddRegL	bcf	_Fcra
    		movf	INDF0,0
    		addwf	INDF1,0
    		btfsc	_C
    		bsf	_Fcra
    		daw
    		movwf	INDF1
    		btfsc	_C
    		bsf	_Fcra
    		btfss	_Fcrp
    		goto	AddRegN
    		movlw	1
    		addwf	INDF1,0
    		daw
    		movwf	INDF1
    		btfsc	_C
    		bsf	_Fcra
    AddRegN	bcf	_Fcrp
    		btfsc	_Fcra
    		bsf	_Fcrp
    		movf	POSTDEC0,1
    		movf	POSTDEC1,1
    		decfsz	ATemp,1
    		goto	AddRegL
    		btfsc	_Fcra
    		bsf	_Ferr
    		return
    ARotRb		lfsr	FSR0,A2			; A register 3 Bytes (24 bit)
    RRotRb		movlw	3			; rotates a register 1 bit right
    		movwf	RTemp
    		bcf	_Fcrp
    		btfsc	A0,0
    		bsf	_Fcrp
    RRotRbL	bcf	_Fcra
    		btfsc	INDF0,0
    		bsf	_Fcra
    		bcf	_C
    		btfsc	_Fcrp
    		bsf	_C
    		rrcf	INDF0,1
    		bcf	_Fcrp
    		btfsc	_Fcra
    		bsf	_Fcrp
    		movf	POSTINC0,1
    		decfsz	RTemp,1
    		goto	RRotRbL
    		return
    Cls		lfsr	FSR0,0
    ClsL		clrf	POSTINC0
    		btfss	FSR0L,6
    		goto	ClsL
    		return
    @		lfsr	FSR2,0x000
    		call	@1st
    		call	@Line
    		call	@2nd
    		call	@Line
    		return
    @Line		movlw	8
    		movwf	@Tmp3
    @LineL		movf	POSTINC2,0
    		call	@Val 
    		decfsz	@Tmp3,1
    		goto	@LineL
    		return
    @1st		movlw	0x80
    		goto	@Cmd
    @2nd         	movlw 	0xC0
    @Cmd          	movwf 	@Tmp2
    		bcf	STATUS,C
    		goto	@Send
    @SPC		movlw	" "
    		goto	@Char
    @Val	 	movwf 	@Tmp1
    		swapf	@Tmp1,0
    		call 	@Num
    		movf 	@Tmp1,0
    @Num		andlw	0x0F
    		movwf	@Tmp
    		movlw 	0x0A
    		subwf 	@Tmp,0
    		btfsc  	STATUS,C
    		addlw 	7
    		addlw	0x3A
    @Char	 	movwf 	@Tmp2
    		bsf	STATUS,C
    @Send		bcf	@CK
    		bcf	@DT
    		bsf	@DT
    		movlw	9
    		movwf 	@Tmp
    @Ser		bcf	@CK
    		bcf 	@DT
    		btfsc	@Tmp2,7
    		bsf 	@DT
    		bsf 	@CK
    		rlcf	@Tmp2,1
    		decfsz	@Tmp,1
    		goto	@Ser
    		bcf	@DT
    		bsf	@DT
    @DelS		movlw	0x64
    		movwf	@Tmp2
    @DelSL		decfsz	@Tmp2,1
    		goto	@DelSL
    		return
    Init		movlw	7
    		movwf	ADCON1
    		clrf	TRISA			; make all ports as output
    		clrf	PORTA
    		clrf	TRISC
    		clrf	PORTC
    		clrf	@TRIS
    		clrf	@PORT
    		call	Cls
    		movlw 	0x38			; initialise display
    		call 	@Cmd
    		movlw	0x0C
    		call	@Cmd
    		movlw 	6
    		goto 	@Cmd
    		END

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress