Discussion in "PIC Microcontroller Discussion" started by    cestudent    Nov 10, 2008.
Mon Nov 10 2008, 06:56 AM
#1
hello guyz
how r u all?

i have a problem while testing stepper motor
i wrote an assembly code to rotate the stepper motor for a Specific number of steps and then it should stop but the stepper is still moving!!! can u tell what to do coz i want to stop the stpper motor after the count=0 .
am using pic16f84a and 6 wire stepper motor



  
; 
;******************************************************************* 
; NOTES: 
; 
; 
;       PORTBO= NORTH POLE 
;       PORTB1= EAST POLE 
;       PORTB2= SOUTH POLE 
;       PORTB3= WEST POLE 
;***************************************************************** 


PORTA      EQU     5 
PORTB                      EQU     6 
STATUS      Equ    3 
TMR0      EQU   1 
COUNT      EQU   0CH 
COUNT1      EQU   0DH 
INTCON      EQU   0BH 
COUNTD      EQU   0FH 

;****************************************************************** 
        LIST    P=16F84A 
        
        org      0 
        goto    START 

;********************************************* 
  

DELAY   CLRF   TMR0 
   MOVLW   .10 
   MOVWF   COUNT 
   BCF   STATUS,5 
WAITA   BCF   INTCON,2 
WAITB   BTFSS   INTCON,2 
   GOTO   WAITB 
   DECFSZ   COUNT,1 
   GOTO   WAITA 
   RETURN 
   RETLW   0 
;************************************** 

START 
  
   BSF   STATUS,5 ;BANK1 
   MOVLW   B'00000000'       
   TRIS   PORTB               ; b0:b3 " stepper output " 
   MOVLW   B'00000011'       
   TRIS   PORTA    
   MOVLW   B'0000001' 
   OPTION 
   BCF     STATUS,5  ; BANK0 

   CLRF   PORTB 
   MOVLW   .10 
   MOVWF   COUNTD 
    
LOOP1    
   BSF   PORTB,4 
   CALL   DELAY 

   MOVLW   .1 
   MOVWF   PORTB 

   CALL   DELAY 
    


   MOVLW   .2 
   MOVWF   PORTB 


   CALL   DELAY 
    

   MOVLW   .4 
   MOVWF   PORTB 

   CALL   DELAY 
    
    
   MOVLW   .8 
   MOVWF   PORTB 
    

   BCF   PORTB,4 
   DECFSZ   COUNTD 
    GOTO   LOOP1 

   BSF   PORTB,5 
LL   NOP 
   GOTO LL 

   END 
    


plzz help me
Mon Nov 10 2008, 12:45 PM
#2
   BCF   PORTB,4
   DECFSZ   COUNTD
;    GOTO   LOOP1
;remove this instruction and try again.

   BSF   PORTB,5
LL   NOP
   GOTO LL

   END
Mon Nov 10 2008, 02:14 PM
#3
BCF   PORTB,4
   DECFSZ   COUNTD
    GOTO   LOOP1


The DECFSZ instruction is missing an operand.
Change to...

BCF   PORTB,4
   DECFSZ   COUNTD,1
    GOTO   LOOP1
Mon Nov 10 2008, 02:27 PM
#4
thanx alot Ajay & sashijoseph
am gonna check both codes and feed back with the results
Tue Nov 11 2008, 12:58 PM
#5
the problem has been solved with disabling the watchdog timer
thanx guyz for ur help

Thu Nov 13 2008, 02:25 AM
#6
great well my answer was wrong sorry.. i did not see your program properly.

[Topic moved to PIC Microcontroller Discussion]
Thu Nov 13 2008, 04:07 PM
#7
sorry guys i have an other problem

let me tell u what i do , i am doing lift project , in this code am using the input switches as floor requests and each floor request has specific number of steps and the lift should calculate the distance and the direction

but the problem when i tested the code the distance was wrong !!

maybe because i dont know how to tell the stepper motor to move for 30 steps for example or is there any calculation to do that in a correct way
here my code

; 
;*******************************************************************
; NOTES: 
; 
;
;       PORTBO= NORTH POLE
;       PORTB1= EAST POLE 
;       PORTB2= SOUTH POLE
;       PORTB3= WEST POLE 
;*****************************************************************


