Portal    Foro    Talleres    Buscar    FAQ    Registrarse    Conectarse
Publicar Nuevo Tema  Responder al Tema Página 1 de 2
Ir a la Página 1, 2  Siguiente
Programar Un Pic 16f628????
Autor Mensaje
Responder Citando  
Mensaje Programar Un Pic 16f628???? 
 
Hola a todos:

Necesito un poco de ayuda, tengo un pic16f628, no tengo ni idea de programacion de pic, pero necesito programar y hacer que este micro me controle las posiciones de un servomotor, de diga en que posicion esta en todo momento y genere un pulso para llevarlo a la posicion deseada. dificil??? posible??? por donde puedo empezar???
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
AQUÍ PUEDE IR TU PUBLICIDAD
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
Necesitas un programador de PICs. Para esto tienes 2 opciones, dependiendo de tus conocimientos de electronica, dinero, tiempo, etc. Puedes comprar tu programador ya hecho (uno muy bueno a buen precio es el CCS ICD-U de 75$) o puedes bajar un esquematico de la red (hay miles) hacer tu PCB y soldar los componentes.

Paso 2 Necesitas aprender programacion de PICs. Hay 2 opciones la mas antigua y segura es aprender ASSEMBLER para PICs, no hay muchos comandos y se puede aprender facilmente, pero la dificultad radica en el diseño de los algoritmos ya que como veras ASSEMBLER es un lenguaje complicado. Ahora pudes usar un compildor en C y programar en ANSI C. Para esto hay muchas compañias que ofrecen este tipo de compiladores desde gratis hasta de paga, o puedes bajarte uno de paga de eMule Smile como el "PCWH IDE Compiler".

Paso 3. Necesitas aprender a diseñar cktos con microcontroladores.

Todo esto te puede tomar entre algunos dias hasta muchos meses, dependiendo de que tan rapido aprendas y cuantos conocimientos previos tienes. Ahora esta es la aprte dificil en la que no podemos ayudar mucho. Como siempre la web es uno de los mejore lugares para aprender, puedes encontrar desde tutoriales, esquematicos de cktos ya probados, programas para bajar, etc.

Ahora para la aplicacion que me dices, el programa y diseño es muy facil. Lo unico es que no se puede saber la pocicion de un servomotor, solo se puede asumir, ya que estos tienen un controlador e pocicion interno el cual usa un pequeño potenciometro. Lo unico que puedes hacer es decirle al servo a donde debe de ir y asumir que llegara!, (usualmente lo hacen). Si deseas realmente medir por ti mismo el angulo, entonces deberas añadir algun medio de medicion, como por ejemplo un potenciometro externo o un encoder, lo cual complica un poco el diseño.

Espero esto te haya servido de ayuda! Avisanos como vas progresando y si necesitas mas ayuda aca estamos.

Suerte
  




____________
Hian Technologies, 3D Printing service and CAD consultancy.
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
ok, muchisimas gracias antes de nada.
a ver, ya tengo un programador "grabador_STM1", tengo el winpic800, el mplab y el PIC Simulator IDE.tengo tambien un programador el 16f628, no consigo grabar nada en el, meda erroes con todos los programas que intento grabar, no se si es por el grabador o por el programa en si.
no se podria conectar el potenciometro del servo a alguna de las entrada del pic y saber cuanto vale su resistencia??? de esta forma podriamos saver en que posicion esta, no?.
mi ideas es construir un robot humanoide con servo motores, para ello tengo un micro el "bx24p-u" de el quiero que cuelguen varior servo, quisiera crear un bus de direcion y un bus de datos, me explico? tampoco tengo muy claro como hacerlo pero bayamos por pasos. con el bx24p-u embiare la informacion de la posicion a cada servo y con el pic 16f628 el pulso al servo. complicado verdad????
bueno a ver si lo consigo.
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
Hola Pedro,

pues lo que necesitas es implementar un Encoder, lo cuál puedes hacer usando un CNY70 y adjuntarlo a cada uno de tus servomotores tal como se muestra en este Enlace 1, o sino puedes probar esta otra versión mejorada de un Encoder para servomotores solo que usando el QRD1114, en este otro Enlace 2.

Para controlar un servomotor debes enviar un pulso, ese pulso es el que le indica a que posición moverse, y es con el Encoder que lees si la posición es la correcta. Entonces con un uC (el bx24p-u) comandarás el movimiento de los servomotores y con el PIC puedes verificar la posición.

En el foro hay otras secciones donde se muestra el control de un servomotor.

Suerte, ve revisando la info que te he dado y según eso vamos avanzando.

Bytes.  Smartass
  




____________
Comparte el conocimiento !!!

