Autor Tema: Estudiante en apuros  (Leído 7450 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
Estudiante en apuros
« en: 13 de Marzo de 2006, 12:45:00 »
Hola buenas, tengo que controlar un motor paso a paso mediante un control remoto y un ordenador (con rs232) todo esto con un pic.
Estoy empezando ahora y no tengo muy claro si programar el pic con lenguaje C++ o ensamblador, que me aconsejais?, si teneis algun ejemplo de programa para ver como como puedo hacer lo del control remoto y la comunicacion serie, el ejemplo no tiene que ser para control un motor paso a paso.
MUCHAS GRACIAS!!!!!!!!!!!!!!!!

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #1 en: 14 de Marzo de 2006, 05:22:00 »
Hola, lo primero gracias por interesarte.
Esto es un proyecto de fina de carrera y lo estoy haciendo en el extrangero y no me han dado muchas opciones a elegir.
He programado el motorola HC11 y en c++ tambien he programado para algunas asignaturas, pero aqui solo me dejan programar el pic.
El proyecto consta como de dos partes, una de ellas es el control remoto. Este consta de tres botones, haran girar al motor en el sentido derecha, izquierda tantos pasos como tiempo lo tengamos pulsado el boton y ademas tiene star/stop. Demomento no he elegido ningun mando, pero en esta semana tendre que elegirlo dado que necesito saber su frecuencia.
Yo no quiero que me manden un programa echo,ni mi proyecto terminado, solo me gustaria tener algun programa de guia en el que se controle algo con un mando, o simplemente una ayuda para encaminar mi proyecto en el punto en el que me encuentro.
La otra parte (comunicacion con el pc mediante RS232) la tengo un poco parada, dado que no puedo hacer las dos cosas a la vez.
Igual es mejor empezar con esa parte, no lo se.
Bueno, muchas gracias por dedicarme estos minutos.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Estudiante en apuros
« Respuesta #2 en: 14 de Marzo de 2006, 05:37:00 »
Si has programado con otros microcontroladores sabrás que programar en C no te evita tener que leer el datasheet del micro para saber que estas haciendo.

Sugerencia? Y, depende de cada uno .  Tampoco has dicho que pic específico vas a usar.  Si usas los 16F te será más facil programar en C porque te evitarás el tedioso trabajo de saber en que página de memoria y de programa está tu código.  La gran mayoria de los errores cuando se empieza con los pics corresponde a esto.

Respecto a la interfaz con la pc, un max232 es suficiente.  Luego está tu inventiva y creatividad para crear el protocolo que creas más adecuado.

1) Has un programa que prenda un led, de esa forma sabrás que al menos el pic vive
2) has un programa que envie y reciba datos por la usart (atención al clock que usas en tu micro y a como configuras la usart para obtener la misma velocidad que la pc).
Ese programa, sería un "eco".  La PC envía un dato y el pic le responde el mismo dato.
3) Implementa luego tu protocolo de "comandos".

Con la parte wireless del control remoto no te puedo ayudar porque no he hecho nada similar pero hay integrados de holtek que son infrarrojos pero si por RF y resuelven todo esto muy bien para cortas distancias.  Los he visto en muchas aplicaciones, sin ir mas lejos en control de portones eléctricos.
En la sección del C, podrás encontrar ejemplos sobre el uso de la usart.

Saludos y bienvenido a los pics
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #3 en: 14 de Marzo de 2006, 06:13:00 »
Gracias maunix.
Tenia pensado empezar con el mando, pero con esto que me has dicho, voy a empezar con el ordenador.
Voy a utilizar el pic 16FXXX, todabia no se cual va a ser el especifico, yo creo que cualquiera me valdria, no?, solo utilizo un puerto entero para la salida (control del motor) y otro puerto (1 pin entrada serie, 1pin salida serie, 1 pin para el mando.).

Para programar el puerto serie en c++ tengo el siguiente prototipo el cual se hace eco, que te parece?

#define _16fxxx
#include "pic16fxxx.h"
#include "sci.h"


void main(void)
{
  unigned char c;
  TRISB = 0xFF; //configuro el puerto B como entrada
   sci_conf();
   for(;Giño
    c = sci_read(); //llega el dato del pc
................
...............

sci_write(c);//envia de vuelta el caracter
}

este es como lo principal para la comunicacion le tendria que meter muchisimas cosas, pero para empezar, crees que voy bien encaminado????

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
RE: Estudiante en apuros
« Respuesta #4 en: 14 de Marzo de 2006, 06:27:00 »
Hola monge_22!

En primer lugar deja el control remoto aparte. Implementalo todo comunicandote por rs232 desde el PC con el PIC y cuando todo te funcione correctamente... entonces te puedes meter con el control remoto (si no te divides el proytecto te vas a volver loco).

Con esto tendrás para divertirte un rato:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4679539


Un saludo desde Alicante.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Estudiante en apuros
« Respuesta #5 en: 14 de Marzo de 2006, 08:03:00 »
Escrito originalmente por monge_22
Gracias maunix.
Tenia pensado empezar con el mando, pero con esto que me has dicho, voy a empezar con el ordenador.
Voy a utilizar el pic 16FXXX, todabia no se cual va a ser el especifico, yo creo que cualquiera me valdria, no?, solo utilizo un puerto entero para la salida (control del motor) y otro puerto (1 pin entrada serie, 1pin salida serie, 1 pin para el mando.).



En principio los pics entre sí son "similares", no idénticos.  Tienen diferencias.

Escrito originalmente por monge_22

Para programar el puerto serie en c++ tengo el siguiente prototipo el cual se hace eco, que te parece?

Codigo:

#define _16fxxx
#include "pic16fxxx.h"
#include "sci.h"


void main(void)
{
  unigned char c;
  TRISB = 0xFF; //configuro el puerto B como entrada
   sci_conf();
   for( ; ; )
    c = sci_read(); //llega el dato del pc
................
...............

sci_write(c);//envia de vuelta el caracter
}



este es como lo principal para la comunicacion le tendria que meter muchisimas cosas, pero para empezar, crees que voy bien encaminado????



Para los pics no conozco ningún compilador en C++, pensé que te referías a la parte de la PC.  Para microcontroladores no es frecuente y hasta innecesaria la programación orientada a objetos por eso se usa el C (o algunos engendros que suelen llamar C pero que del ANSI C distan bastante).
El puerto B supongo que es porque lo usarás como entrada y estamos hablando de un PIC16F628 o similar.  Otros pics tienen el puerto serie ubicado en el puerto C.  En este sentido te puedes dar cuenta que si bien los pics son similares, no son idénticos.

No conozco justo el compirador del que posteas el código, pero por lo que alcanzo a interpretar lees y envias y eso es lo que hace un software ECO así que si tu hardware con max232 está bien armado no tendrás problemas.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #6 en: 14 de Marzo de 2006, 11:43:00 »
Gracias por la aclaracion y por la pagina donde viene la conexion del pic con el pc. Voy a usar el pic16F628. con hardware max232.
La siguiente duda que se me plantea es si hacer primero el programa del pic, o hacer en visual basic el interface grafico para controlar el motor, dado que si hago el pic primero no se como le llegan los datos (por ejemplo si le pulso el boton de izquierda) no se como le llega ese dato al pic.
 

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Estudiante en apuros
« Respuesta #7 en: 14 de Marzo de 2006, 17:06:00 »
Escrito originalmente por monge_22
Gracias por la aclaracion y por la pagina donde viene la conexion del pic con el pc. Voy a usar el pic16F628. con hardware max232.
La siguiente duda que se me plantea es si hacer primero el programa del pic, o hacer en visual basic el interface grafico para controlar el motor, dado que si hago el pic primero no se como le llegan los datos (por ejemplo si le pulso el boton de izquierda) no se como le llega ese dato al pic.
 


Antes que hacer toda la interfaz bonita y todo ese tema, te aconsejo resolver la comunicación del PIC.  Una vez logrado esto,  el resto sería más simple y al menos mas predecible en tiempo ya que si eres novato en PIC tal vez te pueda llevar mucho tiempo el software lidiando con  cosas simples.  Pero si tienes mas exp en VBasic eso te permitirá que si lo dejas para lo ultimo podras avanzar rapido ya sabiendo que el pic anda bien.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #8 en: 20 de Marzo de 2006, 02:50:00 »
hola a todos otra vez y gracias por los ultimos consejos.
He estado estos dias programando el pic y he conseguido sacar el siguiente programa. Lo he depurado y le he quitado los errores, lo que pasa que todabia no me han mandado el pic y no se si hace exactamente lo que quiero.

#define(_PCB_)
#include <16F628.h>
#fuses NOLVP, NOWDT, HS, NOPROTECT
#use delay(clock = 20000000)
#use rs232(baud=9600, xmit=PIN_B2, rcv=PIN_B1)
#include<input.c>
#include<stdlib.h>
#include<stdio.h>
#BYTE port_a = 6
#BYTE port_b = 6

drive_stepper(char dir, int steps)
{
int i;
double position;
for(i = 0; i<steps; i++)
   {
   set_tris_a(0x0F);
   
   //configuracion del puerto a para que saque la secuencia del motor//
   
   if(position == 10100000)
      {
      if(dir = "R")
         port_a = 10010000;
      else
         port_a = 01100000;
      }  
         
   else if(position == 01100000)
      {
      if(dir = "R")
         port_a = 10100000;
      else
         port_a = 01010000;
      }
   else if(position == 10010000)
      {
      if(dir = "R")
         port_a = 01010000;
      else
         port_a = 10100000;
      }
   else
         {
      if(dir = "R")
         port_a = 01100000;
      else
         port_a = 10010000;
         }
      }          
   position = port_a;
}



main()
{
char dir;
int steps, i;
double position ;
set_tris_b(0x04);//PUERTO B LISTO PARA TRANSMISION/
while (True)
   {
   printf("
Direcction (F, R):"Giño;
   dir = getc();
   putc(dir);
   printf("
Steps :"Giño;
   steps = gethex();
   drive_stepper(dir,steps);  //function
   }
}


Si alguno alguno encuentra algun error en el codigo os pediria que me lo dijerais, que ahora estoy parado esperando a que me manden el pic y la verdad no dispongo de mucho tiempo.
Muchas gracias anticipadas.


Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Estudiante en apuros
« Respuesta #9 en: 20 de Marzo de 2006, 05:30:00 »
Al parecer está ok y no debieras tener problema.
Ahora bien, qué tipo de datos es double en el compilador que usas?
Lo usaste para position y es una variable de 1 byte dentro de la función drive_stepper




- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Estudiante en apuros
« Respuesta #10 en: 20 de Marzo de 2006, 06:36:00 »
Para el control de motores paso a paso, tanto unipolares como bipolares, esta web te puede ser de ayuda:

http://www.x-robotics.com/motorizacion.htm#MOTORES%20PaP

Suerte!
Si juegas contra el mejor, pierdes como los demás.

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #11 en: 20 de Marzo de 2006, 10:07:00 »
Gracias por miraros el programa.
Lo que intento hacer en position es meter en los 4 bits altos del puerto b para controlar el motor y los 4 bits bajos los dejo a cero ya que no los uso. Lo he puesto double por que no sabia si un int me iva a valer, pero pensandolo bien yo creo que si que me vale.
Una duda que me surge es el reloj interno que lleva el pic, el pic que tengo lleva reloj y lo declaro #use delay(clock = 20000000) con esto solo me vale no?, ya no deberia usar crystal.
Un Saludo!!!

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #12 en: 20 de Marzo de 2006, 10:07:00 »
Gracias por miraros el programa.
Lo que intento hacer en position es meter en los 4 bits altos del puerto b para controlar el motor y los 4 bits bajos los dejo a cero ya que no los uso. Lo he puesto double por que no sabia si un int me iva a valer, pero pensandolo bien yo creo que si que me vale.
Una duda que me surge es el reloj interno que lleva el pic, el pic que tengo lleva reloj y lo declaro #use delay(clock = 20000000) con esto solo me vale no?, ya no deberia usar crystal.
Un Saludo!!!

adan877

  • Visitante
RE: Estudiante en apuros
« Respuesta #13 en: 20 de Marzo de 2006, 13:22:00 »
Lo q has debido hacer desde un principio es controlar el motor paso a paso ya q es la esencia de tu proyecto. Utiliza un driver L293 ya q estos steppers consumen bastante corriente. Estos motores se controlan mendiante un codigo q depende del numero de bobinas(cables) que tenga el motor. La idea es ir activando una bobina a la vez hasta completar un paso (de ahi el nombre). LA comunicacion serial  la puedes hacer con un 16f876 o 16f877 que ya traen la rutina hecha,lo unico q debes hacer es activar unos bits de unos registros inetrnos del puerto USART del micro. Para lo del control remoto utiliza unos diodos infrarrojos (emisor y receptor) que es lo mas sencillo de montar, solo requieren una polarizacion y ya, luego t mando los circuitos. De verdad con un poco de dedicacion es sencillo el proyecto.

Desconectado monge_22

  • PIC10
  • *
  • Mensajes: 17
RE: Estudiante en apuros
« Respuesta #14 en: 21 de Marzo de 2006, 04:44:00 »
Hola
Si el funcionamiento de los motores, es lo primero que me estudie antes de empezar el proyecto, el driver que iva a usar es el ULN2803. Lo que es la comunicacion del pic con el motor mas o menos la tengo controlada, la secuencia que tengo es para el motor que voy a usar.
El problema me surge con la comunicacion serie y el control remoto. Tenia pensado usar el pic 16F628, que tiene dos pines (el 7 y 8) RX y TX (usart asynchronous receive y usart asynchronous transmit) que supongo que sera lo mismo que lo que tu me quieres decir con los dos pic que me decias no?
Te estaria muy agradecido si me mandaras los circuitos, ya que lo del control remoto si que estoy muy perdido y ya tendria por donde empezar.
No me cansare de daros las gracias, por cada mensaje que me mandeis, cada uno me ayuda a solucionar o mejorar parte de  mi proyecto.
Un saludo