stimulus controller i mplab?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

v-g:
Det var PEIE som var problemet. Tusen tack. Det står inget om den i Tmr0 kapitlet förutom att den är med i "bit-tabellen" för INTCON.

Sodjan: Du har helt rätt att sättet att skriva som du tipsade om känns renare och mer lättläst, i alla fall för mig. Så nu ser det ut så här.

Kod: Markera allt

        ; configure interrupts
		bsf INTCON, GIE
		bsf INTCON, T0IE
		bsf INTCON, PEIE
Tack för hjälpen "yet again"...

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

Re: stimulus controller i mplab?

Inlägg av sodjan »

PEIE ska inte behövas för Timer *0*.
Jag kollade just detta tidigare, men eftersom jag tolkade det
som att PEIE inte hade med detta att göra så skrev jag inget
om det... :roll:

> förutom att den är med i "bit-tabellen" för INTCON.


Och där är den gråmarkerad och "Shaded cells are not used for Timer0."

Märkligt. Kan vara en bugg i MPSIM...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Förmodligen har du rätt Sodjan, för nu fungerar det inte igen... Jag stegade innan jag skrev det förra inlägget och såg hur TMR0 stegade upp till FF och sedan hamnade jag i ISR. Sedan skrev jag förstås inlägget och var glad som en lärka. Nu när jag testar igen så står TMR0 still och pga det hamnar jag aldrig i ISR:en... Jag har inte ändrat något sedan det fungerade... :?

Verkar nästan vara en bugg i MPLAB, men jag vill inte säga det riktigt för det är såååå mycket annat som jag inte har koll på som det kan vara... :)

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

Re: stimulus controller i mplab?

Inlägg av sodjan »

> Nu när jag testar igen så står TMR0 still

OK, det har ju inte direkt med interruptet att göra.
Sätt watch på STATUS och kolla att TMR0 inte är avstängd o.s.v.
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Nu blir det så där jobbigt igen. :)

Jag vet inte hur man använder Watch i MPLAB (Låter som en trevlig funktion) :) , hittar det inte, MEN jag har uppe File Registers fönstret och ser Status minnet.

När jag läster i databladet hittar jag dock inte vilken bit i status registret som skulle påverka Tmr0 eller Timers i allmänhet.

Status registret ändras lite när jag stegar igenom början av koden (Banksel osv) men när jag är nere i Mainloopen så är det bara bit 3 & 4 som är "set". "00011000".

Inner bär någon av dessa bitar att Timern är avstängd?

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

Re: stimulus controller i mplab?

Inlägg av sodjan »

Glöm STATUS, jag menade OPTION...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Detta är värdet som ligger i Option Reg helatiden (förutom första snutten innan jag ställt in Timern).

"00001000"

Bit 7&6 (borde) inte spela någon roll.
Bit 5 t0CS är "0" vilket innebär internal instruction cycle clock vilket är det jag vill ha.
Bit 4 (borde) inte spela någon roll.
Bit 3 PSA är "1", jag vill inte ha någon prescaler.
Bit 2-0 (borde) inte spela någon roll då jag inte använder prescaler till Trm0.

Är det något mer jag har missat?
När jag väljer att inte använda prescalern så sätter man juh den till WatchDog timern men den är avstängd i __configbitarna, kan det ställa till bekymmer?

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

Re: stimulus controller i mplab?

Inlägg av sodjan »

Kan du posta ett aktuellt kodexempel som jag kan köra i MPSIM ?
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Absolut

Kod: Markera allt

;************************************************************************
;                                                                       *
;   Filename:      MA_L6-Flash_LED-50p-int-1Hz.asm                      *
;   Date:          23/11/08                                             *
;   File Version:  1.0                                                  *
;                                                                       *
;   Author:        David Meiklejohn                                     *
;   Company:       Gooligum Electronics                                 *
;                                                                       *
;************************************************************************
;                                                                       *
;   Architecture:  Midrange PIC                                         *
;   Processor:     12F629                                               *
;                                                                       *
;************************************************************************
;                                                                       *
;   Files required: none                                                *
;                                                                       *
;************************************************************************
;                                                                       *
;   Description:    Lesson 6 exercise 1c                                *
;                                                                       *
;   Demonstrates use of Timer0 interrupt to perform a background task   *
;                                                                       *
;   Flash an LED at exactly 1 Hz (50% duty cycle).                      *
;                                                                       *
;************************************************************************
;                                                                       *
;   Pin assignments:                                                    *
;       GP2 - flashing LED                                              *
;                                                                       *
;************************************************************************
       	processor   16f628a
  	   	include      <p16f628a.inc>

;**** CONFIGURATION
		__config	_INTOSC_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
			
			TidTagning1
			TidTagning2
			TidTagning3
			S1Cnt				; Servo 1 Uptime
			S2Cnt				; Servo 2 Uptime
			DownCnt				; Nere tid
			LEDCnt				; Led för testing
			S1TIME
			S2TIME
			LEDTIME
			DOWNTIME
			Outputs				; Output storage
			flagga				;flagga för att välja vilken kod som ska utföras vid interrupt
		endc



; pin assignments
S1	equ			B'0000001'	; Mask for LED1
S2	equ			B'0000010'	; Mask for LED2
LED	equ			B'0000010'	; Mask for LED3

    

;***** VARIABLE DEFINITIONS

                                

;************************************************************************
        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
        ;   TMR0 overflows every 60 clocks = 60 us
        ;   (only Timer0 interrupts are enabled)
        ;
        movlw   .256-.60+.3    ; add value to Timer0
        banksel TMR0            ;   for overflow after 60 counts
        addwf   TMR0,f
        bcf     INTCON,T0IF     ; clear interrupt flag

;-------- tidtagningen -------------
        decfsz  TidTagning1,f        ; decrement interrupt count
		goto	puls
		movlw		.255
		movwf		TidTagning1
        decfsz  TidTagning2,f        ; decrement interrupt count
		goto	puls
	;	incf  		S1TIME,1        ; decrement interrupt count
		movlw		.255
		movwf		TidTagning2
        ;decfsz  TidTagning3,f        ; decrement interrupt count
		;movlw		.255
		;movwf		TidTagning3
		;goto	puls
		;incf  		S1TIME,1        ; decrement interrupt count



puls        
		btfss	flagga, 0
		goto	down
ettan	; count for Servo 1time 
        ;banksel S1Cnt
        decfsz  S1Cnt,f        ; decrement interrupt count
        goto    isr_end         ; when count = 0 (every 40 interrupts = 10 ms)
        movfw   S1TIME             ;   reload count
        movwf   S1Cnt
        
        ; toggle LED every 500 ms
        ;decfsz  cnt_10ms,f      ; decrement 10 ms period count
        ;goto    isr_end         ; when count = 0 (every 50 times = 500 ms)
        ;movlw   .50             ;   reload count
        ;movwf   cnt_10ms
        

		call	S1sub
		
		bsf		flagga, 0
        goto	isr_end
tvaan
		goto	isr_end

down	; count for down time 
        ;banksel S1Cnt
        decfsz  DownCnt,f        ; decrement interrupt count
        goto    isr_end         ; when count = 0 (every 40 interrupts = 10 ms)
        movfw   DOWNTIME             ;   reload count
        movwf   DownCnt

		call	LEDsub

		bcf		flagga, 0
        goto	isr_end

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		TRISB			; 
		clrw						; Make all PORTB bits output
		movwf		TRISB			; 
		movlw		B'00000010'		; Setup PORTA
		movwf		TRISA			; 
		banksel		PORTA			; Back to bank 0
		MOVLW 		0x07 ;Turn comparators off and
		MOVWF 		CMCON ;enable pins
		errorlevel	+302

        ; configure Timer0           
        movlw   b'00001000'     ; timer mode (T0CS = 0),
        Banksel OPTION_REG     ; no prescaling (PSA = 1)
        movwf   OPTION_REG      ;   -> increment TMR0 every 1 us
		banksel		PORTA			; Back to bank 0
;---------------------------------------------------------------------
;	Initialize memory
;---------------------------------------------------------------------
		movlw		B'00000001'		; Startvärdet ska vara 1 för att dungera?
		movwf		Outputs			; to off
		;movlw		B'00000000'		;
		movwf		flagga			;flaggan till noll
		movlw		.17
		movwf		S1TIME
		movwf		S2TIME
		movlw		.255
		movwf		LEDTIME
		movwf		DOWNTIME
		movwf		TidTagning1
		movwf		TidTagning2
		movwf		TidTagning3
		movfw		S1TIME			; Initialize the counters
		movwf		S1Cnt			; 
		movfw		S2TIME
		movwf		S2Cnt
		movfw		LEDTIME
		movwf		LEDCnt

        ; configure interrupts
		bsf INTCON, GIE
		bsf INTCON, T0IE
		bsf INTCON, PEIE

;***** Main loop
loop   	
		btfsc		PORTA,1	
		goto		loop
PBnere	btfss		PORTA,1	
		goto		PBnere
		bsf			PORTB, 1 
	
        incf  		S1TIME,1        ; decrement interrupt count
		

        goto    loop  


    





;=====================================================================
;  Subroutines
;=====================================================================
SendOut
		movf		Outputs,W		; Pick up the output word
		movwf		PORTB			; And send it to the world
		return   

;---------------------------------------------------------------------
;	LED code
;---------------------------------------------------------------------
LEDsub
		movlw		LED			; Toggle LED bit by
		xorwf		Outputs,F		; XORing with current state
		call		SendOut			; Set outputs
		return

;---------------------------------------------------------------------
;	Servo Two code
;---------------------------------------------------------------------
S2sub
		movlw		S2			; Hämta masken
		xorwf		Outputs,F		; XORing with current state
		call		SendOut			; Set outputs
		return

;---------------------------------------------------------------------
;	Servo One code
;---------------------------------------------------------------------
S1sub
		movlw		S1			; Hämta masken
		xorwf		Outputs,F		; XORing with current state
		call		SendOut			; Set outputs
		return

Break	
		nop
		return

        END


Men nu får man juh skämmas för att koden inte ser så strukturerad ut... :) Jag blir lätt så ivrig...

Tack för att du testar den i en annan MPLAB.

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

Re: stimulus controller i mplab?

Inlägg av sodjan »

Funka direkt. TMR0 räknade upp till FF och man hamnar i ISR'en...
Kör MPLAB 8.10...
TMR0 räknade upp ett "steg" för varje tryck på F7 ("step into").
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Hmmm.. Jag då får vi väl anta att koden stämmer... Jag kör MPLAB 8.20, skulle kunna vara något problem där men det känns trots allt lite långsökt. Jag är naiv och vill tro att Microchip kan sina saker... :)

Ser dock att det finns en version 8.30, kanske man ska ge den ett försök...

Tack för att du testade
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: stimulus controller i mplab?

Inlägg av sodjan »

Fungerade lika bra i 8.30, slängde just in den...
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: stimulus controller i mplab?

Inlägg av PopUnoNkoK »

Nu har jag också uppgraderat till 8.30 och då fungerar det, i alla fram till och med nu. Jag väntade ett tag med att skriva detta svar så att jag har testkört det i ca en timme och det fungerar fint (än i alla fall).
Jag har blivit lite skeptisk. :)

Tack för hjälpen...

MVH Peter F
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: stimulus controller i mplab?

Inlägg av v-g »

Jag har också varit med om att simuleringen inte stämmer, men kan tyvärr inte minnas i vilket fall/version detta skedde.
Skriv svar