Como dicen los compañeros, la placa es una entrenadora (la PICSchool). La usé porque el objetivo de mis pruebas era solo tener una primera toma de contacto con los servos y la comunicación con el PC por puerto serie, sin tener que preocuparme de la parte hardware. Digamos que la entrenadora sirve de entorno de pruebas/aprendizaje.
Una vez hechas estas pruebecillas, el siguiente paso ha sido fabricar una placa controladora de servos. Agradecería mucho si alguno pudiese echarme una mano, porque tengo algunos problemas con ella:
La placa controladora de servos la tengo fabricada con un 16f876 a 20 Mhz. El funcionamiento consiste en enviarle
a través de conexión serie información sobre el servo que se debe mover y la nueva posicion. El esquema consiste en otro 16f876 a 20 Mhz que le manda los comandos a la placa controladora de servos. Dicha comunicación serie se realiza a 9600 bps.
Mis problemas radican en que la comunicación serie es a veces incorrecta. La placa recibe datos corruptos. Podría decir que aleatoriamente, un 50% de los mensajes son ejecutados por los servos y el otro 50% no.
Para ir aislando el problema, pensé en ir haciendo pruebas para descartar errores,
1) Sniffar el envío de datos con el ordenador para descartar que el pic que envía datos lo haga incorrectamente ----> Ok. Con lo que descarto que el fallo esté en el generador de ordenes.
2) Desactivar todas las interrupciones en la placa controladora de servos excepto la recepcion serie y a su vez que haga eco de lo que recibe. ----> OK. Con lo que descarto errores hardware como ruído en el cable de comunicación, cristales de 20 Mhz fastidiados....
3) Enviar ordenes a la placa a una tasa menor (primero enviaba una orden por segundo y después una cada 4 segundos) ---> Este resultado es curioso, porque si espero más tiempo de intervalo entre ordenes de movimiento de servos, me da la impresión de que obtengo una tasa de errores menor. (es sólo una impresión)
4) Sacar trazas de la placa controladora durante la ejecucion con un printf por el puerto serie. Si no desactivo todas las interrupciones antes de enviar datos, los datos que envío son corruptos, del estilo $$$h!!o="l__a en vez de recibir "hola". No entiendo muy bien esto porque el envío de datos es por Hardware y si el micro está muy ocupado printf entregará datos al buffer de salida a una menor tasa, pero entiendo que nunca corruptos.
Otros datos de interés:
- La placa controla hasta 8 servos y me he basado en esta página porque me pareció una buena implementación
http://picmania.garcia-cuervo.com/PICC_Servos_x_8.php Muchas gracias.