PORTA		EQU     5
PORTB           EQU     6 
STATUS		Equ 	3
TMR0		EQU	1
COUNT		EQU	0CH 
COUNT1		EQU	0DH
INTCON		EQU	0BH
COUNTD		EQU	20H
CURRENTCOUNT	EQU	21H 
DISTANCE	EQU	22H 

;******************************************************************
        LIST    P=16F84A
        __CONFIG 0x200B 
        org   	0
        goto 	START

;*********************************************
 

DELAY	CLRF	TMR0
	MOVLW	.3
	MOVWF	COUNT
	BCF	STATUS,5
WAITA	BCF	INTCON,2
WAITB	BTFSS	INTCON,2
	GOTO	WAITB
	DECFSZ	COUNT,1
	GOTO	WAITA
	RETURN
	RETLW	0
;**************************************

START 
 
	BSF	STATUS,5 ;BANK1
	MOVLW	B'00000000'		 ; SET B0 , B1 ,B2,B3,AS OUTPUT  
	TRIS	PORTB	
	MOVLW	B'00001111'		 ; SET A0 , A1 ,A2,A3,AS INPUT SWITCHES 
	TRIS	PORTA	
	MOVLW	B'0000001'
	OPTION
	BCF  	STATUS,5  ; BANK0 

	CLRF	PORTB
	


	MOVLW	.0
	MOVWF	CURRENTCOUNT 

loop1	BTFSS	PORTA,0 	; check for a floor1 request 
	goto	check1
	MOVLW	.0
	MOVWF	COUNTD
	GOTO	MAIN
		
	
check1	BTFSS	PORTA,1		; check for a floor2 request 
	goto	check2
	MOVLW	.30
	MOVWF	COUNTD
	GOTO	MAIN



check2	BTFSS	PORTA,2		; check for a floor3 request 
	goto	check3
	MOVLW	.50
	MOVWF	COUNTD
	GOTO	MAIN
	
	
check3	BTFSS	PORTA,3		; check for a floor4 request 

	goto	check4
	MOVLW	.70
	MOVWF	COUNTD
	GOTO	MAIN

check4	goto	loop1	


MAIN 



	MOVF	COUNTD,W
	subwf	CURRENTCOUNT,W   ; distanation is w 
	MOVWF	DISTANCE
	MOVF	COUNTD,W
	MOVWF	CURRENTCOUNT 
	btfss	STATUS,0        ; test if the result is positive or negative 
	goto	UP
	goto    DOWN

	



UP 	MOVLW	.8
	MOVWF	PORTB

	CALL   DELAY
	


 	MOVLW	.4
	MOVWF	PORTB


	CALL	DELAY 
	

 	MOVLW	.2
	MOVWF	PORTB

	CALL	DELAY 
	
	MOVLW	.1
	MOVWF	PORTB
	

	CALL	DELAY  
	DECFSZ	DISTANCE,1
 	GOTO	UP
	GOTO	loop1 
	 




DOWN 	MOVLW	.1
	MOVWF	PORTB

	CALL   DELAY
	


 	MOVLW	.2
	MOVWF	PORTB


	CALL	DELAY 
	

 	MOVLW	.4
	MOVWF	PORTB

	CALL	DELAY 
	
	MOVLW	.8
	MOVWF	PORTB
	

	CALL	DELAY  
	DECFSZ	DISTANCE,1
 	GOTO	DOWN 
	GOTO	loop1 
	 

END 



	
						



waiting for ur replies guyz


[ Edited Thu Nov 13 2008, 04:23 PM ]
Fri Nov 14 2008, 09:27 AM
#8
any help ppl
Fri Nov 14 2008, 03:55 PM
#9
You have routines UP and Down which presumably move the stepper one step either way.

Do they work ?
ie if you run UP 50 times, does it move 50 steps ?
if you run UP 50 times and then Down 50 times do you end up at the same place.?

If so, congratulations your hardware works and
you have a way to measure floors , just decide how many loops of UP or Down is a floor.

The general layout of your program seems odd to me.
I would suggest something like,

