PIC programering / PICKit 2 Demoboard

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

PIC programering / PICKit 2 Demoboard

Inlägg av sheazar »

Köpte en PICKit 2 för några dagar sedan och försöker vänja mig vid PIC Assemblern :)
Stötte dock på lite problem när jag försökte använda switchen. Ville att en LED skulle tändas medan man höll knappen intryckt men det vill sig inte riktigt. LED lyser när knappen är uppe istället, så då tänkte jag att man jag gjort fel på när den ger 1 resp 0. Men sen insåg jag att den aldrig använder Pressed sektionen så den beter sig precis likadant om man tar bort denna (och ändrar lite hopp). Någon som kan förklara varför?

Kod: Markera allt

	
    list		p=16f690		; list directive to define processor
	#include	<P16F690.inc>		; processor specific variable definitions
	
	__CONFIG    _CP_OFF & _CPD_OFF & _BOR_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _FCMEN_OFF & _IESO_OFF

	cblock	0x20
		swStat
		counter
		delayCount1
		delayCount2
	endc




;**********************************************************************
	ORG		0x000			; processor reset vector
  	goto		Start			; go to beginning of program


Start
	clrf	swStat
	clrf	PORTC
	bsf		STATUS,RP0		; select bank 1
	bsf		TRISA,3
	clrf	TRISC			; set all Port C output
	
	bcf		STATUS,RP0		; back to bank 0

Released
	bsf		swStat,0
	movf	swStat,w
	movwf	PORTC
	clrf	counter
ReleasLoop
	btfss	PORTA,3			; if pressed
	goto	$-2				; clear counter if not pressed

	incf	counter			; increment counter
	movlw	0x05			; compare to 5
	subwf	counter,w
	btfsc	STATUS,Z
	goto	Pressed

	goto	Delay

Pressed
	bcf		swStat,0
	movf	swStat,w
	movwf	PORTC
	clrf	counter
PressLoop
	btfsc	PORTA,3
	goto	$-2

	incf	counter
	movlw	0x05
	subwf	counter,w
	btfsc	STATUS,Z
	goto	Released

	goto	Delay

Delay
	movlw	0x07
	movwf	delayCount1
DelayLoop
	decfsz	delayCount2
	goto	DelayLoop
	decfsz	delayCount1
	goto	DelayLoop

	btfsc	swStat,0
	goto	ReleasLoop
	
	goto	PressLoop

	END
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: PIC programering / PICKit 2 Demoboard

Inlägg av Icecap »

Switchen sitter till -MCLR och fungerar därför inte, du vill hålla -MCLR ledig till PICKit2.
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sheazar »

Tackar men du får gärna utveckla lite :?
MCLR är väl master clear så hur ska man då göra för att kunna använda switchen?
Senast redigerad av sheazar 9 januari 2009, 13:29:36, 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 programering / PICKit 2 Demoboard

Inlägg av sodjan »

> hur ska man då göra för att kunna avända switchen?

Om det *är* en reset-switch (alltså kopplad till MCLR) så använder du den
när du vill starta om ("resetta") processorn. Till något annat kan den i så
fall naturligstvis inte användas...
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sheazar »

Men i de exempel som följer med PICKit 2 så använder dom den till att bland annat öka en räknare
(Det står att man ska kryssa i så att den "Setting MCLR 3-State" för att switchen ska fungera vilket jag gjort antar att detta sätter en 3-state som då gör att den inte "resettas")
Senast redigerad av sheazar 9 januari 2009, 13:33:15, 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 programering / PICKit 2 Demoboard

Inlägg av sodjan »

Då är det *inte* en resetknapp.

Men vad är problemet ? Gör som de gjorde i exemplen då...
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sheazar »

Problemet är att jag inte förstår varför deras fungerar men inte min
Här är en av deras

Kod: Markera allt

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

     cblock     0x20
Delay               ; Assign an address to label Delay1
Display             ; define a variable to hold the diplay
LastStableState     ; keep track of switch state (open-1; closed-0)
Counter
     endc
     
     org 0
