Autor Tema: No funciona la conversión a 10bits (18F4550)  (Leído 1878 veces)

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

Desconectado omarb1nbs

  • PIC10
  • *
  • Mensajes: 3
No funciona la conversión a 10bits (18F4550)
« en: 03 de Agosto de 2013, 10:53:50 »
saludos compañeros, les escribo en mi desesperación por resolver un problema con la conversión ADC a 10 bits con el microcontrolador PIC18F4550.

Les cuento que hace tiempo lograba comunicarme via usb con este tipo de conversión, sin embargo hace unas 3 semanas para acá ha dejado de funcionar y cuando conecto al computador sale un mensaje de error diciendo algo referente a que el hub no reconoce el dispositivo, luego me voy a panel de control/sistema/dispositivos de hardware y chequeo que aparece como "Dispositivo Desconocido", le doy click derecho y en detalles me doy cuenta que su PID y VID estan en 0000 y 0000...algo que me parece muy curioso, ya que esos dos valores siempre son distintos a eso que muestra y son los que se modifican en el controlador para cuando ocurren este tipo de errores.

Voy a adjuntarles la programación que no me quiere funcionar (En Proteus lo simula perfectamente, peor al llevarlo al protoboard no funciona).
__________________________________________________ _____________________________
#include <18F4550.h>
#device ADC=10 //Convertidor A/D a 10bit
#include <stdlib.h> //Permite hacer conversiones entre tipos numericos
#fuses HSPLL,NOWDT,NOPROTECT,NODEBUG,NOBROWNOUT,USBDIV,PL L5,CPUDIV1,VREGEN,PUT,MCLR,NOLVP,NOPBADEN, NOSTVREN, NOWRTC
#use delay(clock=48M)
#define ledv PIN_C0
#define ledr PIN_C1
#USE FAST_IO(A)
#USE FAST_IO(B)
#USE FAST_IO(C)
#USE FAST_IO(D)
#byte ADCON2=0xfc0
#byte adresl=0xfc3 //Registro donde se almacena el resultado de la conversion ADC
#byte adresh=0xfc4 //Registro donde se almacena el resultado de la conversion ADC
#include <usb_cdc.h>
#include <ltc1298.c> // libreria para manejo LTC1298
////////////Declaración de Variables/////////////////////
long int data;
char Anc0L[4],Anc0H[4], Anc2[5];
int16 dato, AL, AH;
int a=0, b=0, prueba, local;

