Compañeros, Picmanianos, mis estimados ratones de programación... vengo por aca con mis dudas, sugerencias y flores para todos los usuarios del foro.
Actualmente me encuentro desarrollando un programita para lo que posiblemente puede ser en el futuro un brazo robotico, esperemos que si, pondré aca el código que he implementado y explicaré mis dudas, espero que os entiendan.
Pienso controlar mi brazo robótico a través de motores paso a paso, en este momento, he hecho el control de un solo motor, a través de 2 pulsadores, que cuando lo mantengo pulsado, el motor gira para un lado y cuando lo suelto, se queda en el paso en el cual se encuentra en ese instante, y si pulso el otro pulsador, pasa exacatamente lo mismo, salvo que gira en el otro sentido; sin embargo, he tenido problema con el manejo del retardo, pues, en mucha parte influye esto, pues, o no alcanza a energizar bien la bobina, o salta a otro paso, espero que me puedan ayudar a mejorar mi programa, para ver como puedo implementarlo de una mejor forma.
Para la salida del pic al motor, tengo un arreglo de transistores DARLINGTON, en un encapsulado, el ULN2803, por ahora no tengo ningún montaje hecho, solo lo he simulado en proteus., y mi código lo estoy haciendo en CCS C.
También he visto que lo puedo hacer a través de Servo motores, o motores paso a paso pero controlados por PWM, sin embargo, considero un poco mas complicado esta parte.
Así mis estimados, os dejo mi código aca abajo, y el circuto hecho en PROTEUS. Acepto sugerencias y reclamos, ah y muchisimas gracias a todos y muchos Exitos con sus proyectos y circuitos.
#include <16F877.h>
#use delay(clock=1000000)
#fuses NOWDT,NOPROTECT,NOLVP,NODEBUG,PUT
int retardo;
void main()
{ retardo=300; //CON ESTE VALOR SE CAMBIA LA VELOCIDAD DE GIRO DEL MOTOR
WHILE(input(PIN_C0)) // INICIALIZO LOS PINES EN VALOR BAJO, PARA QUE EL MOTOR NO SE MUEVA
{
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_LOW(PIN_B3);
}
do{
if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_HIGH(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_HIGH(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_HIGH(PIN_B3);
delay_ms(retardo); }if(!input(pin_C0)&&(input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 1)
{
OUTPUT_HIGH(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1)))// GIRO EN UN SENTIDO (GIRO 2)
{
OUTPUT_HIGH(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_HIGH(PIN_B3);
delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_LOW(PIN_B1);
OUTPUT_HIGH(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }if(input(pin_C0)&&(!input(pin_c1))) // GIRO EN UN SENTIDO (GIRO 2)
{
OUTPUT_LOW(PIN_B0);
OUTPUT_HIGH(PIN_B1);
OUTPUT_LOW(PIN_B2);
OUTPUT_LOW(PIN_B3);
delay_ms(retardo); }}while(true);
}