وبلاگ آموزشی جم ترونیک

آموزش راه اندازی max6675 با avr

آموزش راه اندازی max6675 با avr

ماژول ترموکوپل max6675 یک سنسور تشخیص دمای ترموالکتریک مدار بسته از دو سیم غیرمشابه است که در یک انتها به هم متصل هستند. هنگامی که دمای یک طرف با دمای طرف دیگر متفاوت است، جریان الکتریکی در مسیر برقرار می‌شود. این پدیده را اثر سیبک می نامند که اساس کار ترموکوپل‌ها را تشکیل می‌دهد. این ماژول را می‌توان با برد avr Wizard راه اندازی کرد تا دمای اندازه‌گیری شده بر روی LCD نمایش داده شود. در این بررسی به طور کامل در مورد راه اندازی ترموکوپل با avr صحبت می‌کنیم. اگر میخواهید بدانید ماژول الکترونیکی چیست کلیک کنید.

نحوه اندازی max6675 با avr

ماژول max6675 یک مبدل 12 بیتی آنالوگ به دیجیتال برای ترموکوپل های سری K است. این ماژول دارای تقویت کننده داخلی است و قادر خواهد بود دما را از «صفر» تا «1024» درجه سانتی‌گراد با وضوح 0.25 درجه سانتیگراد اندازه گیری کند. این ماژول داده‌ها را به صورت سریالی انتقال می‌دهد.

با صفر قرار دادن پایه CS، تبدیل داده توسط ADC متوقف شده و با اعمال پالس ساعت به پایه SCK، داده‌های آماده شده روی خط SDO منتقل می‌شود. داده‌های خروجی 16 بیت است و بیت‌های 3 تا 14 شامل داده‌های مربوط به دمای ترموکوپل خواهند بود. همچنین بیت 2 نشان می‌دهد که آیا ترموکوپل قطع شده یا وصل شده است.

لوازم مورد نیاز برای راه اندازی max6675 با avr عبارتند از:

  •     ماژول و سنسور ترموکوپل MAX6675 تایپ K
  •     میکروکنترلر Atmega8
  •     نمایشگر LCD کاراکتری 16×2
  •     پتانسیومتر 5 کیلو اهم

مشخصات سنسور ترموکوپل MAX6675 تایپ  Kبه شرح زیر است:

  •     ولتاژ مورد نیاز: 3 تا 5.5 ولت DC
  •     جریان: جریان ماژول 50 میلی‌آمپر
  •     پروتکل ارتباطی: SPI

برای خرید میکروکنترلر AVR کلیک کنید.

مراحل راه اندازی max6675 با avr

پایه های ماژول ها و قطعات استفاده شده را به صورت زیر به پین های میکروکنترلر ببندید:

MAX6675 :

SCK: PB7 (Pin 13)
CS: PB2 (Pin 11)
SO: PB4 (Pin 14)

LCD:
RS: PD0 (Pin 2)
EN: PD1 (Pin 3)
D4-D7: PD4-PD7 (Pins 6-9)

Potentiometer:
ADC0 (Pin 23)

* کد زیر بر اساس پین های فوق نوشته شده است.

#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include "lcd.h"

#define CS_PIN PB2
#define TEMP_UNIT_CELSIUS 0
#define TEMP_UNIT_FAHRENHEIT 1

// Function to initialize the SPI communication
void SPI_Init() {
    // Set MOSI (PB5) and SCK (PB7) as output pins
    DDRB |= (1 << DDB5) | (1 << DDB7);
    // Enable SPI, Master mode, clock rate fck/16
    SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR0);
}

// Function to send/receive data over SPI
uint8_t SPI_Transfer(uint8_t data) {
    // Start transmission
    SPDR = data;
    // Wait for transmission complete
    while (!(SPSR & (1 << SPIF)));
    // Return the received data
    return SPDR;
}

// Function to read temperature from the MAX6675
uint16_t read_temp() {
    uint16_t temp = 0;
    
    // Select the MAX6675 by setting CS_PIN low
    PORTB &= ~(1 << CS_PIN);
    
    // Read the first byte (don't care about it)
    SPI_Transfer(0x00);
    
    // Read the second byte (higher 8 bits of temperature)
    temp = SPI_Transfer(0x00) << 8;
    
    // Read the third byte (lower 8 bits of temperature)
    temp |= SPI_Transfer(0x00);
    
    // Deselect the MAX6675 by setting CS_PIN high
    PORTB |= (1 << CS_PIN);
    
    // Discard the last bit (thermocouple status bit)
    temp >>= 3;
    
    return temp;
}

