Denas писал(а):Ну или тем же способом найти на драйвере двигателя пин на котором наглядно меняется потенциал при старте двиги и завигачить на МК управление оптопарой )
Если есть даташит на драйвер то задача упрощается )
Denas писал(а):Проще подпоятся к одной ноге, чем городить кучу развязки. Это же шаговый двигатель, на его обмотки подаются импульсы. Как по Вашему можно гарантированно детектировать меандр?
Не понял что есть "прерывание по пину". Если имеется в виду ТТЛ уровень, то опять таки к нему нужно привести входной сигнал, что в случае с меандром амплитудой в 24(или сколько там...неважно, пусть будет 24 для примера) вольта неизбежно приведет к усложнению схемы. Куда проще припаять один длинный провод, три пермыки да подрезать дорожку. Да и нет никакой разницы между работой входа по TTL или ADC, ADC более гибкий разве что, это и позволяет исключить лишнее усложнение схемы.
.include "tn13def.inc" ; Attiny13
//Определение переменных (директива .def)
.def temp =R16
.def Res =R20
.CSEG
;--------ТАБЛИЦА ВЕКТОРОВ ПРЕРЫВАНИЯ -----------------------|
.org $00;
rjmp RESET ;Reset
.ORG $01 ; External Interrupt 0
RETI
.ORG $02 ; External Interrupt Request 0
rjmp PCINT_0
.ORG $03 ; Timer/Counter0 Overflow
RETI
.ORG $04 ; EEPROM Ready
RETI
.ORG $05 ; Analog Comparator
RETI
.ORG $06 ; Timer/Counter Compare Match A
RETI
.ORG $07 ; Timer/Counter Compare Match B
RETI
.ORG $08 ; Watchdog Time-out
RETI
.ORG $09 ; ADC Conversion Complete
RETI
;-----------------------------------------------------------|
;-------------------ПРЕРЫВАНИЯ------------------------------|
PCINT_0:
cli
clr temp
OUT GIMSK, temp
OUT PCMSK, temp
OUT MCUCR, temp
LDI Res, 0x55
RETI;-------------------------------------------------------|
// Работа с портом PB4. здесь описан вся последовательность управляющего сигнала от МК
; ниже нужно указать последовательность задержек
;------ИНИЦИАЛИЗАЦИЯ ПОРТОВ, СТЕКА, и т.п---------------|
RESET: ; |
//Настройка портов ввода/вывода
//DDRx - направление работы линии порта x (1-выход, 0-вход)
//PORTx - Значение уровня на линии порта x (1-высокий, 0-низкий)
// если порт x настроен как вход (1-PullUp)
//PINx - Уровень сигнала на линии порта x (Только для чтения)
ldi temp, RAMEND
out SPL, temp
ldi temp, 0x80
out ACSR, temp
sbi PortB, 3 ; сигнал Start
sbi DDRB, 4 ; выходной сигнал
sbi PortB, 4;
clr Res
;-------------------------------------------------------|
;rcall Loop_5sec; задержка при старте.
rcall Loop_2sec
; Настройка прерывания
IN temp, GIMSK
ldi temp, (1<<PCIE)
OUT GIMSK, temp
IN temp, PCMSK
ldi temp, (1<<PCINT3)
OUT PCMSK, temp
IN temp, MCUCR
ldi temp, (0<<ISC00)|(0<<ISC01)
OUT MCUCR, temp
//Разрешаем прерывания
sei
MAIN:
cpi Res, 0x55
brsh Port_B4
//Ожидаем прерывание
RJMP MAIN
Port_B4:
rcall Loop_2sec
cbi PortB, 4;0
rcall Loop_0_2sec
sbi PortB, 4;1
rcall Loop_1sec
cbi PortB, 4;0
rcall Loop_0_2sec
sbi PortB, 4;1
ezhik:
rjmp ezhik
//------------Зедержки-----------------
;Расчитаны программой AVRloop более чем достаточно,
; ибо МК больше нихрена все равно не делает в эти моменты
Loop_2sec:
; =============================
; delay loop generator
; 9600000 cycles:
; -----------------------------
; delaying 9599985 cycles:
ldi R17, $33
WGLOOP0: ldi R18, $F8
WGLOOP1: ldi R19, $FC
WGLOOP2: dec R19
brne WGLOOP2
dec R18
brne WGLOOP1
dec R17
brne WGLOOP0
; -----------------------------
; delaying 15 cycles:
ldi R17, $05
WGLOOP3: dec R17
brne WGLOOP3
; =============================
reti
Loop_1sec:
; =============================
; delay loop generator
; 4800000 cycles:
; -----------------------------
; delaying 4799751 cycles:
ldi R17, $25
WGLOOP01: ldi R18, $B8
WGLOOP11: ldi R19, $EA
WGLOOP21: dec R19
brne WGLOOP21
dec R18
brne WGLOOP11
dec R17
brne WGLOOP01
; -----------------------------
; delaying 249 cycles:
ldi R17, $53
WGLOOP31: dec R17
brne WGLOOP31
; =============================
reti
Loop_0_2sec:
; =============================
; delay loop generator
; 960000 cycles:
; -----------------------------
; delaying 959928 cycles:
ldi R17, $08
WGLOOP02: ldi R18, $C6
WGLOOP12: ldi R19, $C9
WGLOOP22: dec R19
brne WGLOOP22
dec R18
brne WGLOOP12
dec R17
brne WGLOOP02
; -----------------------------
; delaying 72 cycles:
ldi R17, $18
WGLOOP32: dec R17
brne WGLOOP32
; =============================
reti
Loop_5sec:
; =============================
; delay loop generator
; 24000000 cycles:
; -----------------------------
; delaying 23999952 cycles:
ldi R17, $7C
WGLOOP03: ldi R18, $FD
WGLOOP13: ldi R19, $FE
WGLOOP23: dec R19
brne WGLOOP23
dec R18
brne WGLOOP13
dec R17
brne WGLOOP03
; -----------------------------
; delaying 48 cycles:
ldi R17, $10
WGLOOP33: dec R17
brne WGLOOP33
; =============================
reti
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6