Si lo oigo, lo olvido; Si lo veo, lo recuerdo; Si lo hago, lo entiendo.
Proverbio.


Just Burz
Diario del Ingeniebrio
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
Que buena Burz esa no me la sabia!.

Pedro muy interesante tu idea de hacer un humanoide, pero hay algunas cosas que las debes de tener claro antes de comenzar.

1. Realmente no necesitas saber la pocision de los servos. Como dije antes estos ya tienen un controlador de poscion interno, y no ganarias mucho implementando un controlador de pocision doble (en cascada)

2. El bx24p-u no es un micro adecuado para un humanoide, al menos si lo que quieres es que camine. El metodo mas usado para lograr que un humanoide camine es el ZMP (Zero Momentum Point) para realizar las operaciones matematicas para resolver los angulos, necesitaras algo mas poderoso que este micro

3. En cuanto al servo, usualmente el control interno es preciso, las impresiciones que podrian haber son mayormente debidas al potenciometro en si (ya que no son tan lineales) y si este es la base de la imprecicion entonces no te valdra de nada usarlo para medir la poscicion. La solucion de Burzredion es una muy buena opcion.

4 Si tu PIC no programa, trata con otro programador es lo mas facil. si sigue sin programar entonces (suponiendo que todo este bien conectado) es el PIC que falla. Personalmente nunca he usado ese programador que mencionas, pero si alguien en el forum lo ha usado, quizas pueda ayudar. Podria ayudar que nos pasaras que error te da, quizas no sea cosa del programador ni del programa ni del PIC, quizas los programas que estas tratando de grabar no esten escritos para ese PIC. El programador lo compraste o lo ensamblaste tu? Si lo ensamblaste tu, estas seguro que esta bien ensamblado? lo has probado con otros PICs? Si lo ensamblaste tu, postea el esquematico para que pueda revisarlo.

5 De acuerdo a mi experiencia con humanoides, la mejor solucion es usar un bus de alta velocidad como el CAN (controller area network) usar muchos controladores pequeños cada uno encargado de un motor, y usar un controlador super rapido (quizas un DSP de 32 bits 150MHz como el TMS320F2810 de TI o en el mas simple de los casos un ARM como los de Luminary Micro) de esta forma tendras el poder necesario para resolver las ecuaciones kinematicas inversas y calcular el ZMP de manera precisa) adicionalmente se usan otros micros que reciben la informacion de los sensores (giroscopios, acelerometros, presion, etc) y la mandan por el puerto CAN al micro host. Segun veo el bx24p-u esta basado en un ATMEGA (8 bits 16MIPS). El problema en los controladores que te recomiendo radica en el programador que usualmente es caro (bastante) por esto quizas tu mejor opcion sea usar un PC externa para realizar estos calculos y usar quizas un modulo bluetooth o el puerto CAN para mandar las instrucciones a los controladores clientes en el humanoide.

6. Hay algo que no comprendo de tu ultimo post y es esto: "con el bx24p-u embiare la informacion de la posicion a cada servo y con el pic 16f628 el pulso al servo..." Bueno el servo tiene 3 patitas, una es + la otra - (tierra) y por la tercera recibe, no un pulso, sino un tren de pulsos, y es con el Duty Cycle de este tren de pulsos que el servo determina la pocicion a la que quieres que se ubique. Segun tu texto ambos micros estarian enviando esta informacion, y a menos que estes multiplexando (lo cual no creo sea el caso) esto no funciona asi.

Saludos
  




____________
Hian Technologies, 3D Printing service and CAD consultancy.
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
ok:

Creo k no me he explicado bien. A ver... con el micro bx24p-u consigo cargar una tabla donde viene especificado el número del servomotor y la posición del mismo de esta manera:
000,121
001,140
002,012
003,124
004,120
005,101
006,128
… ,  …
la fila de la izquierda nos dice el servo que se moverá, la de la derecha la posición que debe tomar, todo esto me funciona relativamente, el problema viene cuando quiero mover dos servos a la vez, uno en una posición y otro en la otra, yo conecto cada servo a una patilla del micro y por ella genero una cadena de pulsos para mover al servo, pero creo que el micro no puede generar dos cadenas de pulso distintas a la vez ( creo ) ni puede hacer dos tareas simultáneamente, otro de los problema que pude ver es que no puede dejar de generar una cadena de pulsos para que el servo no se quede “engarrotado”( es decir, si deja, el servo se quedaría sir resistencia al peso del propio robot) la forma de generar un pulso es con un “do-loop” y al no poder efectuar dos tareas simultaneas solo puede controlar un servo. no se si me explico bien, os dejo el código para que le echéis un vistazo a ver si se pudiera arreglar.  



