Codigo fuente Turbo Pascal, Accionar un motor Stepper por el puerto paralelo

Codigo fuente Turbo Pascal, Accionar un motor Stepper por el puerto paralelo

El programa puede mover o accionar los motores Stepper por el puerto paralelo, aqui se los dejo, queda a criterio de ustedes si lo usan adecuadamente, porque si lo hacen mal o no saben la dirección del BIOS de su puerto Paralelo, pueden hacer estragos

a-small-stepper-motor.jpg



Código:
program steppermotor; 

uses crt; 

const portAddr=$3BC; 
motors=2; 

var counter, a: integer; 

procedure Low; 
{Load one LOW bit in shift register} 
begin 
port[portAddr]:=$4; { [0100]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure High; 
{Load one HIGH bit in shift register} 
begin 
port[portAddr]:=$2; { [0010]b } 
port[portAddr]:=$6; { [0110]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure Strobe; 
{Create STROBE signal for shift registers 
to latch contents of shift reg. to output} 
begin 
port[portAddr]:=$1; { [0001]b } 
port[portAddr]:=$0; { [0000]b } 
end; 

procedure Init; 
{Makes all outputs of shift register(s) LOW} 
begin 
port[portAddr]:=$0; { [0000]b } 
for counter := 1 to (8*motors) do Low; 
Strobe; 
end; 

procedure Step 1; 
{Load pattern for Step 1 [1000 1000]b } 
begin 
High; Low; Low; Low; High; Low; Low; Low; 
end; 

procedure Step 2; 
{Load pattern for Step 2 [0010 1000]b } 
begin 
Low; Low; High; Low; High; Low; Low; Low; 
end; 

procedure Step 3; 
{Load pattern for Step 3 [0100 1000]b } 
begin 
Low; High; Low; Low; High; Low; Low; Low; 
end; 

procedure Step 4; 
{Load pattern for Step 4 [0001 1000]b } 
begin 
Low; Low; Low; High; High; Low; Low; Low; 
end; 

procedure Step 2Res; 
{Load pattern for Step 2 with R3 in series 
[0010 0000]b } 
begin 
Low; Low; High; Low; Low; Low; Low; Low; 
end; 

procedure Step 4Res; 
{Load pattern for Step 4 with R3 in series 
[0001 0000]b } 
begin 
Low; Low; Low; High; Low; Low; Low; Low; 
end; 

begin 
{User defined} 
ClrScr; 
Init; 
for a:= 1 to 50 do 
begin 
{Example causes one (slow) turn of both 
motors in opposite direction. 
mot_2; mot_1; strobe 1+2; Delay 
--+------+-------+------+----- 
| | | | 
V V V V } 
Step 1; Step 4; Strobe; delay(10); 
Step 2; Step 3; Strobe; delay(10); 
Step 3; Step 2; Strobe; delay(10); 
Step 4; Step 1; Strobe; delay(10); 
end; 
delay(1000); 
for a:= 1 to 50 do 
begin 
{Example causes one (fast) turn 
of both motors in opposite direction. 
mot_2; mot_1; strobe 1+2; Delay 
--+------+-------+------+----- 
| | | | 
V V V V } 
Step 4; Step 1; Strobe; delay(5); 
Step 3; Step 2; Strobe; delay(5); 
Step 2; Step 3; Strobe; delay(5); 
Step 1; Step 4; Strobe; delay(5); 
end; 
Step 2Res;Step 2Res; 
Step 4Res;Step 4Res; 
Strobe; 
end.


Espero les funcione con aquellos motores Stepper que andan por ahi en impresoras viejas
 
const portAddr=$3BC;
Esa dirección del puerto paralelo es la que se usaba en la época de las placas de video Hércules :eek: y que venían con un LPT. En la actualidad no va a funcionar en ninguna PC, a menos que sea posible configurar el BIOS para que mapee esta dirección I/O a una puerta paralelo on-board (si es que aún se fabrican PC con puerto paralelo :confused: :confused:).
Hay que cambiar esta dirección por la 378 (o la 278) que es la que se utiliza(ba) actualmente...

PD: Claro que tampoco funciona en bajo güindos a menos que se utilice algún driver del kernel o aplicación que le dé acceso al programa en forma directa a los puertos.
 
Atrás
Arriba