Sistema de Medicion Electronica
  Codigo Completo del Programa
 
#include <avr/io.h>
#include <stdio.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <inttypes.h>
#include "lcd_lib.h"

#define ADC_REF 0x40

unsigned int read_adc(unsigned char adc_input);

int main( void )
{
 
  int Temperatura;
  double Sal_adc, Vin;
  char s_num[20];
 
 
    //  configura PORTA como entradas
    DDRA = 0x00;
     // configura PORTB as SALIDA
    DDRB = 0xFF;
    //  configura PORTC como salidas
    DDRC = 0xFF;
    //  configura PORTD como salida
    DDRD = 0xFF;


    ADMUX=ADC_REF;    //0x40     REFS0=1 (AREF= AVCC)
    ADCSRA=0x86;    //ADEN=1   ADPS2:1:0 = 110  Frecuencia del reloj del ADC
                    //de 125Khz   8M/32

    Sal_adc=0;
    Temperatura=0;                                            //de 125Khz   8M/32


    LCDinit();


 while (1)
  {

       _delay_ms(1000);

       Sal_adc=read_adc(0);    // 0    Canal 0 no dif
                           // 16   Modo diferencial con ganancia 1
                        // 9    Modo diferencial con ganancia 10
                        // 11    Modod diferencial con ganancia 20
 
   
Vin = Sal_adc*5/1023; //sal_adc = Vin*1024/Vref -- Voltage de entrada

    if (0<=Vin && Vin<=1.203)
    
    Temperatura= (Vin+0.453)/0.018;
        
    if (1.203<Vin && Vin<=2.005)
    
    Temperatura= (Vin-0.121)/0.012;

    if (2.005<Vin && Vin<=3.208)
    
    Temperatura= (Vin+0.97)/0.019;
    
    if (3.208<Vin && Vin<=5)
    
    Temperatura= (Vin+0.768)/0.018;


sprintf(s_num,"Temperatura=%dGrados",Temperatura);
        
    LCDclr();
    LCDGotoXY(0,0);
    lcd_puts(s_num, 16);

} //Fin  while principal
     

    return 0;
}


unsigned int read_adc(unsigned char adc_input)
{
                        
    ADMUX=adc_input | (ADC_REF & 0xFF);  //Selecciona el canal de entrada
    
    _delay_us(10);
    ADCSRA|=0x40;                        //ADSC =1 Inicia la conversión. Se coloca en 0
                                        //automaticamente al finalizar la conversión.

    while ((ADCSRA & 0x10)==0);            //Espera hasta que finalice la conversión
    ADCSRA|=0x10;                        //El bit se limpia colocándolo en 1
    return ADCW;                        //ADCH:ADCL
}

 
 
  Hoy habia 8 visitantes (9 clics a subpáginas) ¡Aqui en esta página!  
 
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis