Primero que todo, hola a todos en el foro, y gracias en especial a Moyano y Meta que por lo que veo son muy activos y han apoyado a muchos por aquí y a mi también porque he aprendido bastante leyéndolos.
Les cuento que gracias a lo que he leido por aquí y en otros foros ya pude hacer una aplicación sencilla para comunicarme por usb con el pic18F4550 y Matlab, también lo intenté recientemente con VC#2008 y 2010 express, sin embargo con estos no he tenido éxito aún.
Bueno ahora les comento mi duda y agradezco de antemano su apoyo:
Actualmente en un pequeño proyecto quiero recibir la señal analógica proveniente de un sensor laser (mide distancia) en el pic18F4550 y la envío a la pc para graficar los datos. El problema está en los datos analógicos que recibo, varían bastante aunque el sensor permanezca fijo. Probé en lugar del sensor con un potenciómetro para simular la señal analógica y aún así aunque no gire la perilla del potenciómetro la señal oscila mucho (por ejemplo para un valor alrededor de 750 los valores parecen ir + - 5, cambiando constantemente).
Me interesa que la señal analógica sea estable para que la gráfica que obtenga represente con mayor precisión las distancias.
Lo que les pido es que me digan por favor si estoy configurando mal el ADC por el asunto del tiempo de adquisición. Acá les dejo el programa con el que leo dos señales analógicas y otras dos digitales, el programa está en CCS.
Nuevamente muchas gracias a todos y sigan adelante con este foro, porque está buenísimo.
Les cuento que gracias a lo que he leido por aquí y en otros foros ya pude hacer una aplicación sencilla para comunicarme por usb con el pic18F4550 y Matlab, también lo intenté recientemente con VC#2008 y 2010 express, sin embargo con estos no he tenido éxito aún.
Bueno ahora les comento mi duda y agradezco de antemano su apoyo:
Actualmente en un pequeño proyecto quiero recibir la señal analógica proveniente de un sensor laser (mide distancia) en el pic18F4550 y la envío a la pc para graficar los datos. El problema está en los datos analógicos que recibo, varían bastante aunque el sensor permanezca fijo. Probé en lugar del sensor con un potenciómetro para simular la señal analógica y aún así aunque no gire la perilla del potenciómetro la señal oscila mucho (por ejemplo para un valor alrededor de 750 los valores parecen ir + - 5, cambiando constantemente).
Me interesa que la señal analógica sea estable para que la gráfica que obtenga represente con mayor precisión las distancias.
Lo que les pido es que me digan por favor si estoy configurando mal el ADC por el asunto del tiempo de adquisición. Acá les dejo el programa con el que leo dos señales analógicas y otras dos digitales, el programa está en CCS.
Código:
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,MCLR
#device ADC=10 //ADC a 10 bits
#define ADC_ADFM_RIGHT 0x80 // esto lo tomé de este Foro (vean la pág 17)
#define ADC_ACQT_20TAD 0x38 // esto lo tomé de este Foro (vean la pág 17)
#use delay(clock=48000000)
#define LCD_DATA_PORT getenv("SFR:PORTB")
#include <lcd.c>
#define USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
#define USB_EP1_TX_SIZE 10
#define USB_EP1_RX_SIZE 10
#include <pic18_usb.h>
#include "usb_desc_scope.h"
#include <usb.c>
int8 dato[10];
unsigned int16 entrada;
void main(void) {
lcd_init();
usb_init();
usb_task();
usb_wait_for_enumeration();
TRISA = 0x0F; // Se declara el puerto A0, A1, A2, A3 como entradas
setup_adc_ports(AN0_TO_AN1|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_64 || ADC_ACQT_20TAD || ADC_ADFM_RIGHT );
while (TRUE)
{
if(usb_enumerated()) // si el Pic está configurado via USB
{
if (usb_kbhit(1)) // si el endpoint de salida contiene datos del host
{
usb_get_packet(1, dato, 10); // Se recibe el paquete del EP1
if (dato[6]==1){
output_high(PIN_A4);
lcd_gotoxy(1,2);
printf(lcd_putc,"mot ON ");}
else{
output_low(PIN_A4);
lcd_gotoxy(1,2);
printf(lcd_putc,"mot OFF");}
if (dato[7]==1){
output_high(PIN_A5);
lcd_gotoxy(9,2);
printf(lcd_putc,"luz ON ");}
else{
output_low(PIN_A5);
lcd_gotoxy(9,2);
printf(lcd_putc,"luz OFF");}
}
set_adc_channel(0);
delay_us(20);
entrada=read_adc();
dato[0]= make8(entrada,0);
dato[1]= make8(entrada,1);
lcd_gotoxy(1,1);
printf(lcd_putc,"CH0:%4lu",entrada);
set_adc_channel(1);
delay_us(20);
entrada=read_adc();
dato[2]= make8(entrada,0);
dato[3]= make8(entrada,1);
lcd_gotoxy(9,1);
printf(lcd_putc,"CH1:%4lu",entrada);
if (input(PIN_A2)==0)
dato[4]=1;
else
dato[4]=0;
if (input(PIN_A3)==1)
dato[5]=1;
else
dato[5]=0;
usb_put_packet(1, dato, 10, USB_DTS_TOGGLE); // Se envía el paquete del EP1 al PC
}
}
}
Nuevamente muchas gracias a todos y sigan adelante con este foro, porque está buenísimo.
Última edición por un moderador: