Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola!
Estoy teniendo problemas con las salidas digitales cuando utilizo la libreria de servos. Lo achaco a esto, por que no encuentro otra explicación a lo que me pasa.
Vereis, tengo un robot impulsado por dos servos trucados, que controlo con las funciones que implementa pinguino (gracias sphinx). Por otro lado tengo dos bumpers que por motivos que no vienen al caso los conecto a 4 pines E/S del pinguino (pines 13 a 16). Los pines 14 y 15 los configuro como salida, escribo un HIGH y los conecto al común de los bumper... luego los contactos NA los conecto a los pines 13 y 16 configurados como entradas digitales... mi sorpresa es que cuando mido tension en los pines que he configurado como salidas tengo 0v.... he probado a escribir el uno en las salidas dentro del loop.... a configurar la E/S utilizando los registros en lugar de pinMode() y digitalWrite()... con el mismo resultado.... solo me falta hacer la prueba de los finales de carrera sin usar la libreria de servos para ver si es eso...
Os dejo el código a ver si alguien ve algo raro...
#define PIC18F2550
//Constantes para el control del servo derecho
//Modificar este valor hasta parar el servo
#define STOP_D 125
#define AVANCE_D STOP_D-30
#define ATRAS_D STOP_D+30
#define MOTOR_D 4
//Constantes para el control del servo Izquierdo
//Modificar este valor hasta parar el servo
#define STOP_I 125
#define AVANCE_I STOP_D+30
#define ATRAS_I STOP_D-30
#define MOTOR_I 5
//Constantes para los sensores
#define BLANCO TRUE
#define NEGRO FALSE
//Entradas sensores digitales
//ED=Exterior Derecho
//EI=Exterior Izquierdo
//II=Interior Izquierdo
//ID=Interior Derecho
#define CNY_ED 9
#define CNY_EI 11
#define CNY_II 12
#define CNY_ID 8
//Definiciones para finales de carrera
#define FC_D PORTAbits.RA3
#define FC_I PORTAbits.RA0
#define COMD PORTAbits.RA2
#define COMI PORTAbits.RA1
//Varibles auxiliares
unsigned char i;
//Configuración de E/S
void setup ()
{
//Configuramos como entradas digitales los pines del 9 al 12
for (i=9;i<13;i++)
{
pinMode(i,INPUT);
}
//Configuramos como driver de servos los pines 4 a 5
for (i=4;i<6;i++)
{
servo.attach(i);
}
//Paramos los motores
servo.write(MOTOR_D,STOP_D);
servo.write(MOTOR_I,STOP_I);
//configuramos E-S para Finales de carrera. Pin 13 y 16 como entradas; 14 y 15 como salidas.
TRISAbits.TRISA0=0;
TRISAbits.TRISA1=1;
TRISAbits.TRISA2=1;
TRISAbits.TRISA3=0;
}
//programa principal
void loop (void)
{
//Ponemos comun del FC a 1
COMD=1;
COMI=1;
if (FC_D == 1)
{
servo.write(MOTOR_D,ATRAS_D);
servo.write(MOTOR_I,ATRAS_I);
delay (500);
servo.write(MOTOR_D,AVANCE_D);
servo.write(MOTOR_I,ATRAS_I);
delay (500);
}
else if (FC_I == 1)
{
servo.write(MOTOR_D,ATRAS_D);
servo.write(MOTOR_I,ATRAS_I);
delay (500);
servo.write(MOTOR_D,AVANCE_I);
servo.write(MOTOR_I,ATRAS_D);
delay (500);
}
else
{
servo.write(MOTOR_D,AVANCE_D);
servo.write(MOTOR_I,AVANCE_I);
}
}
Un par de cosas a revisar:
- ¿A dónde está conectado el pin NC de los bumpers? Si alguno de los contactos NC del bumper toca con tierra pueda que sea el motivo por el que ves los 0v...
- ¿Usas resistencias de pull-down en las entradas digitales? Importante si vas a usar la salida NA del bumper.
A ver si fuese algo de eso.
¡Un saludo!
Hola Bastian,
Efectivamente, me inclino más por pensar que te pasa lo que dice FJ_Sanchez.
Yo miraría si poner pull down en esos pines.
De todos modos, no veo lo de utilizar pines para los NC de los bumpers.
Saludos,
Sphinx.
Lo de los NC me refiero a que si ese nodo hace contacto con alguna parte del circuito que tenga 0V hace un cortocircuito o en el mejor de los casos si hay alguna resistencia por ahí, simplemente lo pone a 0V. Si está aislado de todo no pasa nada.
Hola!
Soy consciente de que el tema de la conexion de los bumpers es un chapuza 😳 😳 😳 😳 Era una prueba rápida en la que no queria enmarañar el cableado con resistencias de pull-up/down... y lo primero que quité cuando vi que no funcionaba, por lo que está descartado que sea problema de la conexión de los bumpers.
Teniendo los pines al aire, los configuro como salida, escribo un uno en el pin y cuando mido tensión en el pin tengo cero voltios y es problema software por que todo está desconectado... motores, sensores, bumpers... todos los pines están al aire.
Aun no he tenido tiempo de probar lo que comente en el post anterior... cuando lo pruebe os comento. Gracias!
Salu2!