Programació en mpasm del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Modes de funcionament del motor pas a pas

Programa del grup 2

Aquest grup va codificar el sentit de gir amb l'interruptor connectat a RB4 i el mode manual amb l'interruptor connectat a RA5. En mode manual, el polsador de la placa (RA3) fa avançar els passos. Els diferents modes es controlen segons la següent taula:

RB5 RB7 Mode
0 0 Aturat
0 1 Full step
1 0 Wave drive
1 1 Half step

El seu programa es basa en tenir una funció per a cada mode en lque s'envia un valor o un altre al motor segons el sentit de gir triat. Després de cada pas, es mira si està en manual o no; si està en manual, s'espera a que el polsador s'activi. El programa final és:

#include <p16F690.inc>
	__config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
	cblock 0x20
Delay1
Delay2
temps
	endc
	org 0
Inici
	bsf 		STATUS,RP0
	bcf 		OPTION_REG,7 
	movlw		0xFF
	movwf		TRISA
	movwf		WPUA 
	movlw		0xFF
	movwf		TRISB
	clrf		TRISC
	movlw		0x10
	movwf		ADCON1
	bcf 		STATUS,RP0
	bsf 		STATUS,RP1
	movlw		0xFF 
	movwf		WPUB 
	movlw		0xF7
	movwf		ANSEL
	movlw		0x00 
	movwf 		ANSELH 
	bcf 		STATUS,RP0
	bcf 		STATUS,RP1
	movlw		0x01
	movwf		ADCON0
	movlw		0x00
	movwf		PORTC
					;
MainLoop
	bsf 		ADCON0,GO 			
	btfsc		ADCON0,GO 		
	goto		$-1 
	movf		ADRESH,w		 
	addlw		1 	 		
	movwf		Delay2
	movf		Delay2,w		
	movwf		temps 	
	btfss		PORTB,5		
	goto		InterruptorCero 
	btfss		PORTB,7
	goto		wavedrive
	goto		halfstep
					;
InterruptorCero
	btfss		PORTB,7	
	goto		parado	 
	goto		fullstep	
					;
parado				
	movlw		0x00		
	movwf		PORTC		
	goto		MainLoop
manual
	btfss		PORTA,5		
	return			
	btfsc		PORTA,3	
	goto		manual
	btfss		PORTA,3
	goto		$-1
	return
					;
Bucle
	movf		temps,w
	movwf		Delay2
bucle
	decfsz		Delay1,f
	goto		bucle
 	decfsz		Delay2
	goto		bucle
	return
					;
PostPaso
	movwf		PORTC
	call		manual
	call		Bucle
	return
					;
wavedrive
	movlw		b'00010001'
	call		PostPaso
	movlw		b'10001000'	
	btfss		PORTB,4		
	movlw		b'01000100'	
	call		PostPaso
	movlw		b'00100010'
	call		PostPaso
	movlw		b'01000100'
	btfss		PORTB,4
	movlw		b'10001000'
	call		PostPaso
	goto		MainLoop
					;
halfstep
	movlw		b'10011001' 
	btfss		PORTB,4
	movlw		b'01010101'
	call		PostPaso
	movlw		b'10001000' 
	btfss		PORTB,4
	movlw		b'01000100'
	call		PostPaso
	movlw		b'10101010'
	btfss		PORTB,4
	movlw		b'01100110'
	call		PostPaso
	movlw		b'00100010' 
	btfss		PORTB,4
	movlw		b'00100010'
	call		PostPaso
	movlw		b'01100110'
	btfss		PORTB,4
	movlw		b'10101010'
	call		PostPaso
	movlw		b'01000100' 
	btfss		PORTB,4
	movlw		b'10001000'
	call		PostPaso
	movlw		b'01010101'
	btfss		PORTB,4
	movlw		b'10011001'
	call		PostPaso
	movlw		b'00010001' 
	btfss		PORTB,4
	movlw		b'00010001'
	call		PostPaso
	goto		MainLoop
					;
fullstep
	movlw		b'10011001' 
	btfss		PORTB,4
	movlw		b'01010101'
	call		PostPaso
	movlw		b'10101010'
	btfss		PORTB,4
	movlw		b'01100110'
	call		PostPaso
	movlw		b'01100110'
	btfss		PORTB,4
	movlw		b'10101010'
	call		PostPaso
	movlw		b'01010101'
	btfss		PORTB,4
	movlw		b'10011001'
	call		PostPaso
	goto		MainLoop
	end

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.