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

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

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: divisiones CCS
« Respuesta #15 en: 22 de Noviembre de 2004, 02:23:00 »
No se no se.

Lo primero, es un 12F675 con 1024B de flash por lo que no puedo realizar muchas operaciones en Float y no puedo hacer printf Ardiendo
Por eso estoy mirando los resultados con un watch.

T2 siempre será mas grande q T1, por lo que T1/T2 será 0-1 puedo hacer esa division en float y luego multiplico por 100 y la paso a int ?

El problema es que hago la división en Float y el valor que obtengo no es el esperado por lo que estoy desconfiando de todo ahora mismoHelado
- T0ni0 -
30RCF112

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: divisiones CCS
« Respuesta #16 en: 22 de Noviembre de 2004, 02:37:00 »
Bueno, y aunque debería ser igual, ¿porqué no te olvidas de la propiedad conmutativa y realizas primero la multiplicación por 100 y luego la división?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: divisiones CCS
« Respuesta #17 en: 22 de Noviembre de 2004, 04:40:00 »
Mira a ver si te vale esto, por lo menos caber, cabe:

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 n,t1=33,t2=56;
   long n,t1,t2;
   char cadena[20];
    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=(10000*t1)/t2;
       printf("n=%lu ",n);
      sprintf(cadena,"%lu",n);

       printf("n=0.%s",&cadena[0]);
      delay_ms(1000);
//********************************************************* */
    }
}


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: divisiones CCS
« Respuesta #18 en: 22 de Noviembre de 2004, 04:58:00 »
uff, no había visto nunca el sprintf, pero intuyo su potencia. ¡No me digas que formatea los datos como el printf y los vuelca sobre un string!.
Gracias maestro.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: divisiones CCS
« Respuesta #19 en: 27 de Noviembre de 2004, 12:11:00 »
Tonio ¿lograste salir del atolladero?

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: divisiones CCS
« Respuesta #20 en: 29 de Noviembre de 2004, 03:41:00 »
Aunque aún me falta una parte del proyecto, he podido realizar la división haciendo Float y después paso a long int para interpretarlo.

Codigo:

   t1=t1*32000;
   t2=t2*2;
   t1=t1/t2;
   n=t1;



ahora podré comparar valores con trankilidadPayaso
- T0ni0 -
30RCF112