Sensor de Temperatura
Sensor de Temperatura
Sensor de Temperatura
DGIT
INGENIERIA ELECTRONICA
MICROCONTROLADORES
GRUPO: 6B
PRESENTAN:
ARREGUIN MIRANDA JORGE LUIS
SALOMON MEDINA ALVARO EDUARDO
Microprocesador.
Periféricos (unidades de
entrada/salida).
Memoria.
DESARROLLO
Durante la realización de la práctica del sensor de temperatura nos dimos a la
tarea de configurar los fuses y el puerto C en el microcontrolador y en el
quemador todo esto para poder utilizar una pantalla LCD y poder realizar el
sensor de temperatura para el cual utilizamos el sensor LM35 y un amplificador
operacional.
Para esto el profesor nos dio una guía con los pasos a seguir para poder
configurar el quemador y el puerto C los cuales se muestran a continuación:
Primero hay que leer los fuses
El AVR8 Burn facilita modificar los fuses, por ejemplo si se desea modificar la frecuencia
interna del oscilador a 8Mhz se da click en fuses.
Posteriormente en opciones de oscilador/reloj, después en oscilador RC interno
calibrado y se selecciona 8Mhz en la frecuencia nominal.
Y por último se da clic en escribir fuses. (se tiene que tener conectado el programador al micro
y la pc.)
Después de esto a todos los programas que se realicen se deberá fijar la frecuencia de 8mhz en
el codevision (wizard).
CRISTAL EXTERNO
Una vez que se modificaron los fuses para trabajar con cristal exteno lo siguiente es
colocar el cristal y los capacitores.
La configuración de los fuses queda guardada (NO ES NECESARIO REPETIR LOS PASOS),
así que a los programas que se quieran guardar en el micro deberán de llevar la frecuencia de
16Mhz en el wizard.
Código
/*******************
This program was created by the CodeWizardAVR V3.24
Automatic Program Generator
© Copyright 1998-2015 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 10/05/2018
Author :
Company :
Comments:
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size :0
Data Stack size : 256
*******************/
#include <io.h>
#include <delay.h>
void main(void)
{
// Declare your local variables here
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<<DDB7) | (0<<DDB6) | (0<<DDB5) | (0<<DDB4) | (0<<DDB3) |
(0<<DDB2) | (0<<DDB1) | (0<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) |
(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<<DDC7) | (0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) |
(0<<DDC2) | (0<<DDC1) | (0<<DDC0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<<PORTC7) | (0<<PORTC6) | (0<<PORTC5) | (0<<PORTC4) |
(0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0);
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<<DDD7) | (0<<DDD6) | (0<<DDD5) | (0<<DDD4) | (0<<DDD3) |
(0<<DDD2) | (0<<DDD1) | (0<<DDD0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<<PORTD7) | (0<<PORTD6) | (0<<PORTD5) | (0<<PORTD4) |
(0<<PORTD3) | (0<<PORTD2) | (0<<PORTD1) | (0<<PORTD0);
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<<WGM00) | (0<<COM01) | (0<<COM00) | (0<<WGM01) | (0<<CS02)
| (0<<CS01) | (0<<CS00);
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) |
(0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12)
| (0<<CS11) | (0<<CS10);
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<<AS2;
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (0<<CS22) |
(0<<CS21) | (0<<CS20);
TCNT2=0x00;
OCR2=0x00;
// USART initialization
// USART disabled
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (0<<TXEN) |
(0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) |
(1<<ADPS2) | (0<<ADPS1) | (0<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);
// SPI initialization
// SPI disabled
SPCR=(0<<SPIE) | (0<<SPE) | (0<<DORD) | (0<<MSTR) | (0<<CPOL) |
(0<<CPHA) | (0<<SPR1) | (0<<SPR0);
// TWI initialization
// TWI disabled
TWCR=(0<<TWEA) | (0<<TWSTA) | (0<<TWSTO) | (0<<TWEN) | (0<<TWIE);
while (3)
{
T=read_adc(0);
dato=(T*1000)/51; // Para recuperar tres digitos lo multiplicas *1000 para
recuperar 3 datos, porque al hacer la regla de 3 me daria .490 lo multiplico por
mil.
lcd_gotoxy(2,0);
lcd_putsf("TEMPERATURA:");
lcd_gotoxy(10,1);
lcd_putsf("C");
lcd_gotoxy(7,1); //En estas lineas unicamente colocamos la posicion
de digitos
lcd_putsf(".");
lcd_gotoxy(9,1);
lcd_putchar(0xdf);
lcd_gotoxy(5,1);
lcd_putchar(0x30 + D); //Colocamos las lineas vistas en clase, ponemos
el codigo 0x30 y le sumamos C, U y de.
lcd_gotoxy(6,1);
lcd_putchar(0x30 + U);
lcd_gotoxy(8,1);
lcd_putchar(0x30 + de);
}
}
Resultados
CONCLUSIONES
Arreguin Miranda Jorge Luis: En general al concluir con la práctica del sensor
de temperatura puedo decir que fue muy interesante pero además tuvo sus
complicaciones ya que teníamos que hacer que el micro funcionara junto con el
sensor LM35 y con un amplificador operacional y al estar realizando el código y
al momento de explicarlo al profesor hubo algunos problemas pero finalmente
corregimos los errores en el código y concluimos satisfactoriamente la práctica.
Salomón Medina Álvaro Eduardo: En esta práctica se observó el
funcionamiento de un sensor de temperatura conectado a nuestro micro, para
después en nuestra pantalla LCD poder leer la lectura en la misma.
Con esta práctica pude aprender a juntar o sincronizar la parte de hacer
conversiones, imprimir en la pantalla y usar amplificadores operacionales.
En general me parece una práctica muy interesante que, aunque nos costó algo
de trabajo terminar, fue muy significativa para aprender a usar los
microcontroladores.