Autor Tema: Problemas en el control de un servo usando 16F628A  (Leído 5495 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tathan

  • PIC10
  • *
  • Mensajes: 4
Problemas en el control de un servo usando 16F628A
« en: 28 de Julio de 2010, 21:16:29 »
Buenas Tardes,

Es una lástima que mi primer mensaje en el foro sea para pedir ayuda, pero estoy un poco perdido.

La idea es controlar mediante servos la posición de una cámara usando pulsadores (izquierda, derecha, arriba y abajo... lo más general posible), para ello estoy usando el PIC 16F628A que me pareció de las mejores alternativas tanto en costo como en capacidades.

Lo primero fue crear el programa completo, el cual funciona perfecto en proteus, pero cuando lo quemo en el PIC ambos servos giran a la posición mínima. Supuse que puede ser un problema con el oscilador, al principio use el oscilador interno del PIC, después probé con otros desde 4 hasta 20 mhz.

Hice más sencillo el programa y solo usé el bloque de programación para girar hacia los lados y sigo teniendo el mismo problema, lo curioso es que ahora cuando se está moviendo si toco el pin de salida de señal desde el micro al servo se mueve en sentido contrario. Sigo creyendo que es un problema con el oscilador, pero estoy bastante perdido.

Aquí dejo el programa, es bastante sencillo y basado en uno que encontre aquí mismo. (pero no recuerdo de quien)

Código: [Seleccionar]
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Cristián                                          *
'*  Notice  : Copyright (c) 2010                           *
'*          : All Rights Reserved                               *
'*  Date    : 27-07-2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

cmcon=7

p_izq var portb.3
p_der var portb.4
sal var portb.0
ang var byte

TRISB=%00011000
PORTB.0=0

ang=150


inicio:
pulsout sal, ang
if p_izq=0 then
    pause 10
    ang=ang-1
    if ang<100 then ang=100
endif

if p_der=0 then
    pause 10
    ang=ang+1
    if ang>200 then ang=200
endif
   
goto inicio
end

Para quemar el PIC uso el IC-Prog, y dentro de las opciones me permite configurar el PIC, su oscilador, WDT, MCLR, etc. aquí pongo la interfaz.



He estado buscando información y he encontrado mucha, he probado casi todas las cosas que tienen algo de lógica para hacerlo funcionar pero llevo casi 2 semanas pegado.

Gracias por la ayuda y cuando lo termine espero poder ayudar en algo.

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #1 en: 29 de Julio de 2010, 11:40:15 »
hola tathan, no estoy muy al tanto de la programación en Basic, así que del programa no puedo decirte mucho.

Lo que si parece raro es que cuando toques el pin de salida del pic que va al servo, que sea en ese momento que cambie de dirección.

Quisas el problema este en el circuito, si puedes pon un esquema de las conexiones que tienes.
Has puesto resistencias de pull up o pull down en los pulsadores, o incluso en la salidad al servo? Tambien deberias poner unos condensadores de 10uf y 100nf entre VDD y VSS.

Ten en cuenta que los simuladores de circuitos no tienen en cuenta el ruido y esas cosas, sino como podrias hacer la simulación de que toques con el dedo el pin del PIC  :mrgreen:

Saludos, y bienvenido al foro
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #2 en: 29 de Julio de 2010, 12:44:11 »
Podrías subir el .hex para simularlo por Proteus? Es que yo no ando en basic pero quisiera ver las señales de salida en el osciloscopio virtual.

Otra cosa: La pantalla que colgaste del ic-prog muestra todos FF , indicando que no hay datos. O es sólo una captura sin importancia?
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado tathan

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #3 en: 29 de Julio de 2010, 16:47:56 »
Hola,

Ésta es la simulación en proteus del programa,


y el .hex está acá:


Código: [Seleccionar]
:100000004528B400142020082104031940283A2070
:1000100084133408800664000D280E28A00A0319F2
:10002000A10F0B2880064028FF3A8417800540283E
:10003000A301A200FF30A207031CA307031C402852
:100040000330A100DF3026201A28A101E83EA000DD
:10005000A109FC30031C2F28A00703182C28A00797
:100060006400A10F2C2820183528A01C3928000076
:1000700039280800A009A109A00A0319A10A08004B
:100080008313031383126400080007309F00831654
:1000900018308600831206109630B8003808A00089
:1000A000A101063084000130012064008619622815
:1000B0000A301820B803640064303802031862283C
:1000C0006430B8006400061A6F280A301820B80A95
:1000D0006400C9303802031C6F28C830B8004E28AD
:0400E0006300702821
:02400E00653F0C
:00000001FF

La captura era solo para mostrar la forma de configuración.

Citar
Quisas el problema este en el circuito, si puedes pon un esquema de las conexiones que tienes.
Has puesto resistencias de pull up o pull down en los pulsadores, o incluso en la salidad al servo? Tambien deberias poner unos condensadores de 10uf y 100nf entre VDD y VSS.

Probe con un condensador de 100nF entre Vcc y GND, hubo un cambio, lo que me lleva a pensar que es el ruido (soy un poco lento) creo que debería probarlo en una placa.

Una foto de mi circuito sin el condensador:
 Vcc (arriba), GND (abajo), El cable azul que se ve suelto es mi pulsador :P...
« Última modificación: 29 de Julio de 2010, 16:50:34 por tathan »

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #4 en: 29 de Julio de 2010, 17:04:07 »
cable naranja vertical y cable rojo horizontal no conectan
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #5 en: 29 de Julio de 2010, 18:00:09 »
creo que ahi es donde conectaria el servo.

No estoy seguro, puede que seas nuevo en esto de los PIC? Si es así te recomiendo que empieces por programar en assembler que un lenguaje de bajo nivel, asi conoces bien como funciona internamente el PIC.

Mira, aqui tienes un ejemplo del control de un servo para lo que tu quieres.http://robots-argentina.com.ar/Prueba_ServoRC01.htm

El circuito pareciera correcto, aunque deberia ponerle los condensadores para evitar ruido y como dices mas en una protoboard, no es necesario que hagas una placla impresa para probar ese circuito.

Con respecto a las resistencias en pull up de los pulsadores es recomendable usar valores de 1K para arriba, y para disminuir el consumo de 10K, esto te lo comento solo a la pasada ya que no tendria que afectar al funcionamiento, aunque ten en cuenta que el pic tiene sus limitaciones en la corriente.

Para probar el circuito no tengo el Proteus, asi que te la debo.

Para poder adjuntar archivos puedes usar las Opciones Adicionales cuando redactes el mensaje.
Estan entre el cuadro de texto y los botones Publicar y Previsualizar.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado tathan

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #6 en: 29 de Julio de 2010, 22:36:38 »
Mira, aqui tienes un ejemplo del control de un servo para lo que tu quieres.http://robots-argentina.com.ar/Prueba_ServoRC01.htm

Hola, gracias por las respuestas, y si había revisado esa info sobre el control de servos con el 16F628A, el problema es que al llevar el prgrama al pic y hacer el mismo circuito en el protoboard, me sigue sucediendo lo mismo.


Tengo una duda en la forma de colocar los condensadores entre Vcc y GND, yo solo puse uno de 100nF, pero me recomiendas poner dos (10uF y 100nF) con eso supongo que eliminaría distintas frecuencias de ruido o no??

A seguir probando.

Gracias

ps. recien vi las opciones adicionales :D




Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #7 en: 29 de Julio de 2010, 23:30:55 »
si es lo que se recomienda, poner uno de 10uf y otro de 100nf. La idea de estos condensadores es eliminar el riple, es decir las ondulaciones en la tension de alimentacion. Si sirven para algun otro ruido la verdad que no sabria decir, pero creo que no.

Para eliminar ruidos que generen otros dispositivos lo que debes hacer es poner a GND todas las patas que uses del pic como entradas. O en caso de que no las uses deberia setearlas como salidas.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado pibe

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 635
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #8 en: 30 de Julio de 2010, 03:36:46 »
Aunque sea recomendable y casi obligatorio tantos condensadores... YO, y repito sólo YO , nunca tuve un problema por ruido de fuente.
Es más , a veces sin un solo filtro, sólo regulador y a probar. Y nada, no se mosquéa.
He hecho cantidad de circuitos en protoboard con varios CI , comunicados por SPI, UART, I2C con tan sólo un triste condensador de 10uf y nunca tuve un inconveniente.
Moraleja: No creo en las brujas. Cuándo el pic hace tonterías o no quiere arrancar es por un fallo en el firmware, no le doy vueltas al hardware porque ya tengo comprobado que los pics son muy estables.

Las resistencias de pullup que estás usando son demasiado pequeñas (220 ohms) , pónlas entre 4k7 y 10k
Súbele el pause 10 a pause 30 o 40.
Comprueba que has deshabilitado las resistencia de pullups por software del puerto B.
IMPORTANTE: Comprueba que has puesto MCLR OFF por software, porque veo que no has puesto la resistencia de pullup a + en el pin 4 (mclr) . Si el mclr queda al aire el micro puede no arrancar, o en el mejor de los casos arranca y se resetea al azar.

Si no logras ponerlo en marcha entonces puedo hacerte el programilla en ASM, aunque no tengo un servo motor para probarlo. Sólo podría simularlo en proteus.
« Última modificación: 30 de Julio de 2010, 03:39:46 por pibe »
Mi jefe mirando el prototipo que estoy creando: "Y eso va a funcionar?"

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #9 en: 30 de Julio de 2010, 09:00:41 »
Citar
IMPORTANTE: Comprueba que has puesto MCLR OFF por software, porque veo que no has puesto la resistencia de pullup a + en el pin 4 (mclr) . Si el mclr queda al aire el micro puede no arrancar, o en el mejor de los casos arranca y se resetea al azar.

esas son las ventajas que le veo al assembler, que debes explicitar todo para que funcione correctamente, y con otros lenguajes como que hay cosillas que quedan un poco implicitas, solo trabajo con C18, no conozco los otros, asi que no puedo asegurar  :oops:

Con respecto al ejemplo ese del servo que te pase, yo lo probé y funciona así como está.
Tiene una segunda parte que hace lo mismo pero con interrupciones, creo que es un buen ejemplo para empezar y conocer cuestiones básicas de los PIC, de paso ya te enganchas con el ASM  :mrgreen:
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado tathan

  • PIC10
  • *
  • Mensajes: 4
Re: Problemas en el control de un servo usando 16F628A
« Respuesta #10 en: 30 de Julio de 2010, 13:36:02 »
Tienen razón, voy a probar en assembler y vere que tal queda; sobre las resistencias ya son de 10k.

Les comento que tal quedó el programa.

Gracias por la ayuda :)