TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Hansot en 31 de Agosto de 2014, 14:18:24
-
Soy nueva en esto así que discúlpenme xD necesito controlar la velocidad y sentido de giro de un motor a pasos, ya tengo el código y lo simule y parece estar bien pero mi duda es si hay alguna manera mas simple de hacerlo y como colocaría un botón de paro
Gracias!
(http://i.gyazo.com/e4a672f2b8db6477dd8953534fc2de56.png)
#include <16F84A.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#byte PORTA=5
#byte PORTB=6
void main()
{
set_tris_A(0xff);
set_tris_B(0b00);
portb=0b00;
int i;
i=0;
do{
do {
}
while (!bit_test(PORTA,0));
do {
do {
(bit_set(PORTB,0));
(bit_set(PORTB,1));
delay_ms (40);
(bit_clear(PORTB,0));
(bit_clear(PORTB,1));
delay_ms (40);
(bit_set(PORTB,1));
(bit_set(PORTB,2));
delay_ms (40);
(bit_clear(PORTB,1));
(bit_clear(PORTB,2));
delay_ms (40);
(bit_set(PORTB,2));
(bit_set(PORTB,3));
delay_ms (40);
(bit_clear(PORTB,2));
(bit_clear(PORTB,3));
delay_ms (40);
(bit_set(PORTB,3));
(bit_set(PORTB,0));
delay_ms (40);
(bit_clear(PORTB,0));
(bit_clear(PORTB,3));
delay_ms (40);
}
while (bit_test(PORTA,1));
do{
(bit_set(PORTB,0));
(bit_set(PORTB,1));
delay_ms (150);
(bit_clear(PORTB,0));
(bit_clear(PORTB,1));
delay_ms (150);
(bit_set(PORTB,1));
(bit_set(PORTB,2));
delay_ms (150);
(bit_clear(PORTB,1));
(bit_clear(PORTB,2));
delay_ms (150);
(bit_set(PORTB,2));
(bit_set(PORTB,3));
delay_ms (150);
(bit_clear(PORTB,2));
(bit_clear(PORTB,3));
delay_ms (150);
(bit_set(PORTB,3));
(bit_set(PORTB,0));
delay_ms (150);
(bit_clear(PORTB,0));
(bit_clear(PORTB,3));
delay_ms (150);
}
while (bit_test(PORTA,2));
delay_ms (7000);
do{
(bit_set(PORTB,0));
(bit_set(PORTB,3));
delay_ms (40);
(bit_clear(PORTB,0));
(bit_clear(PORTB,3));
delay_ms (40);
(bit_set(PORTB,3));
(bit_set(PORTB,2));
delay_ms (40);
(bit_clear(PORTB,3));
(bit_clear(PORTB,2));
delay_ms (40);
(bit_set(PORTB,2));
(bit_set(PORTB,1));
delay_ms (40);
(bit_clear(PORTB,2));
(bit_clear(PORTB,1));
delay_ms (40);
(bit_set(PORTB,1));
(bit_set(PORTB,0));
delay_ms (40);
(bit_clear(PORTB,1));
(bit_clear(PORTB,3));
delay_ms (40);
}
while (bit_test(PORTA,3));
delay_ms(3000);
i=i+1;
}
while(i<=5);
}
while (true);
}
:g) :g)
-
Para controlar la velocidad deberías modificar el valor del retardo (delay_ms (150)).
Un botón de paro, lo pondría en alguno de esos pulsadores de tal manera que cuando suceda dicho evento, inmediatamente ponga a 0L los terminales del ULN2003, y salga del lazo principal.