Start
//Initialize variables
Main:

Read button:
call Check for button pressed //routine to read buttons..set new floor
call Calculate Distance and direction //routine to... guess what..
call Up_ Down loops //do a set number of loops
go to Read button. //Go round again




Use Calls and returns and less GOTOs


[ Edited Fri Nov 14 2008, 04:04 PM ]
Sun Nov 16 2008, 09:11 AM
#10
thanx ExperimenterUK for ur help and advice
i have a question when I output .1 this means that the stepper has to move one step right ?


[ Edited Sun Nov 16 2008, 11:47 AM ]

Get Social

Information

Powered by e107 Forum System

Conversation

ajay_bhargav
Thu Aug 28 2014, 06:34 AM
Please post questions in forum
Thu Aug 28 2014, 01:44 AM
yednekachew
can you give a project made bay proteus software
Mon Aug 25 2014, 07:12 AM
Vinod Soni
Hi Sir, How can i make this RFID with ATMega16/32 controller
pavanjain
Sat Aug 23 2014, 05:10 AM
Sir i want to download the hex file in P89v51rd2 microcontroller using max232 IC but we not load the program in IC
Tue Aug 19 2014, 04:51 PM
allen ndumu
please i will like to know if the problem of speed control of dc motor using keypad and l298 was if yes can i have the complete project send it to the address i really need to see it
Tue Aug 19 2014, 10:47 AM
Amit Bisht
sir i want to have some trending projects on which i could work related to ATmega 16 microcontroller
ExperimenterUK
Sat Aug 16 2014, 04:16 PM
@diligent . create a thread
Sat Aug 16 2014, 03:17 PM
diligent
in assembly langauage programming..
Sat Aug 16 2014, 03:14 PM
diligent
will anyone help me?
Thu Aug 14 2014, 10:24 PM
Amirudin Tone
i help, i need liberary IC 4047 in the proteus. thanks

Downloads

Comments

enisi
Wed Aug 27 2014, 06:08 AM
sadalakshmi
Wed Aug 27 2014, 12:39 AM
Paecake
Sun Aug 24 2014, 04:07 PM
pavanjain
Sat Aug 23 2014, 02:33 AM
samchovatiya
Thu Aug 21 2014, 02:30 PM
hasmukhjain
Wed Aug 20 2014, 06:28 AM
rablo
Tue Aug 19 2014, 10:10 AM
faizhameed
Tue Aug 12 2014, 10:39 PM

Online

Guests: 47, Members: 0 ...

most ever online: 182184
(Members: , Guests: 182184) on 06 Aug 2010: 01:37 AM

Members: 37501
Newest member: enisi
Forum Activity
ajay_bhargav Avatar
Posted By ajay_bhargav
Thu Aug 28 2014, 06:33 AM
Did your professor ask this question to you? I sug...
siddique Avatar
Posted By siddique
Thu Aug 28 2014, 01:09 AM
hi,In the Tx code, I have disabled auto acknowledg...
ExperimenterUK Avatar
Posted By ExperimenterUK
Wed Aug 27 2014, 04:59 PM
Your board has two serial ports, are you connectin...
ExperimenterUK Avatar
Posted By ExperimenterUK
Wed Aug 27 2014, 04:45 PM
In your TX code I see where you set payload width ...
enisi Avatar
Posted By enisi
Wed Aug 27 2014, 07:05 AM
It can be more than one ansawer correctly
enisi Avatar
Posted By enisi
Wed Aug 27 2014, 06:57 AM
Port 0 is connected indicator 7 segments, so that ...
siddique Avatar
Posted By siddique
Wed Aug 27 2014, 01:48 AM
Pls check the Tx and Rx functions have made some c...
ExperimenterUK Avatar
Posted By ExperimenterUK
Tue Aug 26 2014, 06:03 PM
I assume you have made the changes I suggested to ...
siddique Avatar
Posted By siddique
Tue Aug 26 2014, 03:20 AM
Hi,Tried your suggestions.when i put the device in...
ExperimenterUK Avatar
Posted By ExperimenterUK
Mon Aug 25 2014, 04:00 PM
This tutorial looks useful.http://www.diyembedded....