Issuu on Google+

Practica #5 (Conversor AD, Voltimetro)

-Vamos a utilizar el conversor AD y haremos un voltímetro visualizándolo en la LCD. -El programa se inicia normalmente con todo lo básico, y vamos a usar dos variables tipo float para almacenar los datos leidos por el conversor y almacenar los datos de la conversion: #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje; void main (void) { } -Ahora viene lo nuevo, pero antes iniciamos la LCD: ////////////////////////////////////////////////////////////////// ADC // ADC Functions: SETUP_ADC(), SETUP_ADC_PORTS() (aka SETUP_PORT_A), // SET_ADC_CHANNEL(), READ_ADC() // Constants used for SETUP_ADC() are: #define ADC_OFF 0 // ADC Off #define ADC_CLOCK_DIV_2 0x100 #define ADC_CLOCK_DIV_4 0x04 #define ADC_CLOCK_DIV_8 0x01 #define ADC_CLOCK_DIV_16 0x05 #define ADC_CLOCK_DIV_32 0x02 #define ADC_CLOCK_DIV_64 0x06 #define ADC_CLOCK_INTERNAL 0x07 // Internal 2-6us // Constants used in SETUP_ADC_PORTS() are: #define NO_ANALOGS 0x0F // None #define ALL_ANALOG 0x00 // A0 A1 A2 A3 A5 B2 B3 B1 B4 B0 #define AN0_TO_AN11 0x03 // A0 A1 A2 A3 A5 B2 B3 B1 B4 #define AN0_TO_AN10 0x04 // A0 A1 A2 A3 A5 B2 B3 B1 #define AN0_TO_AN9 0x05 // A0 A1 A2 A3 A5 B2 B3 #define AN0_TO_AN8 0x06 // A0 A1 A2 A3 A5 B2 #define AN0_TO_AN4 0x0A // A0 A1 A2 A3 A5 #define AN0_TO_AN3 0x0B // A0 A1 A2 A3 #define AN0_TO_AN2 0x0C // A0 A1 A2 #define AN0_TO_AN1 0x0D // A0 A1 #define AN0 0x0E // A0 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje;


void main (void) { lcd_init(); setup_adc(adc_clock_internal); } -Siempre vamos a utilizar el reloj interno, y utilizamos la siguiente instrucción dependiendo de los canales que vayamos a usar; este micro solo cuenta con 9 canales y en este caso vamos a usar solo uno, el canal cero (AN0). #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje; void main (void) { lcd_init(); setup_adc(adc_clock_internal); setup_adc_ports(an0); } -Ya le indicamos al programa que vamos a utilizar el conversor AD ahora tenemos que escribir el programa y lo iniciamos indicando que canal vamos a usar porque si estamos usando varios canales el programa tiene que saber cual de esos vamos a usar y como en este caso usaremos el canal cero indicamos en la instrucción que vamos a usar el canal cero; después usamos un pequeño retardo para estabilizar el canal. Lo siguiente que vamos a escribir tiene que ir dentro de un while. #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje; void main (void) { lcd_init(); setup_adc(adc_clock_internal); setup_adc_ports(an0); while(true) { set_adc_channel(0); delay_us(10);

//si se va a usar otro canal solo cambiamos el numero.//

} }

-Luego de haber indicado el canal a trabajar tenemos que leer el canal y pasar el valor leído a una variable para poder hacer la conversión y poder usar ese valor en otra rutina si es necesario:


#include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje; void main (void) { lcd_init(); setup_adc(adc_clock_internal); setup_adc_ports(an0); while(true) { set_adc_channel(0); delay_us(10); vleida=read_adc();

//si se va a usar otro canal solo cambiamos el numero.//

} }

-Se me olvido como era esa operación  : #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c> float vleida,voltaje; void main (void) { lcd_init(); setup_adc(adc_clock_internal); setup_adc_ports(an0); while(true) { set_adc_channel(0); delay_us(10); vleida=read_adc(); voltaje=(vleida/255)*5; } }

-Lo siguiente y ultimo es visualizar el resultado de la conversión en la LCD, y haremos que nos muestre dos cifras decimales: #include <18f2550.h> #use delay(clock=8000000) #define use_portb_lcd true #include <lcd.c>


float vleida,voltaje; void main (void) { lcd_init(); setup_adc(adc_clock_internal); setup_adc_ports(an0); while(true) { set_adc_channel(0); delay_us(10); vleida=read_adc(); voltaje=(vleida/255)*5; lcd_gotoxy(1,1); printf(lcd_putc,"Voltios=" "%1.2f ",voltaje); } }


GUIA DE ADC