//////////////////////////////////////////////////////////////////////
///////////////////Programa Principal////////////////////
void main(void)
{
set_tris_a(0b0000011);
set_tris_b(0b00010000);
set_tris_c(0b00000000);
set_tris_d(0b00000000);
output_low(PIN_C0);
output_high(PIN_C1);
usb_cdc_init();
usb_init(); // Inicializa el USB
usb_wait_for_enumeration(); //Espera hasta que el PicUSB sea configurado por el host
output_low(PIN_C1);
output_high(PIN_C0);
/////////////////// Configuración Modulo ADC ////////////////////
SETUP_ADC(ADC_CLOCK_INTERNAL); //Configuración del Reloj interno ADC_CLOCK_DIV_64
SET_ADC_CHANNEL(0); // Selección de canal A0
SETUP_ADC_PORTS(ALL_ANALOG );
//////////////////////// Inicializa Rutina SPI //////////////////////////
adc_init(); //Inicializa la conversión Analógica/Digital
while(!usb_cdc_connected()){ // espera a detectar una transmisión de la PC
while(true)
{
usb_task(); //Habilita periférico usb e interrupciones
if (usb_enumerated()) // retorna verdadero si el dispositivo está enumerado
{
if (usb_cdc_kbhit()) // en espera de un nuevo caracter en el buffer de recepción
{
data = usb_cdc_getc();
output_low (PIN_D0);
if ((data== '1' )) //
{
output_low(Pin_b5);
output_low(Pin_b6);
output_low(Pin_b7);
if (input(pin_a1)== 1)//SIMULA LA CONDICIÓN DE LOS PINES 5&9
{
if (input(pin_b4)== 1)//SIMULA EL PULSO DE 50MSEG POR LOS PINES 7&8
{
a=1;
}
if (a=1)
{
output_high (PIN_D0);
delay_ms(100);
SET_ADC_CHANNEL(0); //canal RA0
read_adc();
AL = adresl; //Guarda el byte bajo del resultado
AH = adresh; //Guarda el byte alto del resultado
itoa (AL,10,Anc0L); // Función que convierte número entero a string
itoa (AH,10,Anc0H); // Función que convierte número entero a string
prueba = bit_test (local,4);
dato = read_analog(prueba);
convert_to_volts(dato,Anc2);
printf (usb_cdc_putc,"A%sB%sC%s;",Anc0L,Anc0H, Anc2);

}
}
usb_cdc_putc(data);
}
else {//


if (data=='2') // INICIAR PROGRAMA DE TEMPERATURA
{
output_high(Pin_b5);
}
else
{
output_low(Pin_b5);
}
if (data=='3') // HABILITAR OPCION DE: "INTERFAZ PREPARADA"
{
output_high(Pin_b6);
}
else
{
output_low(Pin_b6);
}
if ((data=='4') && (b==0)) // HABILITAR "INICIO REMOTO" (PULSO DE 5MS)
{
b=1;
output_high (PIN_b7);
delay_ms(10);
output_low (PIN_b7);

}
else
{
}

if ((data== '5' )) //
{
if (input(pin_a1)== 1)//SIMULA LA CONDICIÓN DE LOS PINES 5&9
{
if (input(pin_b4)== 1)//SIMULA EL PULSO DE 50MSEG POR LOS PINES 7&8
{
}
if (a=1)
{
output_high (PIN_D0);
delay_ms(100);
SET_ADC_CHANNEL(0); //canal RA0
read_adc();
AL = adresl; //Guarda el byte bajo del resultado
AH = adresh; //Guarda el byte alto del resultado
itoa (AL,10,Anc0L); // Función que convierte número entero a string
itoa (AH,10,Anc0H); // Función que convierte número entero a string
prueba = bit_test (local,4);
dato = read_analog(prueba);
convert_to_volts(dato,Anc2);
printf (usb_cdc_putc,"A%sB%sC%s;",Anc0L,Anc0H, Anc2);

}
}
usb_cdc_putc(data);
}

}

}
}

}

}
}
__________________________________________________ ___________________________

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: No funciona la conversión a 10bits (18F4550)
« Respuesta #1 en: 03 de Agosto de 2013, 12:33:42 »
Seguro el problema se debe al protoboard, yo cuando empecé con el USB tuve esos problemas tambien.

Se debe al ruido que se mete y por eso no logra conectarse bien a la compu.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado omarb1nbs

  • PIC10
  • *
  • Mensajes: 3
Re: No funciona la conversión a 10bits (18F4550)
« Respuesta #2 en: 04 de Agosto de 2013, 01:26:43 »
 :( he probado de todo y nada que logro solucionarlo...

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: No funciona la conversión a 10bits (18F4550)
« Respuesta #3 en: 04 de Agosto de 2013, 11:09:23 »
Seguis con el protoboard? Cuales pruebas hiciste?

Fijate si podes hacer un PCB aunque sea con lo mínimo.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado omarb1nbs

  • PIC10
  • *
  • Mensajes: 3
Re: No funciona la conversión a 10bits (18F4550)
« Respuesta #4 en: 04 de Agosto de 2013, 21:59:31 »
eso es lo curioso, que he probado con lo mínimo en hardware y nada que funciona...por ejemplo e usado un circuito para encender unos leds pero teniendo una entrada analógica (potenciometro) y que dependiendo de un dato en labview, se ponga en alto algún pin declarado como como salida... pero no ocurre ni siquiera la comunicación usb

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: No funciona la conversión a 10bits (18F4550)
« Respuesta #5 en: 05 de Agosto de 2013, 17:16:53 »
Mis inicios con el USB fueron con un clon mio de la PICDEM FS USB, que es a base del 18F4550, me sirvió para aprender mucho ya que está todo muy documentado y los programas de ejemplo en C18.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.