Autor Tema: Velocidad división  (Leído 3422 veces)

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

Desconectado edutd

  • PIC10
  • *
  • Mensajes: 27
Velocidad división
« en: 01 de Septiembre de 2006, 06:35:50 »
Hola, estoy utilizando un pic 18F4550 con un cristal de 25 Mhz y tengo un problema de velocidad en la siguiente división:

unsigned char

X,A;
.
.
.
X = 127 ;
A = 1959 / X;

He programado el pic y medido lo que tarda en hacer la división con el osciloscopio y tarda mas de 40 microsegundos, me parece exagerado para una división, ¿hay alguna manera de que tarde menos tiempo?, esq tengo problemas de velocidad.

un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Velocidad división
« Respuesta #1 en: 01 de Septiembre de 2006, 08:35:11 »
Hola, estoy utilizando un pic 18F4550 con un cristal de 25 Mhz y tengo un problema de velocidad en la siguiente división:

unsigned char

X,A;
.
.
.
X = 127 ;
A = 1959 / X;

He programado el pic y medido lo que tarda en hacer la división con el osciloscopio y tarda mas de 40 microsegundos, me parece exagerado para una división, ¿hay alguna manera de que tarde menos tiempo?, esq tengo problemas de velocidad.

un saludo.

No hubiera hecho falta que lo hagas con el osciloscopio, hubiera alcanzado con hacerlo en el simulador.  De todas formas, ¿porqué te parece exagerado?   48Mhz no significa 48Mips...

Además ese micro no tiene rutinas de división por hardware.

Tampoco sé como funciona el compilador que has usado pero si declaras una variable como 'char' , y luego haces una división "int" (usas un valor de 1959). En este punto, algunos compiladores hacen automáticamente lo que se llama "integer promotions", lo que significa que te convierte en tiempo de ejecución todo a integer, hace la división a 16 bits y luego te guarda el resultado en la variable A (con lo que guardaría el resultado en una variable de 8 bits obteniendo solamente la parte menos significativa del resultado).

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 edutd

  • PIC10
  • *
  • Mensajes: 27
Re: Velocidad división
« Respuesta #2 en: 02 de Septiembre de 2006, 08:31:50 »
Gracias por la ayuda, tienes razon hace la división en 16 bits y guarda en A los 8 bits menos significativos, asique me parece que no voy a poder hacerlo mas rapido.

Un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Velocidad división
« Respuesta #3 en: 02 de Septiembre de 2006, 12:34:09 »
Gracias por la ayuda, tienes razon hace la división en 16 bits y guarda en A los 8 bits menos significativos, asique me parece que no voy a poder hacerlo mas rapido.

Un saludo.

Este tipo de limitaciones a veces nos fuerzan a aumentar la velocidad del clock o bien a cambiar el micro.

A veces uno recurre a trucos como "hacer las variables enteras o más pequeñas", trabajando con menos precisión pero de esa forma se ahorra tiempo y para los fines prácticos muchas veces es suficiente.

Todo depende de tu aplicación, estas cosas son las que hacen al diseño de sistemas embebidos tan interesante.

Como sugerencia, si usas mucho los pics con aplicaciones de control en tiempo real, te sugiero que espreses tus operaciones en "ciclos de instrucción", no en tiempo.  Eso te ayuda a que cuando cambies el micro o el reloj puedas darte cuenta rápidamente cuanto demorará una rutina.

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 edutd

  • PIC10
  • *
  • Mensajes: 27
Re: Velocidad división
« Respuesta #4 en: 03 de Septiembre de 2006, 11:05:23 »
Eso es, he "partido es dos" el 1959 de manera que son don char y se reduce practicamente a la mitad en tiempo, esta el problema de que como trabajo con numeros enteros pierdo precision, pero por lo que he probado tampoco es demasiada, puede ser una alternativa.

La otra alternativa es cambiar el reloj, este pic acepta hasta 48 Mhz y yo utilizo uno de 25, seria casi el doble de rapido, se reduciria de 41 a 21,6 microsegundos, ahora que tengo que cambiar todos los calculos del resto del programa...

