PROGRAMA DE ADQUISICIÓN DE DATOS (TEMPERATURA, LM35) MEDIANDE EL MÓDULO ADC)
Enviado por leinad13 • 19 de Noviembre de 2015 • Práctica o problema • 728 Palabras (3 Páginas) • 275 Visitas
/*PROGRAMA DE ADQUISICIÓN DE DATOS (TEMPERATURA, LM35) MEDIANDE EL MÓDULO
* ADC DEL PIC18F4550 PARA POESTRIORMENTE MANDAR LOS DATOS OBTENIDOS A LA
* USART Y SER LEÍDOS EN LA PC CON LABVIEW*/
#include<p18F4550.h> //PIC UTILIZADO
#include<delays.h> //INCLUYE LIBRERÍA DE RETARDOS
#include<usart.h> //INCLUYE LIBRERÍA DE COMUNICACIÓN USART
#include<adc.h> //INCLUYE LIBRERÍA DE MÓDULO ADC
#include<math.h> //INCLUTE LIBRERÍA PARA OPERACIONES MATEMÁTICAS
#pragma config FOSC=XT_XT //TIPO DE OSCILADOR (4MHz)
void ISR (void);
#pragma code interruptHigh=0x08
void interruptHigh (void){
_asm GOTO ISR _endasm
}
#pragma code
#pragma interrupt ISR
int temp;
char datoRX;
void ISR (void){
if(PIR1bits.RCIF){
datoRX=getcUSART();
PIR1bits.RCIF=0;
}
}
void configuraADC(void){
// configuración de convertidor A/D
OpenADC( ADC_FOSC_4 & ADC_RIGHT_JUST & ADC_2_TAD ,
ADC_INT_ON & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 11 );
}
int leer(unsigned char canal){
unsigned int result; // VARIABLE LOCAL
SetChanADC(canal); // SELECCIÓN DE CANAL
ConvertADC(); // Inicia conversión
while( BusyADC() ); // Espera a que se compete
result = ReadADC(); // GUARDA LA LECTURA EN VARIBLE LOCAL
return result;
}
void main( void ){
INTCONbits.GIE=1; //Interrupciones globales Habilitadas
PIE1bits.RCIE=1; //Habilita interrupción por recepción de USART
IPR1bits.RCIP=1; //Alta prioridad en interrupcion del USART
RCONbits.IPEN=1;
ADCON0bits.ADON=1; //Habilita entradas Analógicas
TRISA=0xFF; //Puerto A como entradas
//Configuración de USART
OpenUSART( USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE &
USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 25 );
while(1){
if(datoRX=='A'){
leer(ADC_CH0); //lee canal 1 del ADC
temp=leer(ADC_CH0); //temp = valor del ADC
temp=temp/4; //Convertir el valor leido en su reciproco de 8 bits
while(BusyUSART()); //espera a que el usart se desocupe
putcUSART(temp); //manda el valor de 8 bits leido por el usart
Delay10TCYx( 250 ); //espera
}
if(datoRX=='B'){
leer(ADC_CH1);
temp=leer(ADC_CH1);
...