TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: andysabbath en 21 de Agosto de 2008, 17:15:31
-
hola atodos
el problema que tengo con el conversor analogo digital de dspic que uso es que , cuando deseo suministrarle una señal de voltaje analoga, esta al conectarle la linea al pin de entrada analoga, se cae el voltaje, midiendolo con un voltimetro. es decir que si yo tengo un cable que conduce la señal analoga con un valor medido antes de conectarlo al pin de entrada analoga de ADC, me marca en un voltimetro 2.339V por ejemplo, tan pronto conecto el cable al pin de entrada analoga del ADC, ya me marca en el voltimetro 2.089V, lo cual representa una caida de casi 140mV, que para un ADC de 12 bits es muy grande ese voltaje
probe colocandole un acople en la entrada previa al ADC y no consegui solucion al inconveniente.
agradezco la colaboracion de todos, quien tenga idea por favor ayudarme amablemente
andy alarcón
Montería Colombia
-
Ponle un seguidor de voltaje o un apmificador de ganacia unitaria que te haga el acople de impedancia, a ver que pasa, es posible que las impedancias no estén debidamente macheadas.
-
nooo mijo ya intente eso y nada, lo que sucede es algo muy extraño, por que a la entrada del seguidor no se cae el voltaje, pero al salida del seguidor si se cae tan pronto conecto el cable que conduce la señal analogica al ADC del DSpic. te agradeaco mucho la sugerencia y la ayuda, si conoces de otra opcion por favor informame.
agradezco a todos los amigos y compañeros del foro, si tienen sugerencias me las hagan saber
andy alarcon
-
¿Cómo tienes configurado el ADC?, pega por aquí tu programa, o al menos la parte de inicialización de periféricos.
-
hola nocturno
mucghas gracias por tu atencion te paso de inmediato el codigo hecho en MPLAB espero sepas manejar este software
mov #0xEFFF,W0
mov W0,ADPCFG;// coloco entradas todas digitales excepto RB12
CLR ADCON1
CLR ADCHS
CLR ADCSSL
CLR ADCON2
CLR ADCON3
bclr IFS0,#ADIF
BCLR IEC0,#ADIE
BSET ADCON1,#ADON; // enciende el modulo
BSET ADCON1,#SAMP; // pone en uno el bit samp
CALL reto; // llama un retardo de 100ms
BCLR ADCON1,#SAMP; //apaga el bit samp
/ANCLA: BTSS ADCON1,#DONE; // revisa si la conversion esta hecha
BRA ANCLA
MOV ADCBUF0,W0 ; //mueve lo que esta en el bufer a W0
MOV W0,PORTF; // mueve W0 a lospuertos D y F
MOV W0,PORTD
return
muchas gracias por todo y si tienes alguna sugerencia de algun error te lo agradezco me lo hagas saber
-
¡Glub!, lo siento pero de ASM no tengo ni idea.
-
ADPCFG = 0xEFFF; // RB12 entrada analoga, el resto digital
ADCON1=0
ADCHS = 0x000C; // Conecta RB12/AN12 a CH0 input
ADCSSL = 0;
ADCON3 = 0; // muestreo manual
ADCON2 = 0;
ADCON1bits.ADON = 1; // el modulo ADC esta ON
while (1) //
{
ADCON1bits.SAMP = 1; // inicia muestreo
DelayNmSec(100); // llama retardo de 100 mS
ADCON1bits.SAMP = 0; // finaliza muestreo y inicia la conversion
while (!ADCON1bits.DONE); // conversion esta hecha?
portd = ADCBUF0;
PORTF=ADCBUF0 // CARGA EL CONTENIDO DEL BUFFER A PORTB Y F
} // repeat
-
Coloca referencias en el ADC, a ver que pasa, configura el ADC para referencias externas, le pones una buena tierra en -Vref y unos buenso 5V en +Vref y prueba e ver, no vaya a ser que alguno de esos circuitos estén cagandote la cosa.
-
Creo que con ADPCFG = 0xEFFF; estás configurando AN15 en vez de AN12, y por lo tanto la entrada que usas se comporta como digital.
Además de eso, asegúrate que tienes puesto los condensadores y la alimentación en todas las AVdd y las VRef.
(http://img511.imageshack.us/img511/7853/30f6014adchi8.jpg)
-
nooo nocturno, fijate que si coloco en ADCPFG=EFFF, le estoy colocando a cero el bit 12, por lo tanto lo estoy colocando como entrada analogica, para colocarlo digital solo lo debo colocar en uno, dado quee stoy usando los 12 bits menos significativos como salida digital (AN0...AN11) y AN12 lo coloco como entrada analogica, ademas necesito usar a AN0 y AN1 como salida digital, no podria conectar a Vref+ a VDD ni Vref- a VSS, puesto que estos its corresponden a AN0 y AN1 respectivamnete en mi DSpic 30f3014, de encapsulado DIP de 40 pines, pero sabes que no tengo conectada la AVDD ni AVSS, esnecesario conectarlos a VDD y VSS respectivamente, si midiendo con voltimetro veo que aparece 4.38V= AVdd y 0.38V=AVSS
-
Tienes razón con lo del bit, me he liado.
Pero sí hay que conectar Avdd y Avss, tal y como en el gráfico que he pegado antes.
-
hola nocturno
hombre mira que conecte todas las VDD y las VSS y fijate que la caida de voltaje se hace mas grande, probe con un dsPIC30f4013 y sucede la misma cosa.
-
Pues qué raro.
Si puedes prueba a poner ADPCFG=0xFFF;
-
Hola, creo que tu error esta en la configuración del registro ADCON3, esto dice el datasheet:
SAMC<4:0>: Auto-Sample Time bits
11111 = 31 TAD
·····
00001 = 1 TAD
00000 = 0 TAD (only allowed if performing sequential conversions using more than one S/H amplifier)
Como solo usas una conversión, el ADC no te permite usar la más alta velocidad, dale una más lenta.
saludos.
-
señores nocturno y renatox muchas gracias por sus opiniones
pero no he solucionado el asunto, decidi entonces hacer el muestreo por la entrada RB0/AN0, la cual la configuro como analoga y el resto como digital, ya que estoy sacando a traves del puerto B datos digitales de un registro que elebora un contador ascendente descendente de 12 bits, se me ocurrio usar RB0 como analoga y utilizar la salida RD0 del puerto D en reemplazo de RB0 por lo de contador, programe mi Dspic y listo al momneto de probarlo, resulta que los datos digitales del contador nme siguen saliendo por RB0, razon muy extraña para esto ya que el registro ADCPFG esta configurado para tal cosa, como analogo, entiendo que el RB0 puede funcionar como entrada analoga y como Vref+. pero no creo que pueda funcionar como analogo y digital a la vez, adicionalmente les anexo el codigo en C y en asm, donde el muestreo lo hago manualmente
por otro lado solo el registro ADCPFG es el encargado de configurar las patitas como analogas y como digitales, y el registro TRISB no cumple ninguna funcion para este caso
ADPCFG = 0xFFFE; // PORTB = Digital; RB0 = analog
ADCON1 = 0x0000;
ADCHS = 0x0002; // Conecta RB2/AN2 a CH0 input .. // en este ejemplo RB0/AN0 es la entrada analoga
ADCSSL = 0;
ADCON3 = 0x0002; // muestreo manual , Tad = 2 Tcy
ADCON2 = 0;
ADCON1bits.ADON = 1; // el modulo ADC esta ON
while (1) // repeat continuously
{
ADCON1bits.SAMP = 1; // inicia muestreo
DelayNmSec(100); // retardo de 100 mS para capturar muestra
ADCON1bits.SAMP = 0; // inicia la conversion
while (!ADCON1bits.DONE); // conversion esta hecha?
portf= ADCBUF0; // carga el buffer de recepcion de la muestra en PORTF
}
mov #0xFFFE,W0
mov W0,ADPCFG
mov #0x0000,W0
mov W0,ADCON1
MOV #0x0000,W0
MOV W0,ADCHS
MOV #0x0000,W0
MOV W0,ADCSSL
clr ADCON2
mov #0x0002,W0
mov W0 ADCON3
bclr IFS0,#ADIF
BCLR IEC0,#ADIE
BSET ADCON1,#ADON
BSET ADCON1,#SAMP
LCR: BTSC ADCON1,#SAMP
BRA LCR
ANCLA: BTSS ADCON1,#DONE
BRA ANCLA
MOV ADCBUF0,W0
MOV W0,PORTF
MOV W0,PORTD
return
gracias a todos por la atencion prestada
andy alarcón
montería colombia
-
señores que alegri
he resuleto el problema, resulto ser que el registro trisb no lo tenia configurado como entrada, es decir, solo le daba la instruccion CLR trisb y de alli solo me funcionaba como entrada, por esto estaba fallando.
de todas formas les agradezcoa nocturno a renatox y reiniertl por la ayuda prestada y su tiempo en atender la solicitud que Dios les bendiga compañeros
-
Felicidades, me alegro que lo hayas resuelto y te hayas acordado de decirlo por aquí.
-
Me pasa algo muy parecido .. pero justo en la pata RB0. en un (pic24)
Y lo peor es que la caida de tension es mucho mayor.. yo seteo un pote a 1.6volts. midiendo y cuando lo apollo sobre la pata .. cae a 20mv.
el adc me tira 150/160, y no sale de ahi.
Creo que tengo todos los registros bien configurados, nose que puede ser.
aca les dejo mi problema : http://www.todopic.com.ar/foros/index.php?topic=29611.0 (http://www.todopic.com.ar/foros/index.php?topic=29611.0)
Muchas gracias.