Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

06/05/2011 #1


Problema para muestrear una señal con Pic18f2550
Hola a todos los de este foro, soy nuevo aqui y tengo un problema que quiero compartir para ver si me pueden ayudar...

Tengo que muestrear una señal con el pic18f2550, la señal dura 10ms y quiero obtener 50 muestras y desplegarlas en un lcd cada muestra se despliega por un segundo y asi sucesivamente... lo programe en c18 y lo simule en proteus, puse una red RC y conecte el canal 0 para leer los datos de la carga del capacitor, si los lee y los despliega uno a uno pero me da datos erroneos por ejemplo si conecto el canal a vcc me aparece 1.24 en el lcd en vez de 5.00, ya no se que hacer para obtener los datos correctos.

Soy nuevo en esto, si alguien me puede ayudar se lo agradecere infinitamente....

Aqui les dejo la parte del codigo donde muestreo y despliego los datos en el lcd para que se den una idea de lo que hice...

void main(void){

unsigned int Canal0;

unsigned char i,z;
unsigned char datos[50]; //vector para guardar los datos
char uni[4],deci[4],centesi[4];
long int lectura,unidad,decima,centesima;

TRISB=0X00; // Puerto B como salida

LATB=0X00; // Puerto B apagado inicialmente


OpenXLCD(FOUR_BIT&LINES_5X7); //iniciamos lcd
comandXLCD(0x06); //nos aseguramos incremento de direccion, display fijo

comandXLCD(0x0c); //ENCENDEMOS LCD


while(1){
OpenADC(ADC_FOSC_RC & ADC_2_TAD & ADC_RIGHT_JUST,ADC_CH0&ADC_VREFPLUS_VDD&ADC_VREFMI NUS_VSS& ADC_INT_OFF,ADC_1ANA&14); //configura adc reloj interno, 2TAD, selecciona referencia a VDD y VSS y canal0 como entrada analogica

comandXLCD(0x0c); //ENCENDEMOS LCD
comandXLCD(0x01); //borra pantalla lcd y vuelve al origen

//*************** for para muestrear 50 veces a 200us*************//
for(i=0; i<=50; i++){
SetChanADC(0); //Selecciono canal a convertir
ConvertADC(); //comienza conversion
while(BusyADC()==1){} //hasta que finalice conversion
Canal0=ReadADC();//realizo lectura
datos[i]=Canal0;
Delay10TCYx(20); //retardo 200us



}

//*************** for para desplegar en lcd 50 muestras por 1 segundo cada una*****//


for(i=1; i<=50; i++)
{

comandXLCD(0x01); //borra pantalla y vuelve al origen
putrsXLCD("Canal 0= ");


lectura=(((float)datos[i])*500.0/1023);
unidad=(lectura/100)%10;
itoa(unidad,uni);
putsXLCD(uni);

putrsXLCD(".");

decima=(lectura/10)%10;
itoa(decima,deci);
putsXLCD(deci);

centesima=(lectura)%10;
itoa(centesima,centesi);
putsXLCD(centesi);

Delay10KTCYx(100); //retardo 1 seg

}
}
}
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.