АвторСообщение



Пост N: 1
Зарегистрирован: 07.10.14
Рейтинг: 0
ссылка на сообщение  Отправлено: 07.10.14 20:12. Заголовок: Контроллер шд на pic12f629


Помогите пожалуйста доработать код. Вот схема:[img]http://www.talkingelectronics.com/projects/Stepper%20Motor%20Controller/images/StepperMotorCct.gif[/img]

Хочу сделать чтобы не было кнопки "full step", а частоту можно было менять переменным резистором для кнопок forward/reverse. И какой участок кода отвечает за частоту вращения? Очень уж медленно двигатель вращается. За ранее спасибо за ответ.

Вот исходный код на ассемблере:
;*******************************
;Stepper.asm
;drives a Stepper motor forward and reverse
;13-11-2010
;*******************************


list p=12F629
radix dec
include "p12f629.inc"

errorlevel -302 ; Don't complain about BANK 1 registers

__CONFIG _MCLRE_OFF & _CP_OFF
& _WDT_OFF & _INTRC_OSC_NOCLKOUT ;Internal osc.

;_MCLRE_OFF - master clear must be off for gp3 as input pin

;******************************
; variables - names and files
;*****************************

temp1 equ 20h ;
temp2 equ 21h ;

Sw_Flag equ 25h ;switch flag for "inching"
loops equ 26h ;loops for full stepping
count equ 27h ;loops of discharge time for 100n
PotValue equ 28h ;value of pot
look equ 29h ;look for pot value every 100 loops


;***************************
;Equates
;***************************
status equ 0x03
rp1 equ 0x06
rp0 equ 0x05
GPIO equ 0x05


status equ 03h
option_reg equ 81h


; bits on GPIO

pin7 equ 0 ;GP0 100k speed pot
pin6 equ 1 ;GP1 output1 to stepper motor
pin5 equ 2 ;GP2 output2 to stepper motor
pin4 equ 3 ;GP3 Input from buttons
pin3 equ 4 ;GP4 output3 to stepper motor
pin2 equ 5 ;GP5 output4 to stepper motor


;bits

rp0 equ 5 ;bit 5 of the status register

;**********************
;Beginning of program
;**********************
org 0x00
nop
nop
nop
nop
nop
SetUp bsf status, rp0 ;Bank 1
movlw b'11001000' ;Set TRIS GP1,2,4,5 out GP3 input
movwf TRISIO
bcf status, rp0 ;bank 0
movlw 07h ;turn off Comparator ports
movwf CMCON ;must be placed in bank 0
clrf GPIO ;Clear GPIO of junk
clrf Sw_Flag
incf Sw_Flag,1 ;put a bit onto Sw_Flag
goto Main



;****************
;delays *
;****************

_uS movlw 08Ch
movwf temp1
decfsz temp1,f
goto $-1
retlw 00


;delay for pulsing servo anticlockwise

acw
movlw 60h
movwf temp1
decfsz temp1,f
goto $-1
retlw 00


_1mS nop
decfsz temp1,f
goto _1mS
retlw 00

_5mS movlw .5
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00




_10mS movlw 0Ah
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00

_15mS movlw .15
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00


_18mS movlw .18
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00

_50mS movlw .50
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00




_100mS movlw .100
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00


_200mS movlw .200
movwf temp2
nop
decfsz temp1,f
goto $-2
decfsz temp2,f
goto $-4
retlw 00



;delay to create value for pot for speed

PotDel movlw 040h ;40h produces 12 loops
movwf temp1
decfsz temp1,f
goto $-1
retlw 00


;***************************
; Sub Routines *
;***************************


;position of pot creates a value in PotValue

Pot bsf status,rp0
bcf trisio,0 ;Make GP0 output
bcf status,rp0
bcf gpio,0 ;make GP0 LOW
call _1mS ;create delay to discharge 100n
bsf status,rp0
bsf trisio,0 ;Make GP0 input
bcf status,rp0
clrf PotValue
call PotDel
incf PotValue,f
btfss gpio,0 ;is input HIGH?
goto $-3
retlw 00 ;returns with a value in PotValue





;******************
;* Main *
;******************

Main clrf gpio
bcf gpio,5 ;gpio,5 high for a short time
call _1mS
bsf gpio,5
nop
btfss gpio,3
goto $+2
goto $+6 ;go to half step Forward
clrf gpio
bsf gpio,1
btfss gpio,3
goto Reverse ;go to half step Reverse
goto _FS ;go to Full Step - for forward or reverse

btfsc Sw_Flag,0
goto _1HSF_
btfsc Sw_Flag,1
goto _2HSF_
btfsc Sw_Flag,2
goto _3HSF_
btfsc Sw_Flag,3
goto _4HSF_
btfsc Sw_Flag,4
goto _5HSF_
btfsc Sw_Flag,5
goto _6HSF_
btfsc Sw_Flag,6
goto _7HSF_
goto _8HSF_

_1HSF_ movlw b'00100000' ;1
goto _C
_2HSF_ movlw b'00110000' ;2
goto _C
_3HSF_ movlw b'00010000' ;3
goto _C
_4HSF_ movlw b'00010100' ;4
goto _C
_5HSF_ movlw b'00000100' ;5
goto _C
_6HSF_ movlw b'00000110' ;6
goto _C
_7HSF_ movlw b'00000010' ;7
goto _C
_8HSF_ movlw b'00100010' ;8
movwf gpio
call _200mS
clrf gpio
call _200mS
call _200mS
clrf Sw_Flag
incf Sw_Flag,1
bsf gpio,5
nop
btfsc gpio,3 ;see if sw is still pressed for full speed
goto HS_Fwd
bcf gpio,5
goto Main


