Autor Tema: Microcursillo en C  (Leído 178988 veces)

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

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Microcursillo en C
« Respuesta #90 en: 28 de Agosto de 2004, 08:02:00 »
Nocturno ¿cómo es eso que no puedes calcular la longitud de la cadena desde la función?
¿te da error al compilar?
¿te la calcula mal?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Microcursillo en C
« Respuesta #91 en: 28 de Agosto de 2004, 09:53:00 »
Pues no me funcionaba, no sé si era porque estaba pasando mal los parámetros string a la función, o si la razón radicaba en otro sitio. El caso es que el amigo Oshow me pasó por privado un ejemplo que sí funciona, y ya lo he arreglado, con el strlen dentro de la función.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Microcursillo en C
« Respuesta #92 en: 28 de Agosto de 2004, 09:55:00 »
Escrito originalmente por MGLSOFT
En la pagina de Angulo encontraran los ejemplos en C, los mismos que hay en assembler...


Marcos, ¿cuál es la página de Angulo?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Microcursillo en C
« Respuesta #93 en: 29 de Agosto de 2004, 02:34:00 »
He estado desarrollando una miniaplicación para leer los valores PWM de un acelerómetro, es un ADXL210E.
Ya consigo leerlos, y además veo cómo varían según la inclinación que le dé, pero hay una pijotada que no me sale y me gustaría.

Se trata de formatear el resultado de salida, que es un float, de manera que me muestre un determinado nº de decimales.

En el código que adjunto ya consigo que calcule sólo los decimales que yo quiero, pero sin embargo, al representarlos en el LCD me sigue mostrando ceros a partir del último decimal, con lo que no me deja acabar con el símbolo del %.

Echadle un vistazo, masters del universo, y decidme algo, please:

Codigo:
#include <16F877A.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT
#define use_portb_lcd TRUE
#include "lcd.c"
#include "math.h"


float lee_acelerometro (int Eje, int Decimales) { // Según Eje sea 0 o 1 se lee el pin D0 o D1
                                                   // Decimales indica la resolución del resultado
                                                   // El resultado siempre será un porcentaje
   int32 alto=0, bajo=0, j;
   float Resultado;
   int i;
   for (i=0;i<10;++i) {                            // se lee 10 veces, para evitar márgenes de error (se puede modificar)
                                                   // si es necesaria mayor frecuencia
      if (Eje) {
            while( input(PIN_D0));                 // esperamos a que baje la señal de entrada
            while( !input(PIN_D0));                // esperamos a que suba la señal de entrada
            while( input(PIN_D0)) {                // mientras esté arriba vamos contando en alto
                        alto++;
               } ;
            while( !input(PIN_D0)) {               // y mientras esté abajo vamos contando en bajo
                        bajo++;
               };
      } else {
            while( input(PIN_D1) );  
            while( !input(PIN_D1) );  
            while( input(PIN_D1)  ) {
                        alto++;
               } ;
            while( !input(PIN_D1) ) {
                        bajo++;
               };
      };
     
   };

   Resultado = (((float)alto/((float)alto+(float)bajo))-0.43)*10000/9;   // el resultado es alto/(alto+bajo),
                                       // las constantes son ajustes de escala y calibración del acelerómetro
   Resultado = floor(Resultado*pow(10,Decimales))/pow(10,Decimales); // Formateamos el resultado con nº decimales                                
   return (Resultado); // no he podido hacer toda la operación aquí porque me decía "Expression too complex"
}