Start:
     bsf       STATUS,RP0          ; select Register Page 1
     movlw     0xFF
     movwf     TRISA               ; Make PortA all input
     clrf      TRISC               ; Make PortC all output

     bcf       STATUS,RP0          ; address Register Page 2
     bsf       STATUS,RP1     
     movlw     0xF7                ; PortA3 pin is digital
     movwf     ANSEL
     bcf       STATUS,RP0          ; address Register Page 0
     bcf       STATUS,RP1
     
     clrf      Display
     clrf      PORTC
     movlw     1
     movwf     LastStableState     ; Assume the Switch is up.
     clrf      Counter
MainLoop:
     btfsc     LastStableState,0
     goto      LookingForUp
LookingForDown:
     clrw                          ; assume it's not, so clear
     btfss     PORTA,3             ; wait for switch to go low
     incf      Counter,w           ; if it's low, bump the counter
     movwf     Counter             ; store either the 0 or incremented value
     goto      EndDebounce
     
LookingForUp:
     clrw                          ; assume it's not, so clear
     btfsc     PORTA,3             ; wait for switch to go low
     incf      Counter,w
     movwf     Counter

EndDebounce:
     movf      Counter,w           ; have we seen 10 in a row?
     xorlw     5
     btfss     STATUS,Z     
     goto      Delay1mS
     
     comf      LastStableState,f   ; after 10 straight, reverse the direction
     clrf      Counter
     btfss     LastStableState,0   ; Was it a key-down press?
     goto      Delay1mS            ; no: take no action
     
     incf      Display,f           ; if it's the down direction, 
     movf      Display,w           ; take action on the switch
     movwf     PORTC               ; (increment counter and put on display)
     
Delay1mS:
     movlw     .71                 ; delay ~1000uS
     movwf     Delay
     decfsz    Delay,f             ; this loop does 215 cycles
     goto      $-1          
     decfsz    Delay,f             ; This loop does 786 cycles
     goto      $-1
     goto      MainLoop
     end
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sodjan »

Var i koden går det fel ? Har du kört den i MPSIM ?
Du kan gärna snygga till den med med BANKSEL istället för bcf/bsf direkt mot RP0/1 bitarna.

> bsf TRISA,3

Och resten av TRISA ? Du har väl inga "öppna" ingångar ??

> goto $-2

Är det helt säker på vad du gör här ? Tips, använd *aldrig* "$" i adresser, använd alltid labels.
Användarvisningsbild
wombat
Inlägg: 721
Blev medlem: 6 november 2006, 16:39:08
Ort: Stockholm

Re: PIC programering / PICKit 2 Demoboard

Inlägg av wombat »

sheazar skrev:varför deras fungerar men inte min

De sätter _MCLRE_OFF
Du sätter _MCLRE_ON

En funkar! :D

När du trycker på knappen resettar du processorn och
när du sedan släpper den rullar programmet igång och
tänder lysdioden.

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

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sodjan »

Right... då *ÄR* det en knapp kopplat till MCLR... :-) :-)
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: PIC programering / PICKit 2 Demoboard

Inlägg av AndersG »

Kappen är kopplad til MCLR och därför fungerar denj inte om man styr PICKIt2 från MPLAB, men väl om man styr den från PICKIT2-programvaran. Det finns dokumenterat på Microchips webbplats
sheazar
Inlägg: 40
Blev medlem: 12 maj 2008, 12:56:54
Ort: Göteborg

Re: PIC programering / PICKit 2 Demoboard

Inlägg av sheazar »

Perfekt fungerade alldeles utmärkt från MPLAB om man satte _MCLRE_OFF :D
Tack så mycket för all hjälp!
Användarvisningsbild
AndersG
EF Sponsor
Inlägg: 9127
Blev medlem: 25 februari 2008, 17:10:58
Ort: Mariehamn
Kontakt:

Re: PIC programering / PICKit 2 Demoboard

Inlägg av AndersG »

Kod: Markera allt

#ifdef __DEBUG
	__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
#else
	__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
#endif
Notera att _MCLRE_OFF kan ställa till med problem i produktion, men är ett måste om du skall ha knappen i MPLAB
Skriv svar