# PIC 16F877A, PWM, DC, ADC....



## pic4dummies (Nov 26, 2007)

Hola:

Soy nuevo en este foro y en esto de los PIC's. Estoy aprendiendo mucho leyendo este foro.

Tengo un proyecto a largo plazo (en plan Hobby), ya que no es mi oficio.

Quiero construir una cabeza caliente para mi camara, o sea, un sistema de movimiento de ejes X-Pan y Y-Tilt (de momento sin Roll).

Habia pensado usar un PIC 16F877A, para leer el valor de dos resistencias variables con los A/D, que serian las que generarian el movimiento de ambos ejes.

El sistema se moveria con motores DC mediante PWM. Más adelante igual intentaria impementar un sistema PID, o un lazo cerrado, para asegurar las posiciones de la camara e incluso poder repetir movimientos preprogramados, mediante encoders absolutos o relativos (aun no se que seria mejor, accepto propuestas e ideas)

Me gustaria recibir todo tipo de información, ya sean tutoriales, propuestas, ideas, links, que puedan echarme una mano tanto a nivel de hardware como a nivel de programacion, que en principio pensaba programar en ensamblador mediante el MPLAB.

Es posible leer dos señales analogicas y generar dos señales PWM a la vez con el mismo PIC?

Que lenguaje de programacion recomendais?

Seria más facil usar encoders en vez de potenciometros?

Que encoders serian mas apropiados, absolutos o incrementales, para generar y leer posiciones. Y para hacer un PID?

El PIC 16F877A me serviria para este proposito?

Deberia hacer dos ciruitos con dos PIC por separado o puedo resolverlo con un solo PIC?

Muchas gracias de antemano


----------



## Paloky (Nov 26, 2007)

Hola.

Si utilizars servos, no te hace falta poner ningún tipo de encoder, hi ha que a cada anchura del PWM, le coresponde siempre el mismo angulo de giro. En cada momento tu, sabes que angulo le has mandado y por tanto que posición tiene la cámara.

No hay ningún problema en hacerlo todo con un solo pic.   Los PWM, los tienes que generar por software mediante interrupciones.

Si eres nuevo en esto de la programación de pic's, te recomiendo que aprendas C.

Saludos.


----------



## pic4dummies (Nov 26, 2007)

Gracias por la rapida respuesta.

Primero, que es una interrupcion.

Segundo, y si quisiera hacerlo con motores DC normales. Es que la camara que tengo no es una HandyCam, mas bien una camara profesional, o unos servos me la moverian?

Gracias

Ah, otra cosa, es mejor aprender a programar en C? Cual es el mejor lenguaje para programar, C, ensamblador o Basic?


----------



## Paloky (Nov 26, 2007)

Existen servos grandes con mucho par motor,  tendrias que mirar dependiendo del peso de la cámara. (Mira en tiendas de modelismo).

Una interrupción, es una interrupción del programa principal para hacer ejecutar otro código. En quando termina de ejecutar este otro código, vuelve al programa principal y continua donde estaba antes. Si esta interrupción la associas a un contador, puedes hacer que cada x milisegundos, haga algo (En este caso cada 20 ms es la frecuencia del PWM).

Yo prefiero el lenguage C, aquí si que cada uno dará su opinión.  Simplemente creo que sabiendo C, siempre puedes recurrir luego a hacer tus propios software para el PC.

Saludos.


----------



## pic4dummies (Nov 26, 2007)

Muchas gracias, Paloky

Una interrupcion se podria entender como una subrutina?

Cuantas preguntas eh?

Estaba pensando en dedicar mas tiempo en aprender ensamblador pero probaré con el C

Muchas gracias de nuevo


----------



## aaronsastre (Sep 14, 2009)

hola soy nuevo en eso de los pic's y tambien en  programacion  y nesecito generar un PWM proporcional al valor de un potenciometro que controlara a un servomotor hasta ahora he logrado  sacar un valor del ADC del pic 16f877a pero no se como programar un PWM sin usar las interrupciones pues tengo que controlar  4 servos  con movimiento independiente  es por eso que necesito una rutina para generar la PWM para usarla como una subritina de mi programa y como  lo que mas o menos sé es ensamblador pues ahora  pido su ayuda .
gracias de antemano


----------



## 31587 (Feb 15, 2011)

hola 
me pueden ayudar como puedo programar en asm un motor DC activandole desde un reloj calendario para activar y desactivar con el pic 16f877


----------



## VerYvlen (Sep 11, 2012)

no sé cómo ha quedado este asunto, pero me gustaría reabrir la conversación... Estoy intentando controlar un servo para que meza una cunita. Estoy usando un servo-futaba y estoy muy mal acostumbrada a usar el assembler... Necesito comprender los comandos y calcular los tiempos para programar en C, pero me parece un lenguaje conveniente, descargue el MPLAB que funciona con las librerías del PIC-C, me ha facilitado la vida... Aún así, alguien conoce alguna subrutina básica...


----------

