22.06.2007, 20:55
|
|
Временная регистрация
Регистрация: 03.03.2005
Сообщений: 52
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Шаговый на PIC16F84A-нужна помощь
Кто может,подправте пожалуйта программку.
Все как бы работает нормально но еть одно но...
При нажатии кнопки "Стоп" на некоторых выходах PIC-а
остаются логические 1-цы(при каждом выключениии по разному)а нужны нули.Сам я не силен-надеюсь на вашу помощь.
Код:
|
;************************************************* *******
;
; Stepper Motor controller
;
; Author : Seiichi Inoue
;************************************************* *******
list p=pic16f84a
include p16f84a.inc
__config _hs_osc & _wdt_off & _pwrte_on & _cp_off
errorlevel -302 ;Eliminate bank warning
;**************** Label Definition ********************
cblock h'0c'
mode ;Operation mode
;0=stop 1=right 2=left
count1 ;Wait counter
count2 ;Wait counter(for 1msec)
endc
rb0 equ 0 ;RB0 of PORTB
rb1 equ 1 ;RB1 of PORTB
rb2 equ 2 ;RB2 of PORTB
rb5 equ 5 ;RB5 of PORTB
rb7 equ 7 ;RB7 of PORTB
;**************** Program Start ***********************
org 0 ;Reset Vector
goto init
org 4 ;Interrupt Vector
clrf intcon ;Clear Interruption reg
;**************** Initial Process *********************
init
bsf status,rp0 ;Change to Bank1
clrf trisa ;Set PORTA all OUT
movlw b'00100111' ;RB0,1,2.5=IN RB7=OUT
movwf trisb ;Set PORTB
movlw b'10000000' ;RBPU=1 Pull up not use
movwf option_reg ;Set OPTION_REG
bcf status,rp0 ;Change to Bank0
clrf mode ;Set mode = stop
clrf count1 ;Clear counter
clrf count2 ;Clear counter
movlw b'00000101' ;Set PORTA initial value
movwf porta ;Write PORTA
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
start
;************* Check switch condition *****************
btfsc portb,rb1 ;RB1(stop key) = ON ?
goto check1 ;No. Next
clrf mode ;Yes. Set stop mode
goto drive ;No. Jump to motor drive
check1
btfsc portb,rb2 ;RB2(right key) = ON ?
goto check2 ;No. Next
movlw d'1' ;Yes. Set right mode
movwf mode ;Save mode
goto drive ;No. Jump to motor drive
check2
btfsc portb,rb0 ;RB0(left key) = ON ?
goto drive ;No. Jump to motor drive
movlw d'2' ;Yes. Set left mode
movwf mode ;Save mode
;******************** Motor drive *********************
drive
movf mode,w ;Read mode
bz start ;mode = stop
bsf portb,rb7 ;Set RB7 = 1
btfsc portb,rb5 ;RB5 = 0 ?
goto $-1 ;No. Wait
movlw d'5' ;Set loop count(5msec)
movwf count1 ;Save loop count
loop call timer ;Wait 1msec
decfsz count1,f ;count - 1 = 0 ?
goto loop ;No. Continue
bcf portb,rb7 ;Set RB7 = 0
btfss portb,rb5 ;RB5 = 1 ?
goto $-1 ;No. Wait
movf porta,w ;Read PORTA
sublw b'000000101' ;Check motor position
bnz drive2 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive1 ;Yes. Right
movlw b'00001001' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive1
movlw b'00000110' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive2
movf porta,w ;Read PORTA
sublw b'000000110' ;Check motor position
bnz drive4 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive3 ;Yes. Right
movlw b'00000101' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive3
movlw b'00001010' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive4
movf porta,w ;Read PORTA
sublw b'000001010' ;Check motor position
bnz drive6 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive5 ;Yes. Right
movlw b'00000110' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive5
movlw b'00001001' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive6
movf porta,w ;Read PORTA
sublw b'000001001' ;Check motor position
bnz drive8 ;Unmatch
movf mode,w ;Read mode
sublw d'1' ;Right ?
bz drive7 ;Yes. Right
movlw b'00001010' ;No. Set Left data
goto drive_end ;Jump to PORTA write
drive7
movlw b'00000101' ;Set Right data
goto drive_end ;Jump to PORTA write
;-------
drive8
movlw b'00000101' ;Compulsion setting
drive_end
movwf porta ;Write PORTA
goto start ;Jump to start
;************* 1msec Timer Subroutine *****************
timer
movlw d'200' ;Set loop count
movwf count2 ;Save loop count
tmlp nop ;Time adjust
nop ;Time adjust
decfsz count2,f ;count - 1 = 0 ?
goto tmlp ;No. Continue
return ;Yes. Count end
;************************************************* *******
; END of Stepper Motor controller
;************************************************* *******
end |
‹center›
-- Прилагается рисунок: --
‹IFRAME src = "nuke/users_images/22062007/5371739.gif" frameborder="0" name="fr1414819" scrolling="yes" width="470" height="491" align="bottom"›[img]nuke/users_images/22062007/5371739.gif[/img]
‹font color=red›Рисунок не умещается на странице и поэтому сжат!‹/font›
Для того, чтобы просмотреть его полностью, щелкните здесь.
‹/IFRAME›
‹/center›
|
|
|
|
23.06.2007, 13:27
|
|
Гражданин KAZUS.RU
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Программу не смотрел,но что вам мешает после нажатия на стоп принудительно обнулить все,что вам нужно.
|
|
|
|
23.06.2007, 15:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
после трис обнулите порты
Прикрепленный файл: 2171257.rar
|
|
|
|
23.06.2007, 21:00
|
|
Прохожий
Регистрация: 23.06.2007
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Купите нормальный готовый драйвер - www.purelogic.ru.
Вам подойдет PLM004.
|
|
|
|
23.06.2007, 23:55
|
|
Временная регистрация
Регистрация: 03.03.2005
Сообщений: 52
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
после трис обнулите порты
|
urry, я в программировании полный ноль,максимум что могу так это прокомпилировать и прошить.
Твой хекс зашил но PIC не заработал 
При загрузке хекса в программу программатора заметил что тип генератора установился RC, а нужен HS.
Тут такое дело,порты должны обнулиться даже при первом включении и если можешь убери еще кнопку "Стоп"
В моем назначении она совсем не нужна.
Для bomjbomj: в данной схеме я применяю драйвер FT5764M.Двигатель и драйвер взял от принтера.
----
Александр.
Прикрепленный файл: 2171257.rar
|
|
|
|
24.06.2007, 00:51
|
|
Гражданин KAZUS.RU
Регистрация: 17.09.2006
Сообщений: 633
Сказал спасибо: 78
Сказали Спасибо 69 раз(а) в 57 сообщении(ях)
|
Я тоже этим когда то страдал.
|
|
|
|
24.06.2007, 11:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Простите, плиз, напутал с конфигом. Пробуйте
Прикрепленный файл: 2146037.rar
|
|
|
|
24.06.2007, 12:02
|
|
Почётный гражданин KAZUS.RU
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
|
Не могу удалить свой предыдущий пост.
Прикрепленный файл: 6070788.rar
|
|
|
|
24.06.2007, 12:03
|
|
Временная регистрация
Регистрация: 03.03.2005
Сообщений: 52
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Не хочет вообще управляться.Пробовал обнулить перед
трис-управляется но от проблемы не избавился.
Я паралельно открыл тему на микрочип, можешь заглянуть: http://www.microchip.su/showthread.php?p=7386#post7386
|
|
|
|
24.06.2007, 12:14
|
|
Временная регистрация
Регистрация: 03.03.2005
Сообщений: 52
Сказал спасибо: 9
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от urry
|
Не могу удалить свой предыдущий пост.
|
Вот это я не пробовал-щас обкатаем-момент...
Прикрепленный файл: 6070788.rar
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:29.
|
|