MPLAB SIM: Simulera ett timer-interrupt? *Löst*

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

MPLAB SIM: Simulera ett timer-interrupt? *Löst*

Inlägg av JimmyAndersson »

Kort sagt: Jag vill se vad som händer i koden när jag får ett interrupt på TMR0.
Har läst kapitel 6 i manualen (PDF-fil) men behöver något mer "hands on" för att jag ska fatta.
Jag lyckas helt enkelt inte komma på hur man ska göra. :)

I Simulus -> Asynch testade jag att lägga till en "action" som ökar T0CKI med 10 cykler när jag trycker "Fire" (>).
Jag har även en annan "action" som togglar RA4 för att simulera en knapp som ska läsas av när jag får ett timer0-interrupt.

Efter att jag lagt till dessa actions så tryckte jag "Save" och fick då:
"Stimulus: Please define some synchronous stimulus first."

Fråga 1) Vad innebär det och var jag hittar det?


Provade ändå att simulera (med "Animation") och körde den förstnämnda action. Då fick jag:

SIM-N0001 Note: Asynchronous Stimulus Pulse High T0CKI fired.
IOPORT-W0001: Pin(s) (0x04) on PORTA can not be stimulated due to being controlled by the A/D converter
IOPORT-W0001: Pin(s) (0x04) on PORTA can not be stimulated due to being controlled by the A/D converter


"due to being".. Säger man verkligen så? Det låter som grammatikfel i mina öron.
Därför förstår jag inte heller vad den raden vill säga mig. Det är fråga 2. :)


Kodklipp som visar att AD'n är disabled; (ifall det är det som meddelandet säger.)

Kod: Markera allt

;	Interrupt
	banksel	INTCON
    bsf		INTCON, GIE		;Global interrupt enable bit  <--
    bsf		INTCON, PEIE	;Enable unmasked peripheral interrupts <--
    bsf		INTCON, T0IE	;Enable the Timer0 interrupt <--
    bcf		INTCON, INTE	;Disable the RA2/INT external interrupt
    bcf		INTCON, RAIE	;Disable the PORTA change interrupt <--
    bcf		INTCON, T0IF	;Timer0 did not overflow <--
    bcf		INTCON, INTF	;RA2/INT external interrupt did not occur
    bcf		INTCON, RAIF	;None of the PORTA-pins have changed state <--
    
	banksel	IOCA
	movlw	b'00000000'		;Inga interrupt on change på PORTA. <--
    movwf	IOCA
    
	banksel	PIE1
    bcf		PIE1, EEIE		;Disable the EE write complete interrupt
    bcf		PIE1, ADIE		;Disable the ADC-interrupt <--  DISABLED
    bcf		PIE1, RCIE		;Disable the EUSART receive interrupt
    bcf		PIE1, C2IE		;Disable the comparator C2 interrupt
    bcf		PIE1, C1IE		;Disable the comparator C1 interrupt
    bcf		PIE1, OSFIE		;Disable the oscillator fail interrupt
    bcf		PIE1, TXIE		;Disable the EUSART transmit interrupt
    bcf		PIE1, TMR1IE	;Disable the Timer1 overflow interrupt

	banksel	PIR1
    clrf	PIR1			;Cleara alla interrupt
    bcf		PIR1, ADIF		;AD interrupt clear <--

;	ADC
	banksel	ANSEL
	movlw	b'00000100'		;AN2 (pin 11) analog. Resten digitala
	movwf	ANSEL
    
	banksel	ADCON0
    bsf		ADCON0, ADFM	;Högerjusterad AD
    bcf		ADCON0, VCFG	;Vdd som referens
    bcf		ADCON0, CHS2	;Channel: AN2 (pin 11)
    bsf		ADCON0, CHS1	;Channel: AN2 (pin 11)
    bcf		ADCON0, CHS0	;Channel: AN2 (pin 11)
    bcf		ADCON0, ADON	;ADC disabled <--  DISABLED!!
    bcf		ADCON0, GO_DONE	;AD-conversion NOT in progress <--
(Jaha ja.. även denna gång blir tabbarna åt skogen när man klistra in kod här...)


Tips och svar mottages som vanligt med stor nyfikenhet. :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB SIM: Simulera ett timer-interrupt?

Inlägg av sodjan »

> Kort sagt: Jag vill se vad som händer i koden när jag får ett interrupt på TMR0.

Kort svar: Vad har detta att göra med allt det andra du skriver ? :-)

Men annars så är det väl bara att sätta upp TMR0 och jag tror att
SIM kommer att hantera det helt OK. Jag ser inte vad detta har med
stimulus eller ADC att göra.
Användarvisningsbild
JimmyAndersson
Inlägg: 26586
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Re: MPLAB SIM: Simulera ett timer-interrupt?

Inlägg av JimmyAndersson »

Aha, så lätt var det ja. :)

Att jag tog upp ADC'n var bara pga meddelandet:
"IOPORT-W0001: Pin(s) (0x04) on PORTA can not be stimulated due to being controlled by the A/D converter"

Men nu när jag insåg att jag inte behöver använda någon action för att timern ska "ticka" så
behöver jag inte den action (som ökar T0CKI med 10 cykler när jag trycker "Fire")
och då får jag ju inte meddelandet ovan.


Så icke-problemet är löst. :D
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: MPLAB SIM: Simulera ett timer-interrupt? *Löst*

Inlägg av sodjan »

När det gäller ADC meddelandet så skulle jag spontant gissa att
det kommer om man inte har stängt av analoga funktionerna
på de aktuella pinnarna. Men det är bara en gissning...
Skriv svar