Hola a todos, soy villamany de España. Estoy trabajando en una controladoras de servos mediante PIC16F628A.
La parte del firmware la tengo casi terminada y ahora estoy con el tema del hadware. Me gustaria que me dieran vuestra opinion sobre el esquema que he realizado.
Este dispositivo permitiria controlar via linea de comandos desde un PC hasta 8 servos, 3 reles, 1 zumbador y una entrada digital.
Adjunto el archivo en formato PNG del esquema.
Saludos y gracias a todos por este fantastico foro.
Editado: Gracias por la ayuda. Finalmente he realizado algunas modificaciones en el esquema y ya lo tengo funcionando en la protoboard. Dejo por aqui una idea del funcionamiento de la controladora y el esquema final. Si alguien esta interesado que me envie un privado y le paso el codigo. Saludos....
// Servo control v1.0 (Abril 2010) por villamany. Contacto: villamany@msn.com
Control de 8 servomotores para PIC 16F628A.
CARACTERISTICAS:
Este dispositivo, mediante linea de comandos permite el control independiente de
8 servo-motores (los utilizados en RC), 3 reles de salida, un zumbador
(frecuencia seleccionable) y una entrada todo-nada.
La comunicacion se lleva a cabo mediante Puerto Serie (UART niveles TTL 5v) a
9600bps con 8 bits de datos 1 bit de stop y sin control de flujo ni paridad.
LISTADO DE COMANDOS:
Los comandos tienen la sintaxis CMD ARG1 ARG2, es decir, un comando y 2
argumentos opcionales separados entre si por un espacio.
CMD siempre es un byte, mientras ARG1 y ARG2 pueden variar entre 1 y 5 bytes,
dependiendo del comando utilizado.
Los comandos deben enviarse de uno en uno seguidos de la tecla enter, tras
ejecutarse el comando, el dispositivo enviara una respuesta para indicar info
adicional sobre la ejecucion que tuvo lugar seguido de una nueva linea de texto
con "rdy>" indicando que el PIC esta preparado para recibir un nuevo comando.
Listado de comandos:
------------------
R Resetea el hadware y devuelve la version del firmware y la
posicion por defecto de los 8 servos.
p Lee el estado de la entrada todo-nada (interno y/o externo) y
devuelve "1" si esta cerrada "0" en caso contrario.
x Devuelve "1" si Rele1 esta activado y "0" en caso contrario.
x 1 Activa Rele1 y devuelve "1" (rele activado).
x 0 Desactiva Rele1 y devuelve "0" (rele desactivado).
x t Invierte el estado de Rele1 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
y Devuelve "1" si Rele2 esta activado y "0" en caso contrario.
y 1 Activa Rele2 y devuelve "1" (rele activado).
y 0 Desactiva Rele2 y devuelve "0" (rele desactivado).
y t Invierte el estado de Rele2 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
z Devuelve "1" si Rele3 esta activado y "0" en caso contrario.
z 1 Activa Rele3 y devuelve "1" (rele activado).
z 0 Desactiva Rele3 y devuelve "0" (rele desactivado).
z t Invierte el estado de Rele3 y devuelve "1" si ha sido activado o
"0" si ha sido desactivado.
b Devuelve la frecuencia en Hz a la que esta sonando el Zumbador.
b [fffff] Activa el Buzzer a la frecuencia indicada y devuelve la
frecuencia real (frecuencia mas proxima que puede generar el
oscilador).
[s] Obtener posicion de servo. Devuelve el valor del dutty cicle
aplicado a un servo.
[s] [tttt] Posicionar servo. Posiciona un servo aplicando el dutty cicle
indicado y devuelve el valor aplicado.
[s] + [tttt] Incrementar posicion relativa de servo. Incrementa en el numero
indicado el dutty cicle aplicado a un servo y devuelve el
valor aplicado al mismo.
[s] - [tttt] Decrementar posicion de servo. Decrementa en el numero
indicado el dutty cicle aplicado a un servo y devuelve el
valor aplicado al mismo.
[s] h Posicionar servo en su posicion por defecto (valor home definible
por otro comando), devuelve el valor del dutty cicle aplicado.
[s] U [tttt] Definir posion maxima admisible para un servo (dutty cicle
maximo). Devuelve el valor introducido.
[s] L [tttt] Definir posicion minima admisible para un servo (dutty cicle
minimo). Devuelve el valor introducido.
[s] H [tttt] Definir posicion por defecto para un servo (tras reset y comando
[s] h). Devuelve valor introducido.
[fffff] : Indica la frecuencia de funcionamiento del buzzer en Hz. Los valores
posibles son los enteros comprendidos entre 250 y 62500. El valor
0 tambien es valido e indica buzzer desactivado.
[s] : Indica el servo al que hace referencia el comando. Los valores
posibles son 1,2,3,4,5,6,7 u 8.
[tttt] : Indica el valor del dutty cicle en microsegundos aplicado a un servo
para posicionarlo. Los valores posibles son los enteros
comprendidos entre 200 y 2500.
Cualquier intento de posicionar un servo por encima de su valor
maximo admisible (comando[s] U [tttt]) dara como resultado el
posicionado del servo a su valor maximo admisible.
Cualquier intento de posicionar un servo por debajo de su valor
minimo admisible (comando [s] L [tttt]) dara como resultado el
posicionado del servo a su valor minimo admisible.
*/
/*Atencion: A la hora de reprogramar el PIC por ICSP, es recomendable
desconectar la alimentacion de la placa para evitar posibles errores de
programacion y/o movimientos involuntarios de servos y reles.*/