_C movwf gpio
call _200mS
clrf gpio
call _200mS
call _200mS
bcf status,0 ;clear the carry
rlf Sw_Flag,1
bsf gpio,5
nop
btfsc gpio,3 ;see if sw is still pressed for full speed
goto HS_Fwd
bcf gpio,5
goto Main




;reverse - half step


Reverse
clrf gpio
bcf gpio,4 ;gpio,4 high for a short time
call _1mS
bsf gpio,4
nop
btfss gpio,3
goto Main

btfsc Sw_Flag,0
goto _1HSR_
btfsc Sw_Flag,1
goto _2HSR_
btfsc Sw_Flag,2
goto _3HSR_
btfsc Sw_Flag,3
goto _4HSR_
btfsc Sw_Flag,4
goto _5HSR_
btfsc Sw_Flag,5
goto _6HSR_
btfsc Sw_Flag,6
goto _7HSR_
goto _8HSR_

_1HSR_ movlw b'00100000' ;1
movwf gpio
call _200mS
clrf gpio
call _200mS
call _200mS
Movlw 80h
movwf Sw_Flag
bsf gpio,4
nop
btfsc gpio,3 ;see if sw is still pressed for full speed
goto HS_Rev
bcf gpio,4
goto Main

_2HSR_ movlw b'00110000' ;2
goto _D
_3HSR_ movlw b'00010000' ;3
goto _D
_4HSR_ movlw b'00010100' ;4
goto _D
_5HSR_ movlw b'00000100' ;5
goto _D
_6HSR_ movlw b'00000110' ;6
goto _D
_7HSR_ movlw b'00000010' ;7
goto _D
_8HSR_ movlw b'00100010' ;8
goto _D


_D movwf gpio
call _200mS
clrf gpio
call _200mS
call _200mS
bcf status,0 ;clear the carry
rrf Sw_Flag,1
bsf gpio,4
nop
btfsc gpio,3 ;see if sw is still pressed for full speed
goto HS_Rev
bcf gpio,4
goto Main



;half step forward


HS_Fwd
clrf gpio
bcf gpio,5 ;gpio,5 high for a short time
call _1mS
bsf gpio,5
nop
btfss gpio,3
goto Main

btfsc Sw_Flag,0
goto _1HSF
btfsc Sw_Flag,1
goto _2HSF
btfsc Sw_Flag,2
goto _3HSF
btfsc Sw_Flag,3
goto _4HSF
btfsc Sw_Flag,4
goto _5HSF
btfsc Sw_Flag,5
goto _6HSF
btfsc Sw_Flag,6
goto _7HSF
goto _8HSF

_1HSF movlw b'00100000' ;1
goto _CC
_2HSF movlw b'00110000' ;2
goto _CC
_3HSF movlw b'00010000' ;3
goto _CC
_4HSF movlw b'00010100' ;4
goto _CC
_5HSF movlw b'00000100' ;5
goto _CC
_6HSF movlw b'00000110' ;6
goto _CC
_7HSF movlw b'00000010' ;7
goto _CC
_8HSF movlw b'00100010' ;8
movwf gpio
call _5mS
clrf gpio
clrf Sw_Flag
incf Sw_Flag,1
goto HS_Fwd


_CC movwf gpio
call _5mS
clrf gpio
bcf status,0 ;clear the carry
rlf Sw_Flag,1
goto HS_Fwd


;half step reverse

HS_Rev
clrf gpio
bcf gpio,4 ;gpio,4 high for a short time
call _1mS
bsf gpio,4
nop
btfss gpio,3
goto Main

btfsc Sw_Flag,0
goto _1HSR
btfsc Sw_Flag,1
goto _2HSR
btfsc Sw_Flag,2
goto _3HSR
btfsc Sw_Flag,3
goto _4HSR
btfsc Sw_Flag,4
goto _5HSR
btfsc Sw_Flag,5
goto _6HSR
btfsc Sw_Flag,6
goto _7HSR
goto _8HSR

_1HSR movlw b'00100000' ;1
movwf gpio
call _10mS
clrf gpio
Movlw 80h
movwf Sw_Flag
goto HS_Rev
_2HSR movlw b'00110000' ;2
goto _G
_3HSR movlw b'00010000' ;3
goto _G
_4HSR movlw b'00010100' ;4
goto _G
_5HSR movlw b'00000100' ;5
goto _G
_6HSR movlw b'00000110' ;6
goto _G
_7HSR movlw b'00000010' ;7
goto _G
_8HSR movlw b'00100010' ;8
goto _G


_G movwf gpio
call _10mS
clrf gpio
bcf status,0 ;clear the carry
rrf Sw_Flag,1
goto HS_Rev



;decide on full step forward or reverse


_FS clrf gpio
bsf gpio,5
btfss gpio,3
goto $+2
goto FS_Fwd
bsf gpio,4
btfss gpio,3
goto $+2
goto FS_Rev
clrf gpio
call _1mS
goto $-10


;Full Step Forward

FS_Fwd call pot ;returns with value in PotValue
movlw .50
movwf look ;look at pot every 50 loops
movlw b'00000010' ;full step forward
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00000100'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00010000'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00100000'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
decfsz look,1
goto FS_Fwd+3 ;don't look at pot
goto FS_Fwd ;look at pot



;Full Step Reverse

FS_Rev call pot ;returns with value in PotValue
movlw .50
movwf look ;look at pot every 50 loops
movlw b'00100000' ;full step reverse
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00010000'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00000100'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
movlw b'00000010'
movwf gpio
movf PotValue,w
movwf loops
call _1mS
decfsz loops,1
goto $-2
decfsz look,1
goto FS_Rev+3 ;don't look at pot
goto FS_Rev ;look at pot

END

Спасибо: 0 
ПрофильЦитата Ответить
Новых ответов нет


Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия