Monografias.com > Tecnología
Descargar Imprimir Comentar Ver trabajos relacionados

Sensor digital de temperatura




Enviado por Mauricio Orozco



    Indice
    1.
    Objetivo del circuito

    2. Conversor Análogo/Digital
    ADC0804

    3. Sensor de temperatura
    LM35

    4. Circuito Integrado
    MAX232

    5. Microcontrolador
    PIC16F84A

    6. Diagrama de flujo del programa para
    programar el PIC16F84A

    7. Código fuente del programa
    para el PIC16F84A

    8. Programa TermoPIC
    9. Código fuente del programa
    TermoPIC

    1. Objetivo del
    circuito

    El circuito que se ha construido, consiste en un sensor
    de temperatura
    LM35, el cual otorga al PIC16F84A el valor de la
    temperatura en el ambiente, para
    tal propósito, el PIC16F84A y el LM35 se encuentran
    conectados por medio de un conversor análogo/digital, el
    ADC0804. Una vez el PIC16F84A obtiene el dato binario del
    conversor correspondiente a la temperatura, lo envía al PC
    vía serial, para ello se utiliza el circuito integrado
    MAX232.

    2.
    Conversor Análogo/Digital ADC0804

    Un convertidor análogo/digital es un circuito
    integrado que convierte señales análogas en
    datos
    binarios: 0s y 1s.
    El convertidor analogo/digital ADC0804 es un circuito integrado
    capaz de convertir una muestra
    analógica entre 0v y 5v, en un valor binario de 8
    dígitos binarios. Para saber la resolución del
    convertidor tenemos que saber el valor máximo que la
    entrada de información utiliza y la cantidad
    máxima de la salida en dígitos binarios. Como
    ejemplo vamos a hacer los cálculos para el
    ADC0804.

    Distribución de pines

    Conversor ADC0804
    Vcc: voltaje positivo de alimentación
    AGND: tierra del
    sistema
    análogo
    DGND: tierra del sistema digital
    Vin(+): terminal positiva del voltaje de entrada
    Vin(-): terminal negativa del voltaje de entrada
    DB7-DB0: salidas de la conversión digital, con DB7 el MSB
    y DB0 el LSB
    CLKin: entrada de reloj
    CLKr: salida del reloj cuya frecuencia depende de una resistencia y un
    condensador externos
    CS: chip select, para que el ACD0804 funciones debe
    estar en low
    RD: cuando este pin esta en low, las salidas tristate
    están activas y se puede leer el dato
    WR: cuando va a low, el proceso de
    conversión se inicia
    INTR: genera una interrupción de nivel low cuando finaliza
    el proceso de conversión
    Vref/2: este pin debe ser alimentado con la mitad del rango de
    voltaje analógico máximo que va a recibir el
    ADC0804 por el pin Vin(+). Ejemplo: para un rango de entrada
    entre 0,5v y 3,5v el valor de Vref/2 será igual a: (3,5
    – 0,5 )/2 o sea 1,5v

    3.
    Sensor de temperatura LM35

    El sensor de temperatura utilizado, es el circuito
    integrado LM35D de National
    Semiconductors
    Características principales
    El circuito integrado LM35D es un sensor de temperatura cuya
    tensión de salida es linealmente proporcional con la
    temperatura en la escala Celsius
    (centígrada) . Posee una precisión aceptable para
    la aplicación requerida, no necesita calibración
    externa, posee sólo tres terminales, permite el sensado
    remoto y es de bajo costo

    • Factor de escala : 10mV/ºC ( garantizado entre
      9,8 y 10,2mV/ºC)
    • Rango de utilización : -55ºC < T <
      150ºC
    • Precisión de : ~1,5ºC (peor
      caso)
    • No linealidad : ~0,5ºC (peor caso)

    4.
    Circuito Integrado MAX232

    Este circuito integrado soluciona los problemas de
    niveles de voltaje cuando se requiere enviar señales
    digitales sobre una línea RS-232. el MAX232 se usa en
    aquellas aplicaciones donde no se dispones de fuentes dobles
    de +12V; por ejemplo, en aplicaciones alimentados con
    baterías de una polaridad. El MAX232 necesita solamente
    una fuente de +5V para su operación; un elevador de
    voltaje interno convierte el voltaje de +5V al doble de polaridad
    de +-12V. A continuación se muestra la estructura
    interna del MAX232 y algunas de sus
    características.

    Circuito Integrado MAX232

    5.
    Microcontrolador PIC16F84A

    Este PIC está fabricado con tecnología CMOS de
    altas prestaciones y
    encapsulado en plástico
    con 18 pines.
    A continuación se comenta brevemente la misión de
    cada uno de los pines.
    Vdd: Pin por el que se aplica la tensión positiva de la
    alimentación.
    Vss: Pin conectado a tierra o negativo de la
    alimentación.
    OSC1 / CLKIN: Pin por el que se aplica la entrada del circuito
    oscilador externo que proporciona la frecuencia de trabajo del
    microcontrolador.
    OSC2 / CLKOUT: Pin auxiliar del circuito oscilador.
    MCLR#: Este pin es activado con un nivel lógico bajo, lo
    que se representa con el símbolo 3. su activación
    origina reinicialización o Reset del PIC.
    También se usa este pin durante la grabación de
    la memoria de
    programa para
    introducir por ella la tensión, Vpp, que está
    comprendida entre 12 y 14 V DC.

    Diagrama de conexión de pines del PIC16F84A
    RA0 – RA4: Son 5 líneas de E/S digitales
    correspondientes a la Puerta A.
    La línea RA4 multiplexa otra función
    expresado por TOCKI. En este segundo caso sirve para recibir una
    frecuencia externa para alimentar al temporizador interno
    TMR0.
    RB0 – RB7: Estos 8 pines corresponden a las 8 líneas
    de E/S digitales de la Puerta B.
    La línea RB0 multiplexa otra función, que es la de
    servir como entrada a una petición externa de una
    interrupción, por eso se la denomina RB0 / INT.

    6. Diagrama de flujo
    del programa para programar el PIC16F84A

    Diagrama de flujo de la subrutina
    reloj

    Diagrama de flujo de la subrutina
    enviar

    Diagrama de flujo de la subrutina
    delay

    7. Código
    fuente del programa para el PIC16F84A

    ;Proyecto final de
    Microcontroladores
    ;Medición digital de la temperatura
    ;mediante un LM35 y ADC0804 y envío
    ;de la temperatura al PC mediante un PIC16F84A
    ;y un MAX232 vía RS-232
    LIST P=16F84
    ;*****************************
    ;Declaración de registros
    status equ 0x03
    PORTA equ 0x05
    PORTB equ 0x06
    carry equ 0
    TX equ 1
    WR equ 2
    CLK equ 3
    INTR equ 4
    loops equ 0x0c
    r0d equ 0x0d
    r0e equ 0x0e
    trans equ 0x0f
    org 0
    goto inicio
    org 5
    ;****************************
    ;Subrutina reloj, que se encarga de dar pulsos al ADC0804
    reloj bsf PORTA,CLK ;sube la linea del reloj
    movlw 0x1F
    movwf loops ;retardo
    reloj2 decfsz loops
    goto reloj2
    bcf PORTA,CLK ;baja la linea de reloj
    movlw 0x1F
    movwf loops ;retardo
    reloj3 decfsz loops
    goto reloj3
    return
    ;Fin de la subrutina reloj
    ;****************************
    ;Subrutina delay para transmitir un bit
    delay movlw .166 ;cargar para 833 microseg aproximadamente
    startup movwf r0e ;llevar a cabo el retardo
    redo nop ;limpiar circuito de vigilancia
    nop
    decfsz r0e
    goto redo
    retlw 0
    ;Fin de la subrutina delay
    ;****************************
    ;Subrutina enviar, envia el valor de la temperatura
    ;al PC de manera serial
    enviar movwf trans ;llevar el contenido de w a transmision
    xmrt movlw 8 ;cargar con el numero de bits
    movwf r0d ;el contador
    bcf PORTA,TX ;colocar la linea de transmision en bajo
    call delay ;para generar bit de arranque
    xnext bcf PORTA,TX ;colocar la linea de transmision en bajo
    bcf status,carry ;limpiar el carry
    rrf trans ;rotar registro de
    transmision
    btfsc status,carry ;preguntar por el carry
    bsf PORTA,TX ;si es uno, colocar linea en alto
    call delay
    decfsz r0d ;decrementar el contador, saltar si cero
    goto xnext ;repetir hasta transmitir el dato
    bsf PORTA,TX ;colocar la linea de transmision en alto
    call delay ;llamar retardo 1 bit -bit de parada-
    retlw 0
    ;Fina de la subrutina enviar
    ;****************************
    ;Inicio del programa
    inicio bsf status,5
    movlw 0x11
    movwf PORTA
    movlw 0xFF
    movwf PORTB
    bcf status,5
    bsf PORTA,TX ;colocar la linea de transmision en alto
    bcf PORTA,WR ;colocar en bajo WR para resetear el ADC
    movlw 0x1F
    movwf loops ;retardo
    salto1 decfsz loops
    goto salto1
    bsf PORTA,WR ;colocar en alto WR para iniciar la conversion
    movlw 0x1F
    movwf loops ;retardo
    salto2 decfsz loops
    goto salto2
    pulsos call reloj ;llamar a la subrutina reloj
    btfsc PORTA,INTR ;preguntar se INTR es cero, si lo es saltar
    goto pulsos
    movf PORTB,w ;cargar el dato binario en w
    call enviar ;llamar a la subrutina enviar
    goto inicio
    ;Fin del programa principal
    ;*****************************
    end

    Grafica Del
    Circuito

    8. Programa
    TermoPIC

    El programa que se utiliza para visualizar la
    temperatura en el PC se llama TermoPIC, el cual se ha
    desarrollado en lenguaje
    Delphi.
    Nota importante: para que el programa funcione, debe bajarse de
    Internet el
    componente para delphi conocido como TComport

     

    9.
    Código fuente del programa TermoPIC

    unit TermoPIC;
    interface

    uses
    Windows,
    Messages, SysUtils, Classes, Graphics, Controls, Forms,
    Dialogs,
    Comport, StdCtrls, ExtCtrls, Buttons, Gauges;
    type
    TForm1 = class( TForm )
    GroupBox1: TGroupBox;
    shPortOpen: TShape;
    StaticText6: TStaticText;
    shError: TShape;
    StaticText11: TStaticText;
    cbPorts: TComboBox;
    StaticText1: TStaticText;
    ComPort1: TComPort;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    Image1: TImage;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    GroupBox2: TGroupBox;
    Gauge1: TGauge;
    Label4: TLabel;
    Label5: TLabel;
    procedure btnOpenClick( Sender: TObject );
    procedure btnCloseClick( Sender: TObject );
    //procedure btnSendClick( Sender: TObject );
    procedure Button6Click( Sender: TObject );
    procedure Button7Click( Sender: TObject );
    procedure Button8Click( Sender: TObject );
    procedure Button9Click( Sender: TObject );
    procedure FormCreate( Sender: TObject );
    procedure FormDestroy( Sender: TObject );
    procedure ComPort1PortOpen( Sender: TObject );
    procedure ComPort1ReceiveCallBack( Data: string );
    procedure ComPort1PortClose(Sender: TObject);
    //procedure Edit2KeyPress( Sender: TObject; var Key: Char );
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    Form1 : TForm1;
    Implementation
    {$R *.DFM}
    //==========================================
    procedure TForm1.FormCreate( Sender: TObject );
    begin
    EnumPorts( cbPorts.Items );
    if cbPorts.Items.Count > 0 then
    cbPorts.ItemIndex := 0; // show first available port
    end;
    //===========================================
    procedure TForm1.FormDestroy( Sender: TObject );
    begin
    ComPort1.Free;
    end;
    //============================================
    procedure TForm1.btnOpenClick( Sender: TObject );
    begin
    cbPorts.Enabled := false;
    ComPort1.Port := cbPorts.Items[cbPorts.ItemIndex];
    ComPort1.Open;
    end;
    //=============================================
    procedure TForm1.btnCloseClick( Sender: TObject );
    begin
    ComPort1.Close;
    cbPorts.Enabled := true;
    label1.Caption:='0';
    Gauge1.Progress:=0;
    end;
    //===================================================
    procedure TForm1.ComPort1ReceiveCallBack( Data: string );
    var
    i,temperatura: longint;
    begin
    Temperatura:=Ord(Data[1]);
    Temperatura:= (Temperatura*100) div 256;
    Image1.Visible := not Image1.Visible;
    label1.Caption:=IntToStr(Temperatura);
    gauge1.Progress:=Temperatura;
    for i:=0 to 100000000 do
    begin
    end;
    end;
    //===============================================
    procedure TForm1.ComPort1PortOpen( Sender: TObject );
    begin
    shPortOpen.Brush.Color :=
    clYELLOW;
    end;
    //===========================================================
    (*procedure TForm1.Edit2KeyPress( Sender: TObject; var Key: Char
    );
    begin
    if Key = #13 then
    begin
    BtnSendClick( Sender );
    Key := #0;
    end;
    end; *)
    //===========================================
    (*procedure TForm1.btnSendClick( Sender: TObject );
    begin
    ComPort1.send( edit2.Text + #13#10 );
    end; *)
    //===========================================
    procedure TForm1.Button6Click( Sender: TObject );
    begin
    ComPort1.SetRTS( true );
    end;
    //===========================================
    procedure TForm1.Button7Click( Sender: TObject );
    begin
    ComPort1.SetRTS( false );
    end;
    //===========================================
    procedure TForm1.Button8Click( Sender: TObject );
    begin
    ComPort1.SetDTR( true );
    end;
    //============================================
    procedure TForm1.Button9Click( Sender: TObject );
    begin
    ComPort1.SetDTR( false );
    end;
    procedure TForm1.ComPort1PortClose(Sender: TObject);
    begin
    shPortOpen.Brush.Color:=clGray;
    end;
    end.

     

     

     

     

    Autor:

    Mauricio Alberto Orozco Salguero

    Ocupación: estudiante de ingeniería
    de sistemas y computación (décimo semestre).
    Fecha: noviembre de 2002.
    Titulo y categoría: Sensor digital de temperatura con PIC.
    Categoría: Hardware.

    Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

    Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

    Categorias
    Newsletter