Всем привет! Хочу поделится одной простой схемкой для измерения температуры на микроконтроллере ATmega 16 и датчика температуры  Lm35.  Перед сборкой самого проекта я использовал Proteus для того что все хорошенько протестировать. Вместо ATmega 16 Можно взять любой другой, Atmega8 или 32. Для отображения температуры использовал 2 семисегментных индикатора. Температура выводится 2 цифрами, единица измерения градусы Цельсия.

Схема устройства

Схема измерения температуры при помощи датчика Lm35 и ATmega 16

Как работает схема

Датчик температуры LM35 подключается к выводу 5 вольт и земпле а средний вывод к выводу ADC0 порта A микроконтроллера. На эту ножку мы подаем аналоговое значение сигнала. Который далее при помощи АЦП преобразутся в цифровой.

Как происходит измерение, к примеру мы измеряем температуру 25 град. Мы берем это значение и делим на 10 и округляем на до целого значения. Полученную 2-й ку мы выводим на первый индикатор.

Для получения второй цифры мы используем операцию 25%10 таким образом получаем значение 5, которое выводим на второй индикатор. Остальные элементы схемы также необходимы, про них не нужно забывать.

Устройство в сборе

Измерение температуры датчиком Atmega16

Печатная плата устройства

Далее необходимо изготовить печатку. Для разводки платы использовалась программа Eagle. Тут можно сделать разводку и по другому, у меня получилось как на рисунке выше.

Печатная плата

Программа измерения температуры

Вот и сама программа, ее также можно скачать архивом внизу статьи. После компиляции программы заливаем полученный файл в сам микроконтроллер.  О там как прошить микроконтроллер говорилось ранее.


/*
 * Tempsensor.c
 *
 * Created: 2016-10-22 5:04:26 PM
 * Author : alaa nasef _ bio medical
 */ 
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

//global var
int tempC;
int first,last;

int readADC(char channel)
{
	ADMUX = (3 << REFS0)|(1<<ADLAR)|(channel << MUX0);    // VREF=2.56V, 8-bit, channel #0 is on PA0
	_delay_us(10);              // allow multiplexer to settle
	ADCSRA |= (1<<ADSC);        // Start Conversion
	while (ADCSRA & (1<<ADSC)); // wait for completion
	return ADCH;                // 8-bit result because we use ADLAR
}

void led_display(int x)
{
   switch (x)
   {
   case 0: PORTD=0XC0;break;
   case 1: PORTD=0XF9;break;
   case 2: PORTD=0XA4;break;
   case 3: PORTD=0XB0;break;
   case 4: PORTD=0X99;break;
   case 5: PORTD=0X92;break;
   case 6: PORTD=0X82;break;
   case 7: PORTD=0XF8;break;
   case 8: PORTD=0X80;break;
   case 9: PORTD=0X90;break;
   default: break;
   }
   
  
   	
}

int main(void)
{
	DDRC =0b11111111;
	DDRD =0b11111111;
	
	ADCSRA = (1<<ADEN)|(1<< ADPS1)|(1<<ADPS2);        // Enable ADC , div64
	
	TIMSK=(1<<TOIE0) ;  // enable timer overflow interrupt for Timer0
	TCNT0=0x00;    // set timer0 counter initial value to 0
	TCCR0 = (1<<CS01) ;   // start timer0 with /8 prescaler
	sei();    // enable interrupts
	
	while (1) {
		tempC = readADC(0);       // 10mV per C.  full-scale is 2.56V i.e. 256C
	}
	return 0;	
}
 ISR(TIMER0_OVF_vect) {
	 // display temp
	 first=tempC/10;
	 last=tempC%10;
	 //PORTC&=~(1<<PC0);
	 //PORTC&=~(1<<PC1);
	 led_display(first);
	 PORTC|=(1<<PC0);
	 PORTC&=~(1<<PC1);
	 _delay_us(1000);
	 PORTC&=~(1<<PC0);
	 PORTC&=~(1<<PC1);
	 led_display(last);
	 PORTC&=~(1<<PC0);
	 PORTC|=(1<<PC1);
	 _delay_us(1000);
 }
Список радиодеталей
Обозначание Наименование Номинал Количество
1 U1 Микроконтроллер Atmega 16 1
2 Семисегментные индикаторы 2
3 LM35 Датичк температуры 1
4 Резистор 10 кОм 1
5 R2-R9 Резистор 300 Ом 8
6 С1,С2 Конденсатор 100 нФ 2
7 Индуктивность 100 uH
Скачать исходники
Полезные ссылки по проекту

Похожие записи

Память микроконтроллера. Виды памяти микроконтроллеров

Практически все современные микроконтроллеры имеют на своем борту 3 вида  памяти: Виды памяти микроконтроллеров память программ FLASH; оперативная память (ОЗУ) SRAM (Static RAM); ...

Светодиодная мигалка на микросхеме NE 555

Это простая схема двойного светодиодного мигающего сигнала. В качестве базовой схемы нестабильного мультивибратора используется таймер NE 555. Светодиоды включаются по очереди, частоту...

Схема полицейской мигалки на микроконтроллере

Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере...

Последовательный интерфейс I2C

Последовательный интерфейс I2C (также его обозначается как IIC) довольно популярный последовательный интерфейс. Свою популярность он получил за неплохую скорость передачи информации. В...

Последовательный периферийный интерфейс SPI

Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных. Предназначен для сопряжения микроконтроллеров и периферийных устройств. SPI...

Подключение кнопки к микроконтроллеру AVR

В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR. Другими словами мониторить состояние кнопок, и при каких либо изменениях делать что...

Только полноправные пользователи могут оставлять комментарии. Войдите , пожалуйста.