You are on page 1of 7

www.monografias.

com

Sensor digital de temperatura


Indice 1. Objetivo del circuito 2. Conversor Anlogo/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. Cdigo fuente del programa para el PIC16F84A 8. Programa TermoPIC 9. Cdigo 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 propsito, el PIC16F84A y el LM35 se encuentran conectados por medio de un conversor anlogo/digital, el ADC0804. Una vez el PIC16F84A obtiene el dato binario del conversor correspondiente a la temperatura, lo enva al PC va serial, para ello se utiliza el circuito integrado MAX232. 2. Conversor Anlogo/Digital ADC0804 Un convertidor anlogo/digital es un circuito integrado que convierte seales anlogas en datos binarios: 0s y 1s. El convertidor analogo/digital ADC0804 es un circuito integrado capaz de convertir una muestra analgica entre 0v y 5v, en un valor binario de 8 dgitos binarios. Para saber la resolucin del convertidor tenemos que saber el valor mximo que la entrada de informacin utiliza y la cantidad mxima de la salida en dgitos binarios. Como ejemplo vamos a hacer los clculos para el ADC0804. Distribucin de pines Conversor ADC0804 Vcc: voltaje positivo de alimentacin AGND: tierra del sistema anlogo DGND: tierra del sistema digital Vin(+): terminal positiva del voltaje de entrada Vin(-): terminal negativa del voltaje de entrada DB7-DB0: salidas de la conversin 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 estn activas y se puede leer el dato WR: cuando va a low, el proceso de conversin se inicia INTR: genera una interrupcin de nivel low cuando finaliza el proceso de conversin Vref/2: este pin debe ser alimentado con la mitad del rango de voltaje analgico mximo 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 Caractersticas principales El circuito integrado LM35D es un sensor de temperatura cuya tensin de salida es linealmente proporcional con la temperatura en la escala Celsius (centgrada) . Posee una precisin aceptable para la aplicacin requerida, no necesita calibracin externa, posee slo 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 utilizacin : -55C < T < 150C

Precisin de : ~1,5C (peor caso) No linealidad : ~0,5C (peor caso)

4. Circuito Integrado MAX232 Este circuito integrado soluciona los problemas de niveles de voltaje cuando se requiere enviar seales digitales sobre una lnea RS-232. el MAX232 se usa en aquellas aplicaciones donde no se dispones de fuentes dobles de +12V; por ejemplo, en aplicaciones alimentados con bateras de una polaridad. El MAX232 necesita solamente una fuente de +5V para su operacin; un elevador de voltaje interno convierte el voltaje de +5V al doble de polaridad de +-12V. A continuacin se muestra la estructura interna del MAX232 y algunas de sus caractersticas. Circuito Integrado MAX232 5. Microcontrolador PIC16F84A Este PIC est fabricado con tecnologa CMOS de altas prestaciones y encapsulado en plstico con 18 pines. A continuacin se comenta brevemente la misin de cada uno de los pines. Vdd: Pin por el que se aplica la tensin positiva de la alimentacin. Vss: Pin conectado a tierra o negativo de la alimentacin. 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 lgico bajo, lo que se representa con el smbolo 3. su activacin origina reinicializacin o Reset del PIC. Tambin se usa este pin durante la grabacin de la memoria de programa para introducir por ella la tensin, Vpp, que est comprendida entre 12 y 14 V DC. Diagrama de conexin de pines del PIC16F84A RA0 RA4: Son 5 lneas de E/S digitales correspondientes a la Puerta A. La lnea RA4 multiplexa otra funcin 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 lneas de E/S digitales de la Puerta B. La lnea RB0 multiplexa otra funcin, que es la de servir como entrada a una peticin externa de una interrupcin, 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. Cdigo fuente del programa para el PIC16F84A ;Proyecto final de Microcontroladores ;Medicin digital de la temperatura ;mediante un LM35 y ADC0804 y envo ;de la temperatura al PC mediante un PIC16F84A ;y un MAX232 va RS-232 LIST P=16F84 ;***************************** ;Declaracin 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 paradaretlw 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. Cdigo 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.

Trabajo enviado por: Mauricio Alberto Orozco Salguero mao1@utp.edu.co Ocupacin: estudiante de ingeniera de sistemas y computacin (dcimo semestre). Fecha: noviembre de 2002. Titulo y categora: Sensor digital de temperatura con PIC. Categora: Hardware.

You might also like