Autor Tema: necesito interrupciones muy pequeñas  (Leído 3944 veces)

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

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
necesito interrupciones muy pequeñas
« 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???
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: necesito interrupciones muy pequeñas
« Respuesta #1 en: 06 de Febrero de 2008, 00:48:00 »
especifica lo que pretendes hacer  :mrgreen:

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: necesito interrupciones muy pequeñas
« Respuesta #2 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: necesito interrupciones muy pequeñas
« Respuesta #3 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)

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: necesito interrupciones muy pequeñas
« Respuesta #4 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 931
Re: necesito interrupciones muy pequeñas
« Respuesta #5 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)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: necesito interrupciones muy pequeñas
« Respuesta #6 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
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: necesito interrupciones muy pequeñas
« Respuesta #7 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.

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: necesito interrupciones muy pequeñas
« Respuesta #8 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
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: necesito interrupciones muy pequeñas
« Respuesta #9 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.

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: necesito interrupciones muy pequeñas
« Respuesta #10 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
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: necesito interrupciones muy pequeñas
« Respuesta #11 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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: necesito interrupciones muy pequeñas
« Respuesta #12 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:

« Última modificación: 06 de Febrero de 2008, 16:29:07 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado vasconinicolas

  • PIC16
  • ***
  • Mensajes: 124
Re: necesito interrupciones muy pequeñas
« Respuesta #13 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......
« Última modificación: 08 de Febrero de 2008, 12:09:21 por vasconinicolas »
"No hacen ciencia los países ricos,
Son ricos los países por hacer ciencia"

Desconectado reiniertl

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1187
Re: necesito interrupciones muy pequeñas
« Respuesta #14 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