Hola Algec, el programa lo realicé en Mikrobasic trabajando el SLA7024 a paso completo en 2 fases segun la hoja de datos.
Aquí el código:
program Step_ckCNC
' *Mikrobasic,Diciembre 2009
' * Descripcion:
' * Este codigo se emplea para controlar a través de un PIC la secuencia de
' avance de un stepper unipolar a paso completo empleando el CI SLA7024. Este
' CI requiere secuencia especial para poder entregar el código unipolar del
' stepper. Para generar el cambio de la secuencia del motor el PIC recibe un
' pulso de entrada en RA0 y otra señal para la dirección a través de RA1.
' Esta aplicación puede ser empleada en una controladora CNC.
' * Configuración:
' MCU: PIC16F84A
' Oscilador: XT, 4.000 MHz
' SW: MikroBasic v7.2
'Entradas en parte baja del PortA
symbol CK = porta.0 'Habilita el funcionamiento del motor
symbol Sentido = porta.1 'Selecciona el sentido de giro de motor
'"Paso" almacena numero de secuencia de 0 a 3, "pos" almacena valor correspondiente
'a esa secuencia, 'Secuencia contiene los 4 valores correspondientes al avance
dim paso,pos as byte 'Secuencia especial para ser
const Secuencia as byte[4]=($0A, $06, $05, $09) 'aplicada al SLA7024 a través de
'parte baja del PORTB
'------------Subrutina de avance---------------------
sub procedure avanza 'Avance en sentido horario del motor
if paso >= 3 then 'Paso1 alcanzo el ultimo estado?
paso=0 'Si, paso1 reeinicia cuenta
else 'Si paso1 no alcanzo último estado entonces se incrementa
inc(paso)
end if
pos=Secuencia[paso] 'La variable pos guarda valor de secuencia
end sub
'------------Subrutina de retroceso------------------
sub procedure retrocede 'Avanza motor en sentido antihorario
pos=Secuencia[paso] 'Variable pos guarda valor que asumira nueva secuencia
if paso<=0 then 'Paso actual es el inicial?
paso=3 'Si cumple, entonces como estamos en cuenta
else 'descendente el siguiente paso sera 3
dec(paso) 'si no es el paso inicial seguimos descontando
end if
end sub
'Programa principal
main:
'ADCON1 = 7 'Puerto A digital para series 16F87XX
TRISA = $FF 'Configura Puerto A como entrada
PORTA = 0 'Establece valor inicial del puerto en 0
TRISB = %11111111 'Configura PORTB como salida
paso = 0 'Variables a cero
pos = 0
'Ciclo infinito
while true
if CK=1 then 'Si CK=1
while CK=1 'Hasta que desaparezca CK avanzará el programa
wend
if Sentido=1 then 'Sentido de avance es 1, entonces
avanza 'Brinca a subrutina "avanza"
portb=pos
else
retrocede 'es cero, brinca a subrutina "retrocede"
portb=pos
end if
end if
wend
end.