راه-اندازی-سنسور-lm35-با-avr

پروژه راه اندازی سنسور دما LM35 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C

0

راهنمای راه اندازی سنسور دما LM35 با استفاده از مجموعه آموزشی AVR WIZARD به زبان C

هدف از این آموزش راه اندازی واحد ADC میکروکنترلر AVR  به زبان  C  توسط مجموعه آموزشی AVR WIZARD میباشد    ( شما می توانید سنسور های آنالوگ مشابه را به این روش راه اندازی نمایید )

لوازم مورد نیاز

  1. برد اصلی AVR WIZARD
  2. برد جانبی SENSOR SHIELD
  3. LCD2X16
  4. تغذیه 9 ولت

سنسور دما LM35

ولتاژ خروجی سنسور Lm35 متناسب با درجه سانتیگراد است. وضوح Lm35 10 میل ولت است.بدین معنی که 10 میلی ولت نشان دهنده یک درجه سانتیگراد است. بنابراین اگر خروجی Lm35،100میلی ولت شود ، دمای معادل آن در سانتیگراد، 100/10 = 10 درجه سانتیگراد خواهد بود. Lm35 می تواند از -50 درجه سانتیگراد تا 150 درجه سانتیگراد اندازه گیری کند.

LM35 پایه های سنسور
LM35 پایه های سنسور

تصویر زیر بلوک عملکردی یک سنسور LM35 معمولی است که می توانید در برگه اطلاعات آن پیدا کنید:

بلوک عملکرد LM35
بلوک عملکرد LM35

آنچه این بلوک دیاگرام نمایش می دهد این است:

1) یک ولتاژ وابسته به دما را در ترمینال N دیود با استفاده از تقویت کننده A2 ایجاد می کند تا خروجی را به پین Vout دهد.

2) از این دو ترانزیستور برای ایجاد یک مرجع ولتاژ پهنای باند یعنی یک مرجع ولتاژ ثابت، صرف نظر از تغییرات دما و منبع تغذیه استفاده می شود.

3) و به همین دلیل است که می توانید LM35 را با استفاده از هر ولتاژ بین 4 تا 20 ولت تغذیه کنید.

مدار سنسور LM35

از آنجا که خروجی این سنسور آنالوگ بوده، با هر یک از کانال های ADC میکرو می توان آن را خواند.

محل قرارگیری  سنسور LM35 در برد SENSOR_SHIELD مجموعه آموزشی AVR WIZARD

در برد شیلد سنسور موسوم به SENSOR_SHIELD مدار راه انداز این سنسور طراحی شده است و کاربر به راحتی شروع به کدنویسی می کند.

محل قرار گیری سنسور LM35
محل قرار گیری سنسور LM35

نحوه برنامه نویسی و خواندن مقادیر سنسور LM35

فرض کنید از پین Vout مقدار دیجیتال 65 را از ADC میکرو بدست می آوریم.می دانیم که 1023 مطابق 5v است. بنابراین 350 با (5/1023) * 65 مطابقت دارد که ولتاژ خروجی را به ما می دهد.

خروجی سنسورLM35
خروجی سنسورLM35

برای تبدیل این ولتاژ به دما در درجه سانتیگراد ، می خواهیم از ضریب مقیاس افزایش 0.01 ولت در درجه سانتیگراد استفاده کنیم.هر1v   ، 100درجه سلسیوس را به ما می دهد بنابراین ولتاژ محاسبه شده: ولتاژ ضرب شده در100 را محاسبه می کندکه دمای اطراف به درجه سانتیگراد است.

مقدار محاسبه شده دما LM35
مقدار محاسبه شده دما LM35

کد C برنامه:

[cpp]
/*******************************************************
This program was created by the
CodeWizardAVR V3.12 Advanced
Automatic Program Generator
© Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date : 05/05/2019
Author :
Company :
Comments:

Chip type : ATmega16A
Program type : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*******************************************************/

#include <mega16a.h>

#include <delay.h>

// Alphanumeric LCD functions
#include <alcd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Declare your global variables here
//unsigned char temp[30];
char i = 0;
char lm35[10];
float lm35_value = 0.00;
float lm35_av = 0;
// Voltage Reference: AVCC pin
#define ADC_VREF_TYPE ((0<<REFS1) | (1<<REFS0) | (0<<ADLAR))

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{

// select the corresponding channel 0~7
// ANDing with ’7′ will always keep the value
// of �ch’ between 0 and 7
adc_input &= 0b00000111; // AND operation with 7
ADMUX = (ADMUX & 0xF8)|adc_input; // clears the bottom 3 bits before ORing

// start single convertion
// write ’1′ to ADSC
ADCSRA |= (1<<ADSC);

// wait for conversion to complete
// ADSC becomes ’0′ again
// till then, run loop continuously
while(ADCSRA & (1<<ADSC));

return (ADCW);
}

void main(void)
{

// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<<DDA7) | (0<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0);

// 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);

// ADC initialization
// ADC Clock frequency: 125.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: ADC Stopped
ADMUX=ADC_VREF_TYPE;
ADCSRA=(1<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
SFIOR=(0<<ADTS2) | (0<<ADTS1) | (0<<ADTS0);

// Alphanumeric LCD initialization
// Connections are specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS – PORTB Bit 0
// RD – PORTB Bit 1
// EN – PORTB Bit 2
// D4 – PORTA Bit 4
// D5 – PORTA Bit 5
// D6 – PORTA Bit 6
// D7 – PORTA Bit 7
// Characters/line: 16
lcd_init(16);
// Global enable interrupts
#asm("sei")
lcd_clear();
lcd_putsf(" HI Welcom");
delay_ms(2000);
while (1)
{

for (i = 0 ; i<100;i++) //we want to sampelling 100 times
{
lm35_value = read_adc(1);
lm35_av += lm35_value;
delay_ms(20);
}
lm35_av =lm35_av/100; //average of 100 sample
lm35_value=lm35_value / 2.083; //now we change to cantigerad
ftoa(lm35_value,0,lm35);
lcd_gotoxy( 0 ,1);
lcd_putsf("LM35:");
lcd_gotoxy(9 ,1);
lcd_puts(lm35);
lcd_gotoxy(12,1);
lcd_putsf("C");
delay_ms(5000);

}

}

[/cpp]خروچی برنامه:

راه اندازی سنسور lm35 با avr
راه اندازی سنسور lm35 با avr
Choose your Reaction!
دیدگاه خود را بنویسید

آدرس ایمیل شما منتشر نخواهد شد.

redronic.com