Autor Tema: Itoa y atoi en ccs  (Leído 22371 veces)

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

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Itoa y atoi en ccs
« en: 09 de Enero de 2006, 06:57:00 »
no se porque pero no funciona como debiera la funciona atoi e itoa en CCS, a menos que sea un fallo mio, que es lo mas logico

Segun la ayuda de CCS deberia ser asi
#inlcude<stdlib.h>
 int32 x=1234;
char string[5];
itoa(x,10, string);

// string es ahora “1234”


Si se incluye esto exactamente asi en un programa no me lo compila.

Bien yo use la siguiente rutina asi

#include <stdlib.h>

char string[10];
int x= 1234;
int uni, dec,cen;

string=itoa(x,10); // esta linea me da error al compilar asi que la escribi asi
itoa(x,10,string); // asi la compila


uni = atoi(string[0]);
dec = atoi(string[1]);
cen = atoi(string[2]);

segun entiendo yo UNI deberia ser 3
dec deberia ser 2
y cen deberia ser 1

LA idea es para mandar estos caracteres a unos displays de 7 seg despues de la conversion a su codigo correspondiente, pero antes descomponer el entero o el float en sus digitos simples


¿me podeis ayudar? ¿en que me equivoco?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #1 en: 09 de Enero de 2006, 07:22:00 »
Que raro que no te funcione lo de arriba, ya que es el ejemplo que aparece en el compilador.

Yo creo que uni = atoi(string[0]) debebiera de dar el 1 y no el 3, etc para los demás.

Un saludo

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #2 en: 09 de Enero de 2006, 07:32:00 »
Ahora que lo veo, tienes puesto:

int x= 1234;

Tendría que ser int16

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Itoa y atoi en ccs
« Respuesta #3 en: 09 de Enero de 2006, 07:33:00 »
SI es asi, pero es al escribir este ejemplo usaba int32
Pero por lo demas pasa lo que os indico

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #4 en: 09 de Enero de 2006, 07:44:00 »
Acabo de compilar lo de arriba y sí funciona. ¿?

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #5 en: 09 de Enero de 2006, 07:56:00 »
Realmente una vez tienes la cadena "1234" el paso a entero de cada caracter individual lo podrías quitar.

Tan solo tendrías que hacer:

for (n=0;n<4;n++)

{

if (cadena[n]=="0")   output_b 0x3F;    //El 0

etc

Un saludo

PD. También se podría hacer con sprintf

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Itoa y atoi en ccs
« Respuesta #6 en: 09 de Enero de 2006, 10:17:00 »
Sera mi compilador?
Probare otra version
Gracias ya te pego todo y el proteus si no funciona

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Itoa y atoi en ccs
« Respuesta #7 en: 09 de Enero de 2006, 10:19:00 »
Sera mi compilador?
Probare otra version
Gracias ya te pego todo y el proteus si no funciona

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: Itoa y atoi en ccs
« Respuesta #8 en: 09 de Enero de 2006, 11:18:00 »
Hola, yo tengo la versión 3.221 y en la ayuda tan solo aparece atoi().

¿Que versiones utilizais?


1saludo RollEyes
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #9 en: 09 de Enero de 2006, 11:25:00 »
La 3.241

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #10 en: 09 de Enero de 2006, 12:32:00 »
Esto:

uni = atoi(string[0]);
dec = atoi(string[1]);
cen = atoi(string[2]);

no va a funcionar, ya que debes declarar cada elemento de la matriz en atoi como un puntero. Te lo digo por si lo sigues usando.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Itoa y atoi en ccs
« Respuesta #11 en: 09 de Enero de 2006, 13:14:00 »
Comprendo, deberan ser punteros distintos, uno para cada digito. Es asi?
Tendria que declarar varios int, como
int unidades, decenas, centenas etc

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Itoa y atoi en ccs
« Respuesta #12 en: 09 de Enero de 2006, 13:25:00 »
Eso es. Pruebalo y si no te sale te digo como lo haría yo.

Desconectado El_Coach

  • PIC12
  • **
  • Mensajes: 79
RE: Itoa y atoi en ccs
« Respuesta #13 en: 10 de Enero de 2006, 03:24:00 »
Ok, desconocía de la existencia de estas funciones.
Está bien tenerlas en cuenta.

Suerte Algec.


1saludoSonrisa
"Hazlo o no lo hagas, pero nunca lo intentes"

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
RE: Itoa y atoi en ccs
« Respuesta #14 en: 10 de Enero de 2006, 06:11:00 »
A ver, las conocia del C convencional, y pense usarlas para hacer lo que quiero.
LA idea es haxcer una funcion que sirva para excitar un display de 7 seg de los digitos que queramos, del tipo

Visualizar_display(float valor,char  numero de digitos)

el problema me surge al descomponer el float en los distintos digitos para visualizarlos

Esta funciona servira para el numero de digitos del display que usemos pasandole el parametro correspondiente.
ME gusta hacer funciones estandar, por lo que incluso se le puede pasar el parametro de si el display es de anodo comun o de catodo comun.
Tengo hecho toda la funcion y va bien con un display y un contador hasta de 8 digitos, pero asi es mas facil ya que solo visualizo el conteo que son enteros int32

el problema surge al pasarle un valor float y tenerlo que descomponer en sus respectivos enteros decenas etc + el punto decimal


a ver a quien se le ocurre la forma de convertir en char cada unidad, decena centena etc ya que uso la siguiente formula para visualizar


uso dos puertos, b y d.
el B saca el dato a visualizar con una conversion del tipo

char dato[10]={valor hex del cero, valor hex del 1.......};

por lo que lo envio a el puerto B con

output_b(dato[valor entero]);

y el puerto D hace el barrido de excitacion de el display correspondiente a ese dato y asi sucesivamente



el problema repito es al tener que pasar del float a valor entero del display correspondiente


seria un bucle asi

for(x=0; x<numero de digitos;x++){
output_b(dato[valor entero]);
output_d(seleccion de display en hex
  • );
    delay_ms(1)ç



    esto funciona bien pero descomponer por ejemplo


    134.45   en
    int unidades- 5;
    int decenas-3......y asi para hacer

     output_b(dato[valor de unidades]);

    no me funciona


    a ver si alguien sabria como hacerlo porque con itoa y atoi no me funciona


 

anything