Содержание
Всем привет! Хочу поделится одной простой схемкой для измерения температуры на микроконтроллере ATmega 16 и датчика температуры Lm35. Перед сборкой самого проекта я использовал Proteus для того что все хорошенько протестировать. Вместо ATmega 16 Можно взять любой другой, Atmega8 или 32. Для отображения температуры использовал 2 семисегментных индикатора. Температура выводится 2 цифрами, единица измерения градусы Цельсия.
Схема устройства
Как работает схема
Датчик температуры LM35 подключается к выводу 5 вольт и земпле а средний вывод к выводу ADC0 порта A микроконтроллера. На эту ножку мы подаем аналоговое значение сигнала. Который далее при помощи АЦП преобразутся в цифровой.
Как происходит измерение, к примеру мы измеряем температуру 25 град. Мы берем это значение и делим на 10 и округляем на до целого значения. Полученную 2-й ку мы выводим на первый индикатор.
Для получения второй цифры мы используем операцию 25%10 таким образом получаем значение 5, которое выводим на второй индикатор. Остальные элементы схемы также необходимы, про них не нужно забывать.
Устройство в сборе
Печатная плата устройства
Далее необходимо изготовить печатку. Для разводки платы использовалась программа 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. Светодиоды включаются по очереди, частоту...

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

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

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

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