Dim Program1 As New ByteTableData                ' Programa 1
Dim Servo As Byte                                'Numero del Servo
Dim Valor As Byte                                'Valor del Servo
Dim Valor2 As Byte                                'Valor del Servo
Dim InBuff(1 To 20) As Byte                      'Bufer de entrada del puerto serie
Dim OutBuff(1 To 50) As Byte                     'Bufer de salida del puerto serie
Dim grados as single
Dim pulso as single
Dim n as byte
Dim j as byte

Sub main()
                                                                                


  N = 1                                                                          
  Servo = 0
  Valor = 0
     Call Program1.Source("Prg1.txt")                                              
  Do Until (Servo = 255)                                                            
    N = N + 1                                                                          

    Servo = Program1(1, N)                                                             

    Valor = Program1(2, N)                                                            
    debug.print " Valor = " ; cstr (Valor)
    debug.print " Servo = " ; cstr (Servo)
    grados = csng (Valor) * (0.70866141732283464566929133858268)                        

    debug.print " grados = " ; cstr (grados)                        
    pulso = (csng (Valor) * 0.70866141732283464566929133858268 + csng (74)) / csng (100000)

    debug.print " frecuencia = " ; cstr (pulso)
    
        j = 0                                                                      

    Do
        j = j + 1                                                                      
        Call PulseOut(Servo, pulso, 1)                                                  

        Call Delay(0.02)                                                              
        If (j > 30) Then                                                              
        Exit Do                                                                      
        End If
    Loop                                                                              
    
  Loop                                                                                

End Sub

Mi solución a esto fue intentar programar un micro PIC para que este genere la cadena de pulsos independiente del bx24p-u y este solo genere la posiciones de los servos utilizando también el resto de entradas para los distintos sensores.
La idea de saber la posición de los servos es para mover manualmente el robot y memorizar las posiciones así podremos crear bailes y movimientos de una forma sencilla.

Como lo veis????? Llevo mas o menos un año desde que empecé el proyecto, he tenido que estudiar bastante y e gastado algún dinero, mero es mi entretenimiento y creo realmente en ello, necesito de vuestra ayuda porque no tengo mucha idea y estudie en su día electrónica, un modulo en España, y no tengo muchos conocimientos de programación.

Desde que empecé sois los únicos que me habéis ayudado os lo agradezco en el alma de verdad no encontraba mucha gente que comparta este entretenimiento conmigo.

GRACIAS!!!!!
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
Bueno pense que lo que querias hacer era generar el PWM con el PIC, para poder controlar servos, necesitas microcontroladores con generardor de PWM internos, los microchip PIC de la serie MC (motor control) tienen esta funcion y podras generar varios PWM a la vez, quizas 2 o 3.

No conozco ningun micro que pueda generar 7 PWMs a la vez. Por esto te dije que la manera de hacerlo era con un controlador Host donde estan los algoritmos principales o (higher layer control) y usar varios micros secundarios clientes para el control INDIVIDUAL de cada servo (low level control).

Saludos
  




____________
Hian Technologies, 3D Printing service and CAD consultancy.
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
ok
Podriamos generar una cadena de pulsos a partir de una entrada (Cualsea)con el pic 16f628 para controlar un solo servo???
la ideas seria generar una señal con un pic 16f628 para cada servo, esta dependerá de una entrada.
seria complicado hacer eso???
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
Si se puede hacer y no es muy complicado, puedes usar el timer del 16F628 para hacer esto.
  




____________
Hian Technologies, 3D Printing service and CAD consultancy.
Desconectado Ver perfil del usuario Enviar Mensaje Privado Visitar sitio Web del Usuario MSN Messenger Skype
Descargar Mensaje Volver arriba Página Inferior
Responder Citando  
Mensaje Respuesta: Programar Un Pic 16f628???? 
 
al pelo!!!!

como duedo empezar??? seria mucho pedir el que me ecribas un pequeño programa ???? no tengo mucha idea
  



Desconectado Ver perfil del usuario Enviar Mensaje Privado
Descargar Mensaje Volver arriba Página Inferior
Mostrar mensajes anteriores:
Resumen de Valoraciones:
Media de Valoración Valoración Mínima Valoración Máxima Número de Valoraciones
0.00 0 0 0
Ver Información Detallada
Elegir Valoración: 
Publicar Nuevo Tema  Responder al Tema   Página 1 de 2
Ir a la Página 1, 2  Siguiente

Usuarios navegando en este Tema: 0 Registrados, 0 Ocultos y 0 Invitados
Usuarios Registrados conectados: Ninguno


 
Lista de Permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No Puede descargar archivos
Puede enviar eventos al Calendario