Всем привет! Хочу поделится одной простой схемкой для измерения температуры на микроконтроллере 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
Скачать исходники
Полезные ссылки по проекту
Только полноправные пользователи могут оставлять комментарии. Войдите , пожалуйста.

Популярные записи

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

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

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

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

Распиновка наиболее популярных микроконтроллеров AVR

Ниже представлена распиновка наиболее ходовых микроконтроллеров семейства AVR.  Описание выводов, их...

Пишем свою первую программу на микроконтроллере AVR

Решил начать осваивать микроконтроллеры (далее МК) AVR. Думал что все просто раз и прошил микроконтроллера, но...