conversion analoga a digital

buenas noches la inquietud que tengo es que estoy utilizando el mplab con mcc18 para realizar una practica de conversión análoga digital en C y el resultado se debe mostrar en un lcd de 16x2 el problema que tengo es que trate de convertir el resultado mostrado por el adc en un string para visualizarlo en el lcd pero me genera este error y no se porque
la libreria que utilizo para pasar a estring es la stdlib.h
la funcion ultoa (long , estring )
y el errror es
C:\proyectos pic\proyect p452\adc.c:82:Warning [2054] suspicious pointer conversion

como le hago
gracias.
 
fryck_80 dijo:
buenas noches la inquietud que tengo es que estoy utilizando el mplab con mcc18 para realizar una practica de conversión análoga digital en C y el resultado se debe mostrar en un lcd de 16x2 el problema que tengo es que trate de convertir el resultado mostrado por el adc en un string para visualizarlo en el lcd pero me genera este error y no se porque
la libreria que utilizo para pasar a estring es la stdlib.h
la funcion ultoa (long , estring )
y el errror es
C:\proyectos pic\proyect p452\adc.c:82:Warning [2054] suspicious pointer conversion

como le hago
gracias.

Una pregunta, porque usas ultoa?, no sería más adecuado usar itoa?
Por otra parte según recuerdo debes mandar un puntero al string y no el string mismo. la función tomará ese puntero y comenzará a rellenar las direcciones de memoria apartir de la posición de memoria a la que apunta el puntero con los caracteres ascii
 
buenas tardes maunix estuve intentando con itoa y con ultoa pero me daban lo mismo
el mismo error, no me havia fijado que era un puntero y no el mismo string.
muy agradecido por su tan pronta respuesta
 
fryck_80 dijo:
buenas tardes maunix estuve intentando con itoa y con ultoa pero me daban lo mismo el mismo error, no me havia fijado que era un puntero y no el mismo string.
muy agradecido por su tan pronta respuesta

Lo del puntero es el uso normal de este tipo de funciones.

Lo de itoa o ultoa es dependiente de qué compilador estes usando y de cuantos btes definan a un integer. El C18 por ejemplo define un int como una variable de 16bits, siendo que el CCS de 8bits, de ahí mi aclaración. El tema era que si arreglabas lo del puntero pero la función estaba mal elegida entonces también podría darse el caso de que obtengas un resultado diferente

Saludos
 
porfavor cual seria la forma adecuada para sacar este valor del ADC por la lcd si utilizo el compilador de mplab mcc18 de microship con el pic 18f452

gracias y disculpe la ignorancia pero lo e intentado bastante y me sigue el warnig
 
fryck_80 dijo:
porfavor cual seria la forma adecuada para sacar este valor del ADC por la lcd si utilizo el compilador de mplab mcc18 de microship con el pic 18f452

gracias y disculpe la ignorancia pero lo e intentado bastante y me sigue el warnig

Sube el código y lo analizamos juntos.
 
Buenas trades es algo muy sensillo lo que hace solamunte chequea el canal 0 del adc y me muestra el resultado en el lcd bueno eso deveria hacer y me maneja el pwm con relacion a la entrada el pwm si esta tomando valores pero el lcd solamunte escribe convercion adc simulado en proteus
gracias por su tiempo


#include <p18f452.h>
#include <adc.h>
#include <delays.h>
#include <stdlib.h>
#include <pwm.h>
#include <timers.h>
#include "mi_lcd.h"
#include "MIS PRAGMA.H"


/*************FUNCION INICIO LCD*************/


void inicio_lcd(void)
{
//INCIALIZACION DEL LCD
control_lcd(funtion_set_3);
control_lcd(Entry_2);
control_lcd(disp_control_0);
control_lcd(Home);
control_lcd(Clear);
}

/********************************************/
void Conf_ADC(void)
{
OpenADC(ADC_FOSC_RC & ADC_RIGHT_JUST & ADC_8ANA_0REF, ADC_INT_OFF);
SetChanADC(ADC_CH0);
}

/********************************************/
int LeeADC(void)
{
Delay10TCYx(2); // Delay for 50TCY
// Realizo la conversion del canal uno su valor
ConvertADC(); // empiezo conversion
while( BusyADC() ); // espero el resultado
return ReadADC(); //retorno el resultado
}

/*****************************************/
/*******************************************/
/* Configuracion de la PWM */

void Init_Pwm(int periodo)
{ // Configuracion de los pines
TRISCbits.TRISC2 = 0; //RC2 como salida => Enable PWM1
PORTCbits.RC2=0;
OpenTimer2(T2_POST_1_1); // Configuracion del timer2, para las PWM
OpenPWM1(0xFF);
SetDCPWM1(periodo); // Configuracion de inicio de los motores
}


/*****************FUNCION PRINCIPAL****************/

void main (void)
{
unsigned char mensaje4_h[]={" convercion adc "};
int result;
char cadena[7];
TRISC= 0x00;
TRISB= 0x00;

/***inicializo funciones***/
Conf_ADC();
inicio_lcd();
Init_Pwm(result);
LeeADC();
/****************************/
control_lcd(L13);
dato_lcd (mensaje4_h);

for(;;)
{
result=25; //LeeADC();
Init_Pwm(result);
Delay1KTCYx(50);
result=LeeADC();
itoa(result,cadena); // convierto la medida en un string
control_lcd(L26);
dato_lcd(cadena);
Delay1KTCYx(20);
}
}
 
buenas.

estube probando el programa que escribiste y a mi me funciono y eso que uso una version de mplab viejita, sabes lo que si me di cuenta es que seguramente en lo que estas cometiendo el error es en la forma como esta configurado tu mplab, si esta mal configurado no te compila bien y te vota errores varios como ese. mira te adjunto el programa que use para probarlo lo unico que le quite fue todo lo referente al LCD porque no adjuntaste esa parte, pero lo cambie por transmisión serial y como esa parte la puedo simular con el computador y mplab si me funciono sin problemasm y pude ver el resulado de la convercion
 

Adjuntos

  • main_839.c
    1.7 KB · Visitas: 62
egber27 dijo:
buenas.

estube probando el programa que escribiste y a mi me funciono y eso que uso una version de mplab viejita, sabes lo que si me di cuenta es que seguramente en lo que estas cometiendo el error es en la forma como esta configurado tu mplab, si esta mal configurado no te compila bien y te vota errores varios como ese. mira te adjunto el programa que use para probarlo lo unico que le quite fue todo lo referente al LCD porque no adjuntaste esa parte, pero lo cambie por transmisión serial y como esa parte la puedo simular con el computador y mplab si me funciono sin problemasm y pude ver el resulado de la convercion

fryck_80 decía que ya le funcionaba pero el arrojaba un warning the conversión sospechosa de puntero. Un warning es una advertencia a la cual hay que prestarle atención, no creo que tenga que ver con mal configurar el compilador


fryck_80 , estas llamando mal a la función. fijate porqué

El prototipo de la función es (extraído del manual del C18)
char * itoa( int value, char * string );

Donde aclara que el puntero al string debe tener tamaño suficiente para alojar los datos convertidos (lo cual es obvio).

Prueba hacer algo asi

itoa(result,(char *)&cadena);
 
Atrás
Arriba