فهرست مطالب
هدف از این آموزش چگونگی برقراری ارتباط با یک سنسور دیجیتال و راه اندازی یک LCD می باشد.
در نهایت شما قادر خواهید بود ماژول Max6675 را راه اندازی کرده و دمای اندازهگیری شده را بر روی LCD نمایش دهید.
قطعات مورد نیاز
- برد AVR Wizard
- ماژول Max6675
- پروگرامر MKII
- مبع تغذیه 6-12 ولتی
مقدمه
ترموکوپل (Thermocouple) یک سنسور تشخیص دمای ترمو-الکتریکی مدار-بسته شامل دو سیم غیر هم جنس است، که در یک انتها به هم متصل شدهاند. زمانیکه دما در یک سمت با دما در سمت دیگر تفاوت داشته باشد یک جریان الکتریکی در مسیر برقرار میشود. به این پدیده اثر سیبک گفته میشود که اساس کار ترموکوپلها میباشد.
ترموکوپلها دارای انواع مختلفی ( تیپها ) برای اندازهگیری دما هستند. بهطور مثال انواع R – S – B با قابلیت اندازهگیری دما در محدوه ۲۰۰- الی ۱۸۰۰ و انواع L – K- J با قابلیت اندازهگیری دما در محدوده ۱۸۰- الی ۱۰۰۰ درجه سلسیوس بکار میروند.
ترموکوپلها در صنعت دارای کاربردهای بسیاری هستند. از جمله مهمترین کاربردها در صنایع تولید لوازم گرمازا است. مثلاً از ترموکوپل برای ایمنی تجهیزات گازسوز وقتی شعله گاز به دلایلی (از جمله باد) خاموش میگردد و برای قطعکردن گاز استفاده میشود.
ماژول Max6675 یک مبدل آنالوگ به دیجیتال 12 بیتی برای ترموکوپلهای سری K میباشد. این ماژول دارای تقویت کننده داخلی است و قادر است دمای “0” تا “1023.75” درجه سانتیگراد را با رزولوشن 0.25 درجه سانتیگراد اندازهگیری نماید.
این ماژول به صورت سریال داده را منتقل میکند؛ به این صورت که با صفر کردن پایه CS، تبدیل داده توسط ADC متوقف شده و با اعمال پالس-ساعت به پایه SCK، داده آماده شده روی خط SDO منتقل میشود. دیتای خروجی 16 بیت است که بیتهای 3 تا 14، دیتای مربوط به دمای ترموکوپل را در بر میگیرند. همچنین بیت 2 نشان دهنده قطع یا وصل بودن ترموکوبل میباشد (در صورت قطع بودن ترموکوپل، “1” میباشد).
توضیحات برنامه
ابتدا در CodeVision یک پروژه جدید ایجاد کنید.
سپس ورودی و خروجیها، LCD و Chip مربوطه را تعیین کنید.
پس از ذخیره و تولید فایلها، وارد محیط برنامه نویسی میشویم.
متغیرها و توابع مورد نیاز را در ابتدای برنامه تعریف میکنیم:
#include
#include
#include
// Declare your global variables here
float temp_c,temp_f;
uint16_t temp;
int8_t i;
char lcd_data[15];
قبل از ورود به حلقه اصلی برنامه، میتوانید نوشته دلخواهتان را بر روی LCD به نمایش درآورید.
lcd_clear();
lcd_gotoxy(6,0); //line 1, char 6
lcd_printf("KEI");
lcd_gotoxy(6,1); //line 2, char 6
lcd_printf("CAN");
delay_ms(3000);
lcd_clear();
سپس وارد حلقه اصلی برنامه شده و طبق الگوی ذکر شده در دیتاشیت ماژول Max6675، دیتا را دریافت میکنیم و به دو مقدار درجه سانتیگراد و درجه فارنهایت تبدیل میکنیم. در نهایت این دو مقدار را بر روی LCD نشان میدهیم:
PORTB.4=0; //cs pin go to low
delay_ms(10);
temp=0;
for (i=15; i>=0; --i)
{
PORTB.7=1;
if (PINB.6==1) {
//set the bit to 0 no matter what
temp |= (1 << i);
}
delay_ms(1);
PORTB.7=0;
delay_ms(1);
}
PORTB.4=1; //cs pin go to high
if((temp & 0x04))
{
lcd_clear();
lcd_gotoxy(0,0);
lcd_printf(" Input Error! ");
}
else{
temp=temp/8; // >>3
temp_c=(float)(temp)*.25;
temp_f=temp_c*(9/5)+32;
lcd_clear();
lcd_gotoxy(0,0);
lcd_printf("T= ");
ftoa(temp_c,2,lcd_data); // Convert integer to string
lcd_puts(lcd_data); //display temperature value in °C
lcd_printf(" 'C ");
lcd_gotoxy(0,1);
lcd_printf("T= ");
ftoa(temp_f,2,lcd_data); // Convert integer to string
lcd_puts(lcd_data); //display temperature value in °F
lcd_printf(" 'F ");
}
delay_ms(1000);
}
سلام. متاسفانه نحوه تنظیم واحد spi در برنامه فوق مشخص نیست و کد ناقص هست.اگر امکان اش هست تنظیمات واحد spi را هم اضافه بفرمایید. با تشکر
سلام. عملکرد SPI در کد شبیه سازی شده است و به طور مستقیم از پورت SPI استفاده نشده است.