TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: loverman24 en 15 de Febrero de 2006, 08:37:00
-
Hola a todos, os comento mi problema:
EStoy usando el ADC de un 16f877A y usando como referencia para la conversion las tensiones que vienen por defecto no tengo ningun problema, es decir, Vref+ VDD y Vref- Vss.
Bien, aqui viene mi pregunta:
Ahora necesito referir Vref- a una tension q no es Vss, una externa. El problema reside que en cuanto escribo en el compilador
setup_adc_ports(RA0_RA1_ANALOG_RA2_REF );
me lanza un mensaje de error de instruccion, sin embargo si coloco
setup_adc_ports(RA0_RA1_ANALOG_RA3_RA2_REF );
no tengo ningun problema.
Mi pregunta es la siguiente:
¿Tengo por fuerza que usar los dos pines como referencia externa si solo quiero usar el Vref-? es decir, no puedo usar una Vref- externa y dejar como Vref+ VDD???
Si no es asi, supongo que no habra mayor problema que el de conectar el pin Vref+ a VDD, es correcto?
Venga muchas gracias
Un saludo
EDITADO:
Vaya, resulta que al querer usar otra entrada mas del ADC:
setup_adc_ports(RA0_RA1_RA4_ANALOG_RA3_RA2_REF);
me salta el mismo error, UNDEFINED INDENTEFIER... que hago mal?
Coloco aqui la cabezera de mi programa
#include <16f877A.h>
#device adc=10
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#use delay (clock= 4000000)
#use rs232(BAUD=19200, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)
EDITADO:
Vale, por que co.o me da UNDEFINED INDENTEFIER... cuando tan solo pongo
setup_adc_ports(RA4_ANALOG)
y si pongo
setup_adc_ports(RA0_analog) no pasa nada
GRacias
Un saludo
-
Para poder configurar voltajes de referencia, tienes que darle solo las combinaciones posibles para ese microcontrolador, para el 877 debes buscarlos en la hoja de datos, en la explicacion del rigistro ADCON1.
-
Abre el archivo de definiciones del pic que estas usando, vamos cuando declaras el pic.h en dicho archivo estan todas sus posibles configuraciones....
Suerte!!!
-
Hola de nuevo, muchas gracias por la ayuda. A ver que me aclare.
He ido a pic.h y he mirado lo siguiente:
// Constants used in SETUP_ADC_PORTS() are:
#define NO_ANALOGS 7 // None
#define ALL_ANALOG 0 // A0 A1 A2 A3 A5 E0 E1 E2
#define AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF 1 // A0 A1 A2 A5 E0 E1 E2 VRefh=A3
#define AN0_AN1_AN2_AN3_AN4 2 // A0 A1 A2 A3 A5
#define AN0_AN1_AN2_AN4_VSS_VREF 3 // A0 A1 A2 A5 VRefh=A3
#define AN0_AN1_AN3 4 // A0 A1 A3
#define AN0_AN1_VSS_VREF 5 // A0 A1 VRefh=A3
#define AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF 0x08 // A0 A1 A5 E0 E1 E2 VRefh=A3 VRefl=A2
#define AN0_AN1_AN2_AN3_AN4_AN5 0x09 // A0 A1 A2 A3 A5 E0
#define AN0_AN1_AN2_AN4_AN5_VSS_VREF 0x0A // A0 A1 A2 A5 E0 VRefh=A3
#define AN0_AN1_AN4_AN5_VREF_VREF 0x0B // A0 A1 A5 E0 VRefh=A3 VRefl=A2
#define AN0_AN1_AN4_VREF_VREF 0x0C // A0 A1 A5 VRefh=A3 VRefl=A2
#define AN0_AN1_VREF_VREF 0x0D // A0 A1 VRefh=A3 VRefl=A2
#define AN0 0x0E // A0
#define AN0_VREF_VREF 0x0F // A0 VRefh=A3 VRefl=A2
#define ANALOG_RA3_REF 0x1 //!old only provided for compatibility
#define A_ANALOG 0x2 //!old only provided for compatibility
#define A_ANALOG_RA3_REF 0x3 //!old only provided for compatibility
#define RA0_RA1_RA3_ANALOG 0x4 //!old only provided for compatibility
#define RA0_RA1_ANALOG_RA3_REF 0x5 //!old only provided for compatibility
#define ANALOG_RA3_RA2_REF 0x8 //!old only provided for compatibility
#define ANALOG_NOT_RE1_RE2 0x9 //!old only provided for compatibility
#define ANALOG_NOT_RE1_RE2_REF_RA3 0xA //!old only provided for compatibility
#define ANALOG_NOT_RE1_RE2_REF_RA3_RA2 0xB //!old only provided for compatibility
#define A_ANALOG_RA3_RA2_REF 0xC //!old only provided for compatibility
#define RA0_RA1_ANALOG_RA3_RA2_REF 0xD //!old only provided for compatibility
#define RA0_ANALOG 0xE //!old only provided for compatibility
#define RA0_ANALOG_RA3_RA2_REF 0xF //!old only provided for compatibility
Por lo que veo, al querer tres entradas y las dos Vref (solo Vref- no se puede pro lo visto), elijo la siguiente posibilidad:
setup_adc_ports (AN0_AN1_AN4_VREF_VREF);
entonces para aclararme, con esta directiva, tengo como entradas ADC la 0 la 1 y la 4, y tengo an2 y an3 como pines para Vref- y Vref+ respectivamente
¿es todo esto correcto??
Muchas gracias por la ayuda
Un saludo
-
Pues los comentarios de las mismas opciones te dice que si, eso si una aclaracion cuando he dicho que mires el pic.h me referia a tu pic a utilizar, en este caso debes mirar el 16f877A.h, supongo que habras hecho eso....
Suerte!!!
-
Si si, mire el 16f877A.h.
Muchas gracias por la ayuda.
Un saludo