Coversion analoga digital
Enviado por tomas • 24 de Septiembre de 2018 • 1.464 Palabras (6 Páginas) • 354 Visitas
...
Cada pasador de puerto asociado con el convertidor A/D puede ser configurado como una entrada analógica o como un digital I/O.
- JUSTIFICACION
Los registros ADRESH y ADRESL contienen el resultado de la conversión A/D. Cuando la conversión análoga/digital es completa, el resultado se carga en:
ADRESH: ADRESL que es par de registros, el bit GO/DONE (ADCON0 registro) es despejado y la interrupción de bandera (ADIF) se establece.
ADRESH: ADRESL no es modificado para un reinicio de encendido (power-on reset). Registros que contienen datos desconocidos después de un encendido se restablecen.
Después que se configura el módulo A/D como se desea, el canal seleccionado debe ser adquirido antes de la conversión que se ha iniciado.
Los canales de entrada analógica tienen sus correspondientes bits de TRIS seleccionados como una entrada.
Anexo 1.
- ECUACIONES
- Tiempo de adquisición mínimo:
Tacq = Tiempo de estabilización del amplificador + Tiempo de carga capacitor + Coeficiente de temperatura
TAMP = + TC + TCOFF
- Mínimo tiempo de carga:
VHOLD =e(-TC/CHOLD(RIC + RSS + RS)[pic 1]
TC = -(CHOLD)(RIC + RSS + RS) ln(1/2048)
- CONVERSION DEL CLOCK
El tiempo de conversión por bit se define como TAD. La conversión requiere 11 TAD de 10 bits de conversión.
La fuente del reloj de conversión es el software. Hay siete opciones posibles para el TAD:
• 2 TOSC
• 4 TOSC
• 8 TOSC
• 16 TOSC
• 32 TOSC
• 64 TOSC
• oscilador RC interno
Para las conversiones correcta, el A/D de reloj de conversión (DAT) debe ser tan corto como sea posible, pero mayor que el TAD mínimo.
- EJEMPLO
- Envía por el puerto serie el valor del adc para enviar un carácter. Máximo voltaje en lugar de 255, 20 TAD. Este tiempo se puede configurar mediante los bits ACQT2:ACQT0 que se encuentran en el registro ADCON2.
Bit a 1 usa la operación "or" (|)
Bit a 0, se usa la operación "and"(&)
ACQT2:ACQT0: A/D Tiempo de adquisición Seleccionar bits
111 = 20 TAD
110 = 16 TAD
101 = 12 TAD
100 = 8 TAD
011 = 6 TAD
010 = 4 TAD
001 = 2 TAD
000 = 0 TAD
#include
#device ADC = 8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL3,CPUDIV1,VREGEN
#use delay(clock=48000000)
//Configura comunicación serie
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//#byte nombre=dirección
//se define byte control adcon2, controla t.adquisicion, justificacion y reloj
#byte ADCON2=0xFC0
char Keypress=' ';
int8 valor;
#int_rda
void serial_isr() {
Keypress=0x00;
if (kbhit()) {
Keypress=getc();
if(Keypress!=0x00) {
valor=read_adc(ADC_START_AND_READ);
//Inicia conversion y lee, hara espera automática
delay_ms(1);
printf("\n\rEl valor del adc es : %u",valor);//muestra dato mayor } } }
void main()
{ //Establecer a como entrada
set_tris_a(0x01); //Entrada an0
//Se define entradas analógicas y valores referencia
setup_adc (adc_clock_div_64); //Enciende ADC, pongo 64 en lugar 32 a ver si mejora
//se configura t.adquisicion sin modificar demás, se usa operación or
//se usara TAD de 20 TAD, bits acqt2..0 todos a 1
//para poner a 0 se utilizaría and con 0 en bit a modificar y demás a 1
ADCON2= ADCON2 | 0b00111000;
setup_adc_ports (AN0_ANALOG); //Elige entrada analógica
set_adc_channel (0); //Elige canal a medir
//Habilita interrupción rda
enable_interrupts(global);
enable_interrupts(int_rda);
printf("\r\n\ Conectado \r\n");
do { } while (TRUE); }
- ADCON2: selecciones si el resultado está justificado a la izquierda (útil para usar sólo los 8 bits superiores del resultado) o la derecha (útil cuando se usan los enteros de 10 bits), el tiempo que un retraso entre el decir GO y el inicio de una adquisición, y la fuente de reloj para el hardware A2D.
ADCON2 = 0b10000001;
// 1------- Resultado justificado a la derecha
// --000--- 0 TAD retraso o ningún retraso antes
...