Содержание
Всем привет! Хочу поделится одной простой схемкой для измерения температуры на микроконтроллере 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 |
Скачать исходники
Полезные ссылки по проекту
Похожие записи
-
Светодиодная мигалка на микросхеме NE 555
Это простая схема двойного светодиодного мигающего сигнала. В качестве базовой схемы нестабильного мультивибратора используется таймер NE 555. Светодиоды включаются по очереди, частоту можно регулировать потенциометром.
-
Схема полицейской мигалки на микроконтроллере
Представленная схема полицейской мигалки на микроконтроллере и светодиодах может работать в 16 различных режимах. Режим выбирается при помощи одной кнопки, и собрана на микроконтроллере PIC12F675 с полевыми транзисторами.
-
Последовательный интерфейс I2C
Последовательный интерфейс I2C (также его обозначается как IIC) довольно популярный последовательный интерфейс. Свою популярность он получил за неплохую скорость передачи информации. В основном до 100 кбит в секунду, а современных устройствах может достигать и до 400 кбит/с, дешевизной и простотой реализации.
-
Последовательный периферийный интерфейс SPI
Последовательный периферийный интерфейс SPI (Serial Peripheral Interface) — последовательный стандарт передачи данных. Предназначен для сопряжения микроконтроллеров и периферийных устройств. SPI интерфейс иногда называют четырёхпроводным интерфейсом.
-
Подключение кнопки к микроконтроллеру AVR
В это примере подключим и научимся обрабатывать события нажатия кнопок при помощи микроконтроллера AVR. Другими словами мониторить состояние кнопок, и при каких либо изменениях делать что либо. К примеру включать выключать нагрузку, настаивать таймер или настаивать время и т.д. да все что угодно.
-
Распиновка наиболее популярных микроконтроллеров AVR
Ниже представлена распиновка наиболее ходовых микроконтроллеров семейства AVR. Описание выводов, их назначение.