int main() {
    // Initialize SPI communication
    SPI_Init();
    
    // Initialize LCD
    lcd_init(LCD_DISP_ON);
    
    // Variable to store the temperature read from the thermocouple
    uint16_t temperature = 0;
    
    // Variable to store the potentiometer value
    uint16_t pot_value = 0;
    
    // Variable to store the temperature unit (0 = Celsius, 1 = Fahrenheit)
    uint8_t temp_unit = TEMP_UNIT_CELSIUS;
    
    // Main loop
    while (1) {
        // Read temperature from the thermocouple
        temperature = read_temp();
        
        // Read the potentiometer value for unit selection
        pot_value = adc_read(0); // Assuming the potentiometer is connected to ADC0
        
        // Adjust the temperature unit based on the potentiometer value
        if (pot_value < 512) {
            temp_unit = TEMP_UNIT_CELSIUS;
        } else {
            temp_unit = TEMP_UNIT_FAHRENHEIT;
        }
        
        // Convert the temperature to Celsius or Fahrenheit based on the unit selection
        float temp_value;
        if (temp_unit == TEMP_UNIT_FAHRENHEIT) {
            temp_value = (temperature * 9.0 / 5.0) + 32.0;
        } else {
            temp_value = temperature;
        }
        
        // Display the temperature on the LCD
        char lcd_buffer[16];
        snprintf(lcd_buffer, sizeof(lcd_buffer), "Temp: %.2f %c", temp_value, (temp_unit == TEMP_UNIT_FAHRENHEIT) ? 'F' : 'C');
        lcd_clrscr();
        lcd_puts(lcd_buffer);
        
        // Wait for a short delay before updating the temperature again
        _delay_ms(500);
    }
    
    return 0;
}

 

دمای کار ترموکوپل max6675 بین صفر تا 1024 درجه سانتی‌گراد است. دقت اندازه گیری ماژول برابر با 0.25 و دقت اندازه گیری ترموکوپل برابر با 8 LSB است. این ماژول برای مصارف صنعتی مناسب است. معمولاً سنسور توسط یک کابل با پوشش حرارتی ویژه به ماژول متصل می‌شود.

برای خرید پتانسیومتر از جم ترونیک کلیک کنید.

کد AVR در کدویژن (CodeVision)

باید کدها را در نرم افزار کدویژن تهیه و پروگرام کنید. برای ایجاد پروژه کدویژن جدید، پس از باز کردن نرم افزار کدویژن، از منوی File گزینه New و سپس Project را انتخاب کنید. پیام باز شده از شما می‌پرسد که آیا می‌خواهید از بخش کدویزارد استفاده کنید. صفحه باز شده در نرم افزار کدویژن مربوط به آدرس ذخیره سازی پروژه است. ابتدا محل ذخیره سازی مورد نظر را انتخاب کرده و سپس نامی برای پروژه تعیین کنید.

کد AVR در کدویژن (CodeVision)

در این صفحه از کدویژن باید مدل میکروکنترلر خود را انتخاب کنید. برای مثال Atmega8 را انتخاب کنید و سپس OK را انتخاب کنید. قسمت پایین مربوط به فایلی است که کدهای پروژه در آن ذخیره شده است. در قسمت C Compiler از منوی باز شده به تنظیماتی مانند تغییر مدل میکروکنترلر، کریستال و غیره دسترسی دارید که با انتخاب گزینه OK پروژه در نرم افزار کدویژن ایجاد شده و آماده کدنویسی می‌شود.

پس از اتمام کدنویسی، از منوی Project گزینه Compile را انتخاب کنید. اگر خطایی مشاهده نکردید، از همان منوی Project در نرم افزار کدویژن گزینه Build All را انتخاب کنید. به طوری که برنامه به زبان ماشین ترجمه شده و در فایلی با پسوند hex ذخیره می‌شود. در این قسمت از آموزش کدویژن، برنامه نویس را به سیستم متصل کنید. میکروکنترلر را به درستی روی پروگرامر قرار دهید. سپس نرم افزار میکروکنترلر را باز کرده و از منوی Buffer گزینه Load Buffer را انتخاب کنید.

در صفحه باز شده باید فایل hex مربوط به برنامه را انتخاب کنید سپس به محل ذخیره پروژه رفته و از پوشه Debug داخل پوشه Exe فایل با پسوند hex را انتخاب کنید. توجه داشته باشید که فیوز بیت های آی سی به طور پیش فرض روی یک مگاهرتز تنظیم شده اند. پس اگر برنامه را در نرم افزار کدویژن با کریستال 8 مگاهرتز کامپایل کرده‌اید. در قسمت Fuses باید فیوز بیت‌ها را روی 8 مگاهرتز تنظیم کنید.

انتخاب مدل میکروکنترلر در کد ویژن

پس از انجام مراحل بالا گزینه Auto Program را انتخاب کرده و منتظر بمانید تا آی سی برنامه ریزی شود. اکنون آی سی میکروکنترلر AVR برای استفاده در مدار آماده است. پس از ایجاد یک پروژه جدید در نرم افزار CodeVision، کدهای ترموکوپل max6675 زیر را در آن کپی کنید. سپس تراشه میکروکنترلر Atmega8 را برنامه ریزی کنید.

جهت تهیه و خرید نمایشگر LCD کلیک کنید.

تحلیل کد پروژه ترموکوپل max6675

ابتدا کتابخانه‌های مورد نیاز به برنامه اضافه شده است. سپس LCD روی پورت D تنظیم می‌شود. ما یک متغیر برای ذخیره دما و یک رشته برای پیکربندی LCD تعریف کردیم. تابع read_temp یک تابع خروجی است. در داخل این تابع تنظیمات پروتکل SPI برای ماژول ترموکوپل max6675 انجام شده است و خروجی این تابع دمای اندازه گیری شده توسط ماژول خواهد بود.

در داخل تابع اصلی، ابتدا پورت B به عنوان ورودی و خروجی در صورت نیاز برای اتصال به ماژول تعریف می شود و سپس پروتکل SPI فعال می‌شود. در داخل حلقه بی‌نهایت ابتدا دما از تابع read_temp خوانده می‌شود و سپس داخل LCD نمایش داده خواهد شد. هنگام برنامه ریزی کد روی میکروکنترلر AVR، فیوز بیت‌ها را روی کریستال خارجی تنظیم کنید. سپس وارد حلقه اصلی برنامه شده و طبق الگوی ذکر شده در دیتا شیت ماژول Max6675 داده‌ها را دریافت کرده و به دو مقدار درجه سانتیگراد و درجه فارنهایت تبدیل می‌کنیم. در نهایت این دو مقدار روی LCD نشان داده می‌شود.

کلام آخر

آموزش راه اندازی max6675 با avr در این مقاله توصیح دادیم. فقط ضروری است مراحل کار به درستی پیش ببرید تا روند راه اندازی به خوبی انجام شود. تمامی مراحل کار تخصصی هستند و نیاز به پایه اولیه دانش الکترونیک دارد. برای خرید محصولات آردوینو به فروشگاه جم ترونیک مراجعه کنید.

 

0 دیدگاه

  1. درود و تشکر از آموزش شما
    این کتابخانه LCD در برنامه را از کجا اضافه کنیم به برنامه؟
    شما برنامه را برای اتمل نوشتید بعد از کدویژن استفاده کردید ؟
    با تشکر

    1. سلام و وقت بخیر اگر از کد ویژن استفاده کنید نیاز به اضافه کردن کتابخانه ال سی دی ندارید و پیشفرض داخل خودش قرار داره فقط نیاز هست که در ابتدای کد نویسی فراخوانی بشه.

      موفق باشید.

  2. با درود

    در دیتاشیت نوشته شده دقت 12 بیتی، ودر قسمت دیگر نوشته دقت 8 بیتی !!
    چرا 8 بیت جهت دریافت دما خوانده میشود در حالیکه در دیتاشیت هم 12 بیت خروجی اطلاعات رو مشخص کرده؟

    با تشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *