TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: vasconinicolas en 06 de Febrero de 2008, 01:25:29

Título: necesito interrupciones muy pequeñas
Publicado por: vasconinicolas en 06 de Febrero de 2008, 01:25:29
Hola todos, tengo un proyecto en que necesito hacer una interrupcion cada 0,4 milisegundos porque la tarea asi lo requiere... o sea, cada 400 microsegundos, y me parece que no le dejo mucho tiempo al micro para nada mas... por ejemplo, solo los retardos del LCD son de 2 milisegundos.....
Trabajo con cristal de 20Mhz
A alguien se le ocurre como puedo salir de esto???
Título: Re: necesito interrupciones muy pequeñas
Publicado por: poseidon20 en 06 de Febrero de 2008, 00:48:00
especifica lo que pretendes hacer  :mrgreen:
Título: Re: necesito interrupciones muy pequeñas
Publicado por: vasconinicolas en 06 de Febrero de 2008, 01:17:25
Bueno, lo que necesito es mover un motor paso a paso a una velocidad minima de: un paso cada 26,35 milisegundos y una velocidad maxima de: un paso cada 0,4 milisegundos... ademas de controlar un LCD y un teclado, pero para el caso estoy dispuesta a usar mas de un micro... El tema es que para 20Mhz 0,4 milisegundos sigue siendo un tiempo pequeño segun me parece..... y ahi estoy..... enredado en este lio y no veo una salida.....
Espero haberme explicado un poco mejor..
gracias
Título: Re: necesito interrupciones muy pequeñas
Publicado por: poseidon20 en 06 de Febrero de 2008, 01:25:04
lo que tu quieres es setear a traves de un teclado matricial la velocidad de los pasos del motor, y visualizar ese seteado en el LCD?, si es asi, creo que si puede ser factible, pero si estas dudando, podrias usar la seri 18f de microchip, ya que ellos pueden usar cristales de hasta 40MHz(los que tienen usb inetgrado llegan a 48MHz)
Título: Re: necesito interrupciones muy pequeñas
Publicado por: vasconinicolas en 06 de Febrero de 2008, 01:34:05
Gracias poseidon por el consejo... Te comento, no es que quiera setear la velocidad desde el teclado, quiza lo comente pero para el caso no tiene sentido analizarlo... El problema es que entre interrupcion e interripcion me quedan pocos microsegundos y calculo que no le alcanzaran al programa. Voy a mirar la serie 18... Espero que se programen igual jeje..
Bueno muchas gracias y hasta la proxima...!
Nicolas
Título: Re: necesito interrupciones muy pequeñas
Publicado por: SavageChicken en 06 de Febrero de 2008, 02:10:42
ME parece que la solución con PIC de 20 Mhz, va programar en assembler.

Salud  8)
Título: Re: necesito interrupciones muy pequeñas
Publicado por: RedPic en 06 de Febrero de 2008, 03:19:34
La mayor velocidad en un PIC de la serie 18F la vas a conseguir con los 18F4550 ó 18F2550 configurados con la PLL para correr a 48 Mhz. Quizás por ahí tengas un poco mas de margen de proceso.  :mrgreen:

Consiguiendo 4 Mhz para los 48 Mhz necesarios en los PIC's con USB 2.0 (http://picmania.garcia-cuervo.net/Conceptos.php#USB4Mhz)
Título: Re: necesito interrupciones muy pequeñas
Publicado por: Nocturno en 06 de Febrero de 2008, 07:40:52
Un PIC18F con USB corriendo a 48MHz es capaz de alcanzar los 12MIPS.

A esa velocidad, le da tiempo ejecutar 4800 instrucciones en 400us.

Realmente no lo veo tan crítico. Habrá que probarlo y tener cuidado con la planificación de tiempos, pero no veo problemas en conseguirlo. De hecho, creo que si no dominas assembler y prefieres C, habrá tiempo de sobra para todo.
Título: Re: necesito interrupciones muy pequeñas
Publicado por: vasconinicolas en 06 de Febrero de 2008, 09:25:42
Hola Gente, muchisimas gracias por todos sus consejos.... recien me despierto y anoche antes de dormirme pensé que quizá una manera de trabajar con 20mhz sería tener el programa bien depurado y hacer la menor cantidad de instrucciones para que, entre interrupcion e interrupcion me alcence el tiempo para hacer varias cosas...... tal como dice JCC40 ... Aunque trabajar con los de 40Mhz o 48 no estaría nada mal, el unico problema es mi poca experiencia por lo que no me animo a mandarme de cabeza sobre la linea 18. Que opinan??

Ahora, con respecto a mostrar algunos datos en el LCD a esa velociad (0,4 milisegundos), sería imposible, porque el lcd demara mas en mostrar el dato que el dato en cambiar!!!...  :( PERO... voy a dejar que el dato cambie tranquilamente, ya que esta guardado en una variable dentro del micro, y sólo la voy a sacar al display una vez por segundo y listo.

Gracias Nocturno, RedPic, SavageChicken, JCC y poseidon20
Título: Re: necesito interrupciones muy pequeñas
Publicado por: Nocturno en 06 de Febrero de 2008, 09:41:56
No te preocupes por el LCD y gestiónalo como habitualmente lo hagas. La interrupción saltará cuando le toque robándole tiempo al micro de lo que esté haciendo, que continuará por donde iba al finalizar la interrupción.

Un PIC a 20MHz corre a 5MIPS, lo que te permitirá meter 2000 instrucciones en cada salto.
Título: Re: necesito interrupciones muy pequeñas
Publicado por: jfh900 en 06 de Febrero de 2008, 10:36:05
Yo cogería lo mejor de los dos mundos: programaría en "C" y la interrupción la optimizaría a partir de la generada por el compilador en "C" y la incluiría una vez optimizada en ASM. El tiempo de desarrollo no es muy grande, ya que partes de un ASM que solo tienes que optimizarlo.

Un saludo
Título: Re: necesito interrupciones muy pequeñas
Publicado por: reiniertl en 06 de Febrero de 2008, 12:44:37
Primero que nada, haría la optimización de la ISR más crítica, esa que tiene 400ms, luego me preocuparía por los cristales y micros, aunque no creo que uno a 20MHz te quede muy fresco para esta aplicación. 400us es un tiempo breve.

Sin embargo puedes dedicar un PIC de los pequeñitos (p. ej: PIC12F675) solamente al motor y comunicarlo por I2C o SPI con otro que se encargue del teclado, pantalla y todas esas cosillas. El PIC pequeño haría las veces de driver dedicado, atendiendo solamente la ISR y el manejo del motor, cuando haga falta se comunica con el otro PIC.

Sobre usar los 18 no veo problemas, los PICs son más o menos lo mismo entre la familia 16 y 18,  excepto por los periféricos de una familia y otra y algunas otras yerbas, pero tienen más o menos la misma organización e incluso hay micros compatible pin a pin.

Programar en C no sería el mayor problema, tal como te recomienda Nocturno.

Saludos
Reinier
Título: Re: necesito interrupciones muy pequeñas
Publicado por: RedPic en 06 de Febrero de 2008, 16:22:55
Como dice Reiniertl el paso de los 16 a los 18 no es traumático. De hecho yo comparto mucho código entre ambas familias ya que trabajo usualmente con los 16F628 y 16F88 por un lado y los 18F1320 y la familia de los 18FX550 por otra y las rutinas son todas las mismas, menos pequeños detalles o sobre todo porque en los 18F tienes más de casi cualquier cosa.

Sobre todo si trabajas en C, que para eso lo inventaron, para no tener que rehacer todo cada vez que cambies de micro, y mucho menos si son del mismo fabricante.  Yo tengo programas en uso para el 16F88, para aplicaciones de RS485, que le cambio arriba el include del micro y un par de fuses y lo programo en el 18F1320 sin cambiar una sola línea más de código.

Si por ejemplo usas una sola interrupción externa y tienes la precaución de usar la de B0 te va a valer para el 90% de los PIC's (los 18F tienen además otras dos), si usas un Timer0 en 8 bits en un 16F puedes configurar en los 18F el Timer0 a 8 bits (y tambien a 16) o si usas el Timer1 en los 16F no tienes nada que cambiar para los 18F ... quiero decir que casi todo lo que hagas en un 16F puedes hacerlo exactamente igual en un 18F escribiendo el mismo código,  salvo que el 18F tiene mas posibilidades aún y hacerlo al contrario te va a ser mas complicado sobre todo si usas cosas que los 16F no tienen o no tienen en el mismo sitio. :mrgreen:

Título: Re: necesito interrupciones muy pequeñas
Publicado por: vasconinicolas en 08 de Febrero de 2008, 12:05:05
Hola muchachos, muchas gracias por vuestros consejos.. Me quede pensando el la propuesta que me hace reiniertl pues mi mayor interes es que cada 0.4ms se ingremente un reloj y salte un paso en el motor... Si yo uso un micro para ello solamente, y otro para manejar el teclado y display, creo que podria andar.. pues el driver dedicado atendería las interrupciones de .04ms y en el resto del tiempo se comunicaría con el otro pic. De este modo me permite programar el driver dedicado en asm y las operaciones de teclado, display, relojes y otras yerbas en picbasic (que es lo que yo uso por no saber nada de C)...

Creo que este foro invita a pensar y cuando ya no te sale nada pues el pensamiento de otros te abre el camino......
Agradezco a todos y cada uno de ustedes por su tiempo, paciencia y gran experiencia.....
Los mantendre al tanto pues cuando termine el proyecto lo voy a poner a disposicion para quien lo requiera...
Chau

PD, muy util las explicaciones sobre la familia 18 en relacion a la 16. Gracias porque me voy a meter con estos bichos tambien......
Título: Re: necesito interrupciones muy pequeñas
Publicado por: reiniertl en 15 de Febrero de 2008, 12:29:34
Ahora, mirando esto te comento algo, el TIMER1 o el TIMER2 tiene un modo de trabajo que cuando se produce el desbordamiento genera un pulso que sirve para pedir INT cambiar el estado de un pin del PIC o dar inicio de conversión. Se utiliza precisamente para esas cosas. Así que mira por allí y ve a ver que sacas.

La idea es darle al temporizador la posibilidad de enviar los pulsos al motor él solito sin intervención de nadie, la duración del pulso la controlarías con el módulo de autorecarga del TIMER, y sólo tendrías que habilitar o no el temporizador mediante el programa.

Saludos
Reinier
Título: Re: necesito interrupciones muy pequeñas
Publicado por: Javicho en 15 de Febrero de 2008, 15:28:34
Hola vasconinicolas:

El motor de paso que tienes responde a velocidades de 400uS por paso? es un tiempo muy pequeño como para que las bobinas se energizen adecuadamente y el rotor del motor gire un paso, yo probé con algunos motores de paso y lo máximo que conseguí fue de 2mS por paso, con tiempos mas pequeños ya no giraba, pero bueno tal vez tengas motores de paso de mjor calidad y velocidad.

Javicho.
Título: Re: necesito interrupciones muy pequeñas
Publicado por: Javicho en 15 de Febrero de 2008, 15:51:21
Tal vez si pudieras acoplarle una especie de engranajes al motor seria mejor a fin de que con poca velocidad desde tu pic los engranajes se encarguen de aumentarle la velocidad a la que desees de esta manera te quedaria bastante tiempo de procesamiento.

Javicho.
Título: Re: necesito interrupciones muy pequeñas
Publicado por: poseidon20 en 15 de Febrero de 2008, 20:36:09
por que no usar un driver para controlar el motor, pero por corriente, aca te dejo el link (http://www.todopic.com.ar/foros/index.php?topic=20470.0) para que le des una mirada