Página principal

Tesina de seminario


Descargar 0.55 Mb.
Página9/10
Fecha de conversión18.07.2016
Tamaño0.55 Mb.
1   2   3   4   5   6   7   8   9   10

3.4. PROYECTO4: CONVERTIDOR ANALOGICO DIGITAL

3.4.1 OBJETIVO.-


Configurar el convertidor analógico digital.

Realizar mediciones mediante el sensor TNC intergrado del AvrButterfly.

Activar un led, que representa el Encendido de un Ventilador.

3.4.2 ENUNCIADO


Elaborar un programa en lenguaje C, que active un ventilador cuando la lectura del ADC0 ha alcanzado el valor Máximo decimal de 200. Y apagar el ventilador cuando el ADC0 ha alcanzado el valor mínimo decimal de 100, utilizar el NTC integrado del AvrButterfly. Ver grafica 3-19.

3.4.3 ESQUEMA DEL PROYECTO.


Figura 3-16: Esquema de Control de temperatura.



Figura 3-17: Diagrama Esquemático de sensor de temperatura interno del AvrButterfly.

El AvrButterfly tienen integrado un sensor NTC, en serie con una resistencia de 100k, esta está conectado al Puerto F, pin 0. El comportamiento de este sensor es de comportamiento logarítmico, lo implica un largo proceso de cálculo para obtener valores de temperatura exactos. Sin embargo mediantes métodos de cálculo se puede llegar a una aproximación muy aceptable. Sn embargo el proceso de señales no está dentro de este estudio, aquí se obtiene una conversión analógica a digital y las trabajaremos en forma binaria, es decir no se hará la conversión del valor binario al medidas de temperatura. Existe un valor Máximo, en el cual se prendera nuestro ventilador, y un valor mínimo en que se apagara.

Figura 3-18: ubicación del sensor NTC en el AvrButterfly.



Figura 3-19: Esquema de Encendido- apagado del Ventilador con relación al cambio de Temperatura.


3.4.4 DIAGRAMA DE FLUJO DEL PROYECTO.


Figura 3-20: diagrama de flujo principal de Control de Temperatura



Figura 3-21: Diagrama de Flujo de Interrupción ADC


3.4.5 CÓDIGO FUENTE.


//*****************************************************************************

//

// File Name : 'CUARTO.c'



// Title : CONTROL DE VENTILADOR POR MEDIO DE LECTURA DEL ADC0

//

//*****************************************************************************


// 4K-400

// +5---/\/\/\----+---\/\/\/\/\---gnd

// rref | NTC

//
#include

#include

#include

#include

#include

#include

#include

#include
#define BOOL char

#define FALSE 0

#define TRUE (!FALSE)

#define NULL 0

#define AUTO 3

#define INDICADOR 3


#include "lcd_functions.h"

#include "lcd_driver.h"


#define pLCDREG_test (*(char *)(0xEC))
//-----------------------
#define MAXIMO_VALOR 200

#define MINIMO_VALOR 100


void delay1s(void);

void adc_init(void);

void adc_start_conversion(uint8_t);

void init(void);


uint8_t ch;
char DATO;

char VENTILADOR;

//*****************************************************************************

//

// iNICIALIZACION DEL CONVERTIDOR



//

//*****************************************************************************

void adc_init(void)

{

//SELECION DEL VOLTAJE DE REFERENCIA



//AVCC CON CAPACITOR EXTERNO AREF pin

ADMUX|=(0<

//set prescaller ADC

ADCSRA|=(1<

//set sleep mode ADC noise reduction conversion

//set_sleep_mode(SLEEP_MODE_ADC);

}

//*****************************************************************************



//

// RUTINA PARA UNA SIMPLE CONVERSION

//

//*****************************************************************************



void adc_start_conversion(uint8_t channel)

{

//CANAL DE CONVERSION REALMENTE SOLO USAMOS EL CANAL 0 CORRESPONDIENTE A PF0;



ch=channel;

//set ADC channel

ADMUX=(ADMUX&0xF0)|channel;

//START CONVERSION CON INTERRUPCION HABILITADA AL FINALIZAR CONVERSION

//HABILITA INTERRUPCION GLOBAL

sei();


ADCSRA |= (1<}
//*****************************************************************************

//

// RETARDO DE 1s



//

//*****************************************************************************


//RETARDO 1s

void delay1s(void)

{

uint8_t i;



for(i=0;i<100;i++)

{

_delay_ms(10);



}

}
//*****************************************************************************

//

// init AVR



//

//*****************************************************************************


void init(void)

{
adc_init();

}
//*****************************************************************************

//

// ADC conversion complete service routine



//

//*****************************************************************************

ISR(ADC_vect)

{

// SE HA FINALIZADO LA LECTURA DEL DATO



uint16_t adc_value;

adc_value = ADCW;

//ALMACENA EL DATO DE LA CONVERSION

if(VENTILADOR == 0)

{

if(adc_value > MAXIMO_VALOR)



{

VENTILADOR = 1;

PORTE = PINE | (1<<7);

LCD_puts_f(PSTR("ON "),1);

}

}

else



{

if(adc_value < MINIMO_VALOR)

{

VENTILADOR = 0;



PORTE = PINE & (0<<7);

LCD_puts_f(PSTR("OFF "),1);

}

}


}
//*****************************************************************************

//

// PROGRAMA PRINCIPAL.



//

//*****************************************************************************

int main(void)

{

init();



LCD_Init();

VENTILADOR = 0X00;

LCD_puts_f(PSTR("TEMPERATURA"),1);

DDRE = 0XFF;

delay1s();

while(1)//LAZO INFINITO

{

//read LDR



//adc_start_conversion(0);
//_delay_ms(30);

//read potentiometer

adc_start_conversion(0);

_delay_ms(30);

//continue infinitely

}

return 0;



}


1   2   3   4   5   6   7   8   9   10


La base de datos está protegida por derechos de autor ©espanito.com 2016
enviar mensaje