Bueno muchachos mi problema es basicamente el siguiente:
Estoy haciendo una banda transportadora con un motor Bipolar(conectado a un L293D y al micro) la cual debe girar tanto para izquierda como para derecha, yo pense en usar interrupciones osea que al momento de pulsar un pulsador (valga la redundancia) gira para la derecha y si pulso el otro gira a la izquierda(El motor gira mientras el pulsador este presionado)
Mi problema es que al momento de accionar el pulsador, el motor solo alcanza a dar 1 paso ya sea a la derecha o a la izquiera, mejor dicho no hace el giro completo. Quiero saber si hay una funcion la cual me garantize que un bucle se cumple siempre y cuando el pulsador este presionado u otra solucion que me permita que el motor gire. (intente generando retardos despues del llamado de la funcion duque() y nada
)
Gracias de antemano
Estoy haciendo una banda transportadora con un motor Bipolar(conectado a un L293D y al micro) la cual debe girar tanto para izquierda como para derecha, yo pense en usar interrupciones osea que al momento de pulsar un pulsador (valga la redundancia) gira para la derecha y si pulso el otro gira a la izquierda(El motor gira mientras el pulsador este presionado)
Mi problema es que al momento de accionar el pulsador, el motor solo alcanza a dar 1 paso ya sea a la derecha o a la izquiera, mejor dicho no hace el giro completo. Quiero saber si hay una funcion la cual me garantize que un bucle se cumple siempre y cuando el pulsador este presionado u otra solucion que me permita que el motor gire. (intente generando retardos despues del llamado de la funcion duque() y nada
HTML:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
void duque(void); //Funcion para girar DERECHA
void duque1(void); //Funcion para girar IZQUIERDA
int main(void)
{
DDRC=0xFF;
MCUCR=(1<<ISC01)|(1<<ISC00)|(1<<ISC11)|(1<<ISC10); //Flanco de subida para INT0 e INT1
GICR=(1<<INT0)|(1<<INT1); //Habilito las interrupciones
sei();
while(1);
}
ISR(INT0_vect)
{
duque(); //Llamo a la funcion de girar a la derecha
GIFR=(1<<INTF0);
}
ISR(INT1_vect)
{
duque1(); //Llamo a la funcion de girar a la izq
GIFR=(1<<INTF1);
}
void duque(void) // Girar derecha
{
PORTC=0b00001011;
_delay_ms(5);
PORTC=0b00010011;
_delay_ms(5);
PORTC=0b00010101;
_delay_ms(5);
PORTC=0b00001101;;
_delay_ms(5);
}
void duque1(void) //Girar izquierda
{
PORTC=0b00001011;
_delay_ms(5);
PORTC=0b00001101;
_delay_ms(5);
PORTC=0b00010101;
_delay_ms(5);
PORTC=0b00010011;
_delay_ms(5);
}
Gracias de antemano