Clase 4 pro

Click here to load reader

Transcript of Clase 4 pro

  • 1. IUT CumanMICROCONTROLADORES IIMDULO A/D(Convertidor Analgico/Digital)PROF. LUIS ZURITA

2. IUT CumanRESOLUCINProf. Luis ZuritaMicrocontroladores II 3. VOLTAJES DE REFERENCIA EXTERNOSIUT Cuman El convertidor A/D puede seleccionar como tensin de referencia la interna VDD y Tierra. Para referencias externas, se introducen por: RA3/AN3/VREF+ y RA2/AN2/VREF- Las siguientes limitaciones aplican: El mximo voltaje aplicado a VREF+ (RA3/AN3) serVDD+0,3V y el mnimo VDD-2,5V. Sobre el voltaje aplicado a VREF- (RA2/AN2) lamnima tensin ser VSS-0,3V y la mxima (VREF+) -2V. Por ejemplo, si la tensin de alimentacin es de 5V, latensin en RA3/AN3 no podr exceder de 5V. Por loProf. Luis Zuritaque el mximo voltaje en VREF- ser de 3V. Microcontroladores II 4. IUT Cuman REGISTROS RELACIONADOS AL MDULO A/D ADCON0: Registro de control 0. (Banco 0). ADCON1: Registro de control 1. (Banco 1). ADRESH: Guarda la parte alta del Resultado de la conversin. (Banco 0). ADRESL: Guarda la parte baja del Resultado de la conversin. (Banco 1).Prof. Luis Zurita Microcontroladores II 5. Seleccin del reloj de conversin A/D IUT Cuman El tiempo de conversin A/D por bit se define como TAD. La conversin A/D requiere mnimo 12TAD por 10-bits de conversin. La fuente del reloj de conversin A/D es seleccionado por software, mediante los bits ADCON0 . Las cuatro opciones posibles para TAD son:ADCS 1:0PERODO0 0 2TOSC0 1 8TOSC1 0 32TOSC1 1 RC interno (2-6 s)Prof. Luis Zurita Microcontroladores II 6. Tiempo de adquisicin (TACQ)IUT Cuman Es el tiempo necesario para que se cargue el condensador de retencin interno, con la tensin de entrada. Este proceso de carga del condensador depende de distintos factores, entre otros, la impedancia de la fuente de tensin de entrada (el fabricante recomienda que se site por debajo de 10 kohm. El tiempo de adquisicin dentro de los mrgenes tpicos es de aproximadamente 20s. La adquisicin no comienza hasta que no acabe la conversin. Por lo que se debe esperar un TACQ tras una conversin , para seleccionar un nuevo canal o luego de encender el mdulo AD.Prof. Luis ZuritaMicrocontroladores II 7. IUT CumanTiempo de conversin (TAD) Es el tiempo necesario para obtener el valor digital de la tensin analgica de entrada. Este tiempo depende de la fuente de reloj que se seleccione para la conversin.Prof. Luis Zurita Microcontroladores II 8. IUT Cuman Para un control adecuado de conversiones A/D, el reloj de conversin A/D (TAD) deben ser seleccionados para asegurar un tiempo mnimo TAD de 1,6 s. La siguiente tabla muestra los tiempos de TAD derivada de las frecuencias de funcionamiento del dispositivo y de la fuente de reloj A/D de reloj seleccionado.Prof. Luis ZuritaMicrocontroladores II 9. IUT CumanCICLOS DE CONVERSINProf. Luis ZuritaMicrocontroladores II 10. IUT CumanFORMATO DE RESULTADOSProf. Luis Zurita Microcontroladores II 11. IUT CumanProf. Luis Zurita Microcontroladores II 12. IUT CumanProf. Luis Zurita Microcontroladores II 13. IUT CumanProf. Luis Zurita Microcontroladores II 14. IUT CumanPASOS PARA REALIZAR UNA CONVERSIN 1. Configurar el mdulo conversor A/D Configurar los pines que actan como entradasanalgicas, las seales que harn de tensin dereferencia y las que trabajarn como E/S digitales.(ADCON1). Seleccionar el canal de entrada. A/D (ADCON0). Seleccionar la fuente de la seal de reloj para laconversin A/D (ADON0). Activar el mdulo de conversin A/D (ADCON0)Prof. Luis Zurita Microcontroladores II 15. IUT CumanPASOS PARA REALIZAR UNA CONVERSIN 2. Activar si, se desea, la interrupcin. del mduloconversor A/D: Poner a cero el bit ADIF Poner a uno el bit ADIE Poner a uno los bits habilitadores GIE y PEIE 3. Esperar el tiempo requerido para la adquisicin. 4. Inicio de la conversin: Poner a 1 el bit GO/#DONE (ADCON0)Prof. Luis Zurita Microcontroladores II 16. IUT CumanPASOS PARA REALIZAR UNA CONVERSIN 5. Tiempo de espera para terminar la conversin A/Dque puede detectarse Por: Exploracin de bit GO/DONE# , que al finalizar laconversin toma el valor 0 Esperar que se produzca una interrupcin si se haprogramado al finalizar la conversin. Aunque no se autorice la interrupcin el flag ADIF sepone a 1 al finalizar la interrupcin.Prof. Luis ZuritaMicrocontroladores II 17. IUT CumanPASOS PARA REALIZAR UNA CONVERSIN 6. Leer el par de registros ADRESH:ADRESL donde seencuentran los 10 bits que resultan de la conversiny poner a cero el flag ADIF. 7. Para una nueva conversin volver a los pasos 1 y 2, eltiempo de conversin por bit est definido por TAD,se exige un mnimo de 2*TAD para realizar una nuevaconversin.Prof. Luis ZuritaMicrocontroladores II 18. A/D en CIUT Cuman En el compilador C las funciones para manejar el convertidor A/D son las siguientes: setup_adc(modo); Donde modo, determina la configuracin del mdulo A/D correspondiente a los bits 7:6 del ADCON0. setup_adc(modo);ADCON0(1Fh) ADC_OFF 00000000 ADC_CLOCK_INTERNAL11000000 ADC_CLOCK_DIV_2 00000000 ADC_CLOCK_DIV_8 01000000 ADC_CLOCK_DIV_3210000000 setup_adc_ports(valor); Valor: definicin de las entradas analgicasProf. Luis Zurita correspondiente a los bits 3:0 del ADCON1.Microcontroladores II 19. PCFG3 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 setup_adc_ports(valor);RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0PCFG00000A A A A A A A A ALL_ANALOG0001A A A A VREF+ A A A AN0_AN1_AN2_AN4_AN5_AN6_AN7_VSS_VREF0010D D D A A A A A AN0_AN1_AN2_AN3_AN40011D D D A VREF+ A A A AN0_AN1_AN2_AN4_VSS_VREF0100D D D D A D A A AN0_AN1_AN30101D D D D VREF+ D A A AN0_AN1_VSS_VREF011XD D D D D D D D NO_ANALOGS1000A A A A VREF+ VREF- A A AN0_AN1_AN4_AN5_AN6_AN7_VREF_VREF1001D D A A A A A A AN0_AN1_AN2_AN3_AN4_AN51010D D A A VREF+ A A A AN0_AN1_AN2_AN4_AN5_VSS_VREF1011D D A A VREF+ VREF- A A AN0_AN1_AN4_AN5_VREF_VREF1100D D D A VREF+ VREF- A A A_ANALOG_RA3_RA2_REF1101D D D D VREF+ VREF- A A AN0_AN1_VREF_VREF1110D D D D D D D A AN01111D D D D VREF+ VREF- D A AN0_VREF_VREF 20. A/D en CIUT Cuman set_adc_channel(canal) Canal: seleccin del canal analgico correspondiente a los bits 5:3 del ADCON0.0(AN0) 1(AN1) 2(AN2) 3(AN3)4(AN4) 5(AN5) 6(AN6) 7(AN7)Prof. Luis Zurita Microcontroladores II 21. A/D en CIUT Cuman valor= read_adc(); Lectura del resultado donde valor es un entero de 16 bits, segn la directiva #DEVICE ADC= empleada. Esta directiva trabaja segn la tabla:DEVICE8 bit10 bit11 bit 16 bitADC=8 00-FF 00-FF00-FF00-FFADC=10x 0-3FF xxADC=11x x0-7FF xADC=16 0-FF000-FFC00-FFE0 0-FFFFProf. Luis ZuritaMicrocontroladores II 22. A/D en CIUT Cuman Por ejemplo, el fichero 16F877.h incluye como primera directiva #device PIC16F877. Para incluir la informacin del tipo de conversor A/D se debe aadir #device adc=10. READ_ADC() admite tres modos de funcionamiento:ADC_START_AND_READ Si no se indica nada es la opcin por defecto. Permite iniciar y leer el convertidor.ADC_START_ONLY Slo inicia la conversin.ADC_READ_ONLYSlo lee los registros del convertidor.Prof. Luis ZuritaMicrocontroladores II 23. A/D en C. Ejercicio 1. Lectura de un canal.IUT Cuman En el siguiente ejercicio, sesetup_adc(ADC_CLOCK_INTERNAL);medir un canal analgico setup_adc_ports(ALL_ANALOG);que ingresa por RA0 y selcd_init();muestra su valor en digital yen voltaje en una pantallawhile(TRUE){LCD.set_adc_channel(0); #include delay_ms(100); #device ADC=10 valor=read_adc(); #fuses p=0.004883*valor;XT,NOWDT,NOPROTECT,NOLVPlcd_gotoxy(1,1); #use delay(clock=4000000)printf(lcd_putc,"fA/DValor=%4LUn",valor); #use fast_IO(c)printf(lcd_putc,"Voltaje=%g",p); #include } int16 valor=0;} float p; void main(){Prof. Luis Zurita Microcontroladores II 24. A/D en C. Ejercicio 1. Lectura de un canal.IUT CumanProf. Luis Zurita Microcontroladores II 25. A/D en C. Ejercicio 2. Lectura de dos canales. IUT Cuman En el siguiente ejercicio, se medirn dos canalesanalgicos (RA0 y RA1), el primero ser el valor deuna variable que se desea medir y el segundo ser elset point. Si la variable est por encima del set point se activa unled rojo. En caso contrario se activa un led verde.Prof. Luis ZuritaMicrocontroladores II 26. A/D en C. Ejercicio 2. Lectura de dos canales.IUT Cuman #include #device ADC=10 #fuses XT,NOWDT,NOPROTECT,NOLVP #use delay(clock=4000000) #use fast_IO(C) #include int16 valor=0; long setpoint=0; float p; float psp; void main(){set_tris_c(0);setup_adc(ADC_CLOCK_INTERNAL);setup_adc_ports(ALL_ANALOG);lcd_init();output_C(0);Prof. Luis Zurita Microcontroladores II 27. A/D en C. Ejercicio 2. Lectura de dos canales.Continuacin. IUT Cuman while (TRUE){set_adc_channel(0);delay_ms(10);valor=read_adc();p=0.004883*valor;printf(lcd_putc,"fSENSOR=%gn",p);set_adc_channel(1);delay_ms(10);setpoint=read_adc();psp=0.004883*setpoint;printf(lcd_putc,"SPOINT=%gn",psp);if(p>=psp){output_high(PIN_C0);output_low(PIN_C1);}else{output_low(PIN_C0);output_high(PIN_C1);}delay_ms(50); } }Prof. Luis Zurita Microcontroladores II 28. A/D en C. Ejercicio 2. Lectura de dos canales.IUT CumanProf. Luis Zurita Microcontroladores II 29. A/D en C. Ejercicio 2. Lectura de dos canales.IUT CumanProf. Luis Zurita Microcontroladores II 30. A/D en C. Ejercicio 3. Lectura de ocho canales. IUT Cuman En el siguiente ejercicio, se medirn los 8 canales analgicosdisponibles para el PIC16F877: #include #device adc=10 #fuses XT,NOWDT #use delay(clock=4000000) #include //Se incluye para los clculosmatemticos #define use_portb_lcd FALSE #define use_portd_lcd TRUE #include int16 valor1,valor2,valor3,valor4,valor5,valor6,valor7,valor8; float canal1,canal2,canal3,canal4,canal5,canal6,canal7,canal8;Prof. Luis Zurita Microcontroladores II 31. void mostrar(){lcd_gotoxy(1,1); printf(lcd_putc,"C1=%2.2f C2=%2.2f",canal1,canal2);delay_ms(50);lcd_gotoxy(1,2);printf(lcd_putc,"C3=%2.2f C4=%2.2f",canal3,canal4);delay_ms(50);lcd_gotoxy(1,3);printf(lcd_putc,"C5=%2.2f C6=%2.2f",canal5,canal6);delay_ms(50);lcd_gotoxy(1,4);printf(lcd_putc,"C7=%2.2f C8=%2.2f",canal7,canal8);delay_ms(50);} 32. void main() {valor2 = Read_ADC();lcd_init();canal2 = 5.0 * valor2 / SETUP_ADC_PORTS(ALL_ANA1024.0; LOG);delay_ms(10); setup_adc( set_adc_channel(2); ADC_CLOCK_INTERNAL ); valor3 = Read_ADC(); delay_us(10); canal3 = 5.0 * valor3 / while(true) {1024.0; delay_ms(10);delay_ms(10); set_adc_channel(0);set_adc_channel(3);valor1 = Read_ADC(); valor4 = Read_ADC();canal1 = 5.0 * valor1 /canal4 = 5.0 * valor4 / 1024.0;1024.0; delay_ms(10);delay_ms(10); set_adc_channel(1);set_adc_channel(4); 33. valor5 = Read_ADC();canal5 = 5.0 * valor5 / 1024.0;delay_ms(10);set_adc_channel(5);valor6 = Read_ADC();canal6 = 5.0 * valor6 / 1024.0;delay_ms(10);set_adc_channel(6);valor7 = Read_ADC();canal7 = 5.0 * valor7 / 1024.0;delay_ms(10);set_adc_channel(7);valor8 = Read_ADC();canal8 = 5.0 * valor8 / 1024.0;delay_ms(10);mostrar();}} 34. A/D en C. Ejercicio 4. Termmetro con una NTCIUT Cuman NTSA0WB203 En este ejercicio se plantea disear un termmetro basado en una NTC modelo NTCSA0WB203, con una beta de 4050 y una resistencia a 25C de 20 k. Estas caractersticas se pueden ajustar as como la temperatura a medir en el men de edicin del componente. Nota: Ejercicio tomado de Compilador C CCS y simulador Proteus para Microcontroladores PIC de Eduardo Garca Breijo.Prof. Luis Zurita Microcontroladores II 35. Modificacin de los valores de la NTC enIUT Cuman ProteusCambiar por 25Cu otro valor de supreferencia.Prof. Luis ZuritaMicrocontroladores II 36. A/D en C. Ejercicio 4. Termmetro con una NTCIUT Cuman NTSA0WB203La NTC se linealiza mediante una resistencia R1 de 10k, el valor de la tensin de la NTC(VT) se puedeobtener mediante las siguientes ecuaciones(temperatura en k):Prof. Luis Zurita Microcontroladores II 37. A/D en C. Ejercicio 4. Termmetro con una NTC IUT Cuman NTSA0WB203 #include "16f877.h" #device adc=10 #fuses XT,NOWDT #use delay(clock=4000000) #include //Se incluye para los clculos matemticos #include void main() {float tv,tr,temp,y; //Variables de ecuacinint16 value;lcd_init();setup_adc_ports(ALL_ANALOG);setup_adc( ADC_CLOCK_INTERNAL );set_adc_channel( 0 );delay_us(10);Prof. Luis ZuritaMicrocontroladores II 38. A/D en C. Ejercicio 4. Termmetro con una NTC IUT Cuman NTSA0WB203while(true) {value = Read_ADC();tv = 5.0 * value / 1024.0;tr = tv * 10000.0 / (5.0 - tv);A = log(tr/20000.0);y = (1.0/298.15) + (A *(1.0/4050.0));temp=1.0/y;temp = temp -273.15;lcd_gotoxy(1,1);printf(lcd_putc,"TEMPERATURA");delay_ms(50);lcd_gotoxy(1,2);printf(lcd_putc,"T = %04.2fC", temp);delay_ms(50); }}Prof. Luis ZuritaMicrocontroladores II 39. A/D en C. Ejercicio 4. Termmetro con una NTC IUT Cuman NTSA0WB203Prof. Luis ZuritaMicrocontroladores II 40. PROTOTIPO DAQ USB CON PIC18F4550