Por ahora voy a probar cambiando el reloj a ver si es sufuciente, gracias por la ayuda, un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Velocidad división
« Respuesta #5 en: 03 de Septiembre de 2006, 20:24:01 »
Eso es, he "partido es dos" el 1959 de manera que son don char y se reduce practicamente a la mitad en tiempo, esta el problema de que como trabajo con numeros enteros pierdo precision, pero por lo que he probado tampoco es demasiada, puede ser una alternativa.
No te he comprendido, pero separar un número de 16 bits en 2 de 8 bits , para luego hacer la división con cada uno de ellos... no es precisamente matemáticamente correcto... cuidado con eso.

La otra alternativa es cambiar el reloj, este pic acepta hasta 48 Mhz y yo utilizo uno de 25, seria casi el doble de rapido, se reduciria de 41 a 21,6 microsegundos, ahora que tengo que cambiar todos los calculos del resto del programa...

Por ahora voy a probar cambiando el reloj a ver si es sufuciente, gracias por la ayuda, un saludo.

Muy bien, esta forma si sería matemáticamente correcta  :) , luego comentanos cómo te ha ido.
- 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 edutd

  • PIC10
  • *
  • Mensajes: 27
Re: Velocidad división
« Respuesta #6 en: 05 de Septiembre de 2006, 04:52:16 »
Me explique mal, me referia a hacer dos operaciones char, por ejemplo:

X = 127;
A = 240 / X;
A = 8 * A;

Aqui el resultado no es matematicamente exacto, porque 240 * 8 es 1960, ya no divido 1959 entre X, y tambien hay que tener en cuenta que pierdo los decimales en las operaciones porque son valores enteros.

En realidad X es el resultado del convertidor analogico digital, y dependiendo de este valor quiero cambiar el ciclo de trabajo de una señal cuadrada, por eso tendria que ver si aun no siendo del todo exacto me podria valer, aunque prefiero cambiar de reloj que no es una solucion tan chapuza  :).

Un saludo

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Velocidad división
« Respuesta #7 en: 05 de Septiembre de 2006, 08:24:46 »
Me explique mal, me referia a hacer dos operaciones char, por ejemplo:

X = 127;
A = 240 / X;
A = 8 * A;

Aqui el resultado no es matematicamente exacto, porque 240 * 8 es 1960, ya no divido 1959 entre X, y tambien hay que tener en cuenta que pierdo los decimales en las operaciones porque son valores enteros.

En realidad X es el resultado del convertidor analogico digital, y dependiendo de este valor quiero cambiar el ciclo de trabajo de una señal cuadrada, por eso tendria que ver si aun no siendo del todo exacto me podria valer, aunque prefiero cambiar de reloj que no es una solucion tan chapuza  :).

Un saludo

Lo de perder precisión, en la forma que haces el cálculo es una garantía.

Dividir por 127, es casí como dividir por 128, es decir rotar 7 veces a la derecha. 

Con eso solo, como trabajas a 8 bits, solo le haces caso al bit más significativo....  Ten cuidado con eso.
- 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 edutd

  • PIC10
  • *
  • Mensajes: 27
Re: Velocidad división
« Respuesta #8 en: 10 de Septiembre de 2006, 11:26:25 »
Tienes razon, quiero controlar el ciclo de trabajo para que no varie la potencia en una lampara al variar su resistencia, y con operaciones de 8 bits el resultado no es demasiado preciso, cambiar el reloj es la solución, tengo ya uno de 40 Mhz con el que no tendre problemas.

Un saludo.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Velocidad división
« Respuesta #9 en: 10 de Septiembre de 2006, 15:35:28 »
Tienes razon, quiero controlar el ciclo de trabajo para que no varie la potencia en una lampara al variar su resistencia, y con operaciones de 8 bits el resultado no es demasiado preciso, cambiar el reloj es la solución, tengo ya uno de 40 Mhz con el que no tendre problemas.

Un saludo.

Muy bien, ojalá te salga todo muy bien y ya estaremos aquí cuando quieras comentarnos cómo t  ha ido.
- 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)