void main()
   {

   lcd_init();
   output_high (PIN_B0);      // es un led que se enciende al arrancar, y me sirve para señalar si ha habido un reset
   delay_ms (300);         // lo mantengo encendido 3 décimas de segundo
   output_low (PIN_B0);         // y lo apago

   while (TRUE) {
         printf (lcd_putc,"fLectura: %f%%",lee_acelerometro(0,2)); // muestra el resultado de la lectura del eje 0
         lcd_gotoxy (1,2);
         printf (lcd_putc,"Lectura: %f%%",lee_acelerometro(1,2));   // muestra el resultado de la lectura del eje 1
         output_high (PIN_B0);
         delay_ms (100);                                            // parpadea para saber que ha pasado por el bucle
         output_low (PIN_B0);
         };
   }

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Microcursillo en C
« Respuesta #94 en: 29 de Agosto de 2004, 03:57:00 »
Para concretar el número de decimales a mostrar de un flotante creo que sería una cosa así:
printf(lcd_putc,"%m.nf",variable)
...siendo m el número de dígitos enteros a mostrar y n el número de decimales.
Si quieres representar tb el carácter "%" tendrás que hacerlo aparte usando
lcd_putc("%")

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Microcursillo en C
« Respuesta #95 en: 29 de Agosto de 2004, 05:57:00 »
ups...
Tomo nota

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Microcursillo en C
« Respuesta #96 en: 29 de Agosto de 2004, 10:48:00 »
Ahondando en mi proyecto con el acelerómetro, he leído en la ayuda de CCS algo sobre la implementación de PWM en CCS. He visto que el módulo CCP se puede configurar para PWM.

Mi pregunta es: ¿sólo puede utilizarse para generar un pulso PWM saliente o también es posible usarlo para interpretar uno entrante?

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Microcursillo en C
« Respuesta #97 en: 31 de Agosto de 2004, 10:11:00 »
Ni idea sobre lo del pwm nocturno, lo siento...

Volviendo al tema anterior de especificadores de formato, sabéis si existe alguno para ajustar a la derecha, es decir para que los numeros menores de 10 se representen como 01, 02,03,04 en lugar de 0,1,2,3

No se si cogeis la idea....

Saludos.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Microcursillo en C
« Respuesta #98 en: 31 de Agosto de 2004, 10:23:00 »
%0n coloca n ceros a la izquierda,eso si,no hace distinción entre números mayores o menores que 10

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Microcursillo en C
« Respuesta #99 en: 31 de Agosto de 2004, 10:27:00 »
Gracias Modulay, creo que con eso ya me arreglo, el detectar que sea menor de 10 esta tirao....

Gracias.

Saludos.

Desconectado Modulay

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 2651
RE: Microcursillo en C
« Respuesta #100 en: 31 de Agosto de 2004, 10:33:00 »
He probado en proteus y no hace falta ni eso:
-> %02
Colocando esa coletilla ya te discierne el solito y te lo representa como estás buscando,con el 0 delante si el numerito es menor que 10.
Saludos

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Microcursillo en C
« Respuesta #101 en: 31 de Agosto de 2004, 10:38:00 »
Vaya, mas fácil incluso....

Gracias.

Saludos.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
RE: Microcursillo en C
« Respuesta #102 en: 01 de Septiembre de 2004, 06:37:00 »
Escrito originalmente por nocturno66
Escrito originalmente por MGLSOFT
En la pagina de Angulo encontraran los ejemplos en C, los mismos que hay en assembler...


Marcos, ¿cuál es la página de Angulo?




Perdon:
Confundi estos ejemplos que tengo en C y assembler con los de Angulo, crei que era lo mismo.
Estos estan hechos para la Micropic Trainer, pero son facilmente adaptables para otro entrenador...
Si quieres los pongo, pero estan en http://www.microcontroladores.com

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
RE: Microcursillo en C
« Respuesta #103 en: 02 de Septiembre de 2004, 02:12:00 »
No te preocupes Marcos, ya los descargo de esa página. No la conocía y tiene buena pinta.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Microcursillo en C
« Respuesta #104 en: 09 de Septiembre de 2004, 04:09:00 »
 Por que motivo me llevo tan mal con los strings? que les he hecho?


Yo defino :

char st[MAXB];


luego en el codigo quiero cargar una frase en esa variable:


*st="HOLA";

i nada, ya he probado varias posibilidades, como puedo cargar a st strings dentro del programa?
- T0ni0 -
30RCF112