Autor Tema: divisiones CCS  (Leído 4550 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
divisiones CCS
« en: 19 de Noviembre de 2004, 11:21:00 »
Hola a todos, tengo dos numeros el rango de los cuales es de 0 a 1000. Estoy utilizando CCS y no consigo realizar una division entre ellos. He probado int, unsigned int float etc... y nada al dividir me da 0

   n=t1/t2;


int=int/int;

long int=long int/long int;

como podria realizar tal operación con garantias?RollEyes
- T0ni0 -
30RCF112

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: divisiones CCS
« Respuesta #1 en: 19 de Noviembre de 2004, 11:33:00 »
   
     Quieres dividir 2 enteros?? A que te refieres con eso de las garantias??

     Un saludo.


Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: divisiones CCS
« Respuesta #2 en: 19 de Noviembre de 2004, 11:46:00 »
Con eso que has puesto no entiendo lo que quieres hacer
"n" la has declarado como float?

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: divisiones CCS
« Respuesta #3 en: 19 de Noviembre de 2004, 11:54:00 »
Lo que quiero hacer es lo siguiente:

(T1/T2)-0.5

Garantias?  pues que me de el valor correcto T1/T2 es un duty cicle por lo que sera un tanto por ciento
por lo tanto lo que estoy haciendo es esto:

(100T1-50T2)/t2 y listo ya tengo %

ahora a probarlo si se les ocurre alguna cosa ...
- T0ni0 -
30RCF112

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: divisiones CCS
« Respuesta #4 en: 19 de Noviembre de 2004, 12:26:00 »
Debe ser alguna tontería de declaración de variables ... quizá viendo el programa.

Un saludo

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: divisiones CCS
« Respuesta #5 en: 19 de Noviembre de 2004, 12:34:00 »
   
   Y por que no pones T1 y T2 como float y ya esta?? Si trabajas como enteras y las divides, no vas a tener decimales y 980/300 sera 3, no 3 y pico.

   

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: divisiones CCS
« Respuesta #6 en: 19 de Noviembre de 2004, 13:04:00 »
Pues la teoria es muy facil y bonita pero en la practica... ni float ni na ya creo q he probado todas las posibilidades

Codigo:
      #include <12F675.h>
   #use delay(clock=4000000,RESTART_WDT)
   #fuses NOWDT,INTRC_IO, CPD, PROTECT, MCLR, NOPUT, NOBROWNOUT
   #use rs232(baud=9600,parity=N,xmit=PIN_A2,bits=8)

void main()
{

   long int t1,t2;
   float n;
    setup_counters(RTCC_INTERNAL,RTCC_DIV_32);
    disable_interrupts(GLOBAL);

   while (TRUE) {

//captura X*************************************************+
   if (input(PIN_A5))
   {
   while (input(PIN_A5)){}   // espero que baixi nivell
   }

   while (!input(PIN_A5)){}   // espero que pugi nivell

   set_rtcc(0x00);         //activo timer
   while (input(PIN_A5)){}
   t1=get_rtcc();
   t1=t1*32;
   set_rtcc(0x00);         //activo timer
   while (!input(PIN_A5)){}
   t2=get_rtcc();
   t2=t2*32;
   t2=t2+t1;

   n=t1/t2;
   n=n-0.5;

 //   printf("Valor:%f",n);
   delay_ms(1000);
//********************************************************* */
    }
}




- T0ni0 -
30RCF112

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: divisiones CCS
« Respuesta #7 en: 19 de Noviembre de 2004, 13:39:00 »
Si t2 es siempre mayor que t1 el resultado de la división va a ser siempre 0.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: divisiones CCS
« Respuesta #8 en: 19 de Noviembre de 2004, 14:07:00 »
Bien visto,Pocher,pero fíjate que al ser n de tipo flotante la división será siempre menor que 1 pero no tiene pq ser 0.
Eso sí,Tonio,si después le restas 0.5 puedes casi asegurarte el 0.

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: divisiones CCS
« Respuesta #9 en: 19 de Noviembre de 2004, 14:53:00 »

   Claro, es que es eso. Para qué usar int teniendo float?? Ten en cuenta que es lo que bien comenta pocher, t2>t1 -> 0. No va a ser 0,xxxx ...
 
    Si finalmente lo quedas así, deberías poner una rutina para que compruebe que t2 es mayor que t1 y avisar o actuar en consecuencia ... siempre que quieras o lo necesites así, claro.
 
   

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: divisiones CCS
« Respuesta #10 en: 19 de Noviembre de 2004, 17:04:00 »
Os parecerá una tontería, pero para depurarlo yo lo que haría sería sacar todos los pasos por el printf, así:

   
Codigo:
printf("%u %u %f %f %f",t1,t2,t1/t2,t1/t2-0.5,n);


con lo que salga, ante la duda cogemos la calculadora y no queda más remedio que detectar el problema, aunque muy probablemente sea lo que están comentando los colegas, t1<t2 y encima restas medio punto...

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: divisiones CCS
« Respuesta #11 en: 19 de Noviembre de 2004, 17:08:00 »

   Pero esi es que es éso.  Si son número parecidos, la división da como resultado 1, ya que estás dividiendo enteros. Y luego le quitas la mitad .... No hay más vueltas que darle.  O escalas la variable que está en el numerador (para que no dé próximo a 1), o cambias a decimales (float). Otra cosa no se puede hacer (creo yo).   RollEyes


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: divisiones CCS
« Respuesta #12 en: 19 de Noviembre de 2004, 17:11:00 »
Uff, vaya como te ha salido el texto, rferrero Giño

Parece que tuvieras el mismo problema que Pocher con el Proteus y el I2C...Sonrisa Gigante

Desconectado rferrero

  • PIC16
  • ***
  • Mensajes: 113
RE: divisiones CCS
« Respuesta #13 en: 19 de Noviembre de 2004, 17:20:00 »

   Ostras! Es verdad. Perdonen ustedes. He instalado el mozilla firefox y he quitado el explorer.  http://seguridad.internautas.org/index.php?op=1&id=390
 
    Parece ser que no se lleva muy bien con las tildes ... jejeje ...  Muchas risas

    El caso es que no hay cera que la que arde en referencia al tema anterior. O se pasa a decimales (float), o escala el numerador.

    Un saludo.
 

Desconectado pacalaconcurso

  • PIC24F
  • *****
  • Mensajes: 718
RE: divisiones CCS
« Respuesta #14 en: 20 de Noviembre de 2004, 15:56:00 »
cuidado con los %u y %f con la 3.211 tiene un fallo como un camiondesquiciado
ya me calente el coco un buen ratoNoche

saludos


 

anything