پروژه راه اندازی ماژول MAG3110 توسط برد AVR Wizard

ITG3200 project with avr wizzard
0

راهنما راه اندازی ماژول MAG3110 توسط برد AVR Wizard

هدف از این آموزش چگونگی برقراری ارتباط با یک سنسور دیجیتال و راه اندازی یک LCD می باشد

در نهایت شما قادر خواهید بود ماژول MAG3110 را، راه اندازی کرده و خروجی سنسور را بر روی LCD نمایش دهید.

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

  1. برد AVR Wizard
  2. ماژول MAG3110
  3. پروگرامر MKII
  4. منبع تغذیه 6-12 ولت

مقدمه :

سنسور MAG3110 یک مگنتومتر سه محوره دیجیتال است. این سنسور از یک ADC 16 بیتی برخوردار است که به صورت مولتی‌پلکسری دیتای هر محور را تبدیل می‌کند و از طریق درگاه I2C منتقل می‌کند. همچنین این سنسور داری یک سنسور دمای داخلی 8 بیتی می‌باشد.

ماژول MAG3110 را می‌توان در کاربردهای جهت‌یابی استفاده کرد. کار با آن آسان بوده و کاربر می‌تواند تنظیمات دلخواه خود را بر آن اعمال کند.

توضیحات برنامه:

ابتدا در CodeVision یک پروژه جدید ایجاد کنید.

پروژه جدید در CODE VISION

سپس ورودی و خروجی‌ها، LCD و Chip مربوطه را تعیین کنید.

تعیین ورودی و خروجی LCD و CHIP در CODE VIsion .

 

پس از ذخیره و تولید فایل‌ها، وارد محیط برنامه نویسی می‌شویم.

در ابتدا متغیرها و توابع مورد نیاز را تعریف می کنیم:

 
[cpp] #include <iic.h> #include <stdint.h> #include <stdlib.h> #include <delay.h> #define mag_address 0x0E #define CTRL_REG1 0x10 uint8_t mag_data[6],buffer[2],mode[1]={0x01}; uint8_t who_am=0x07,user; int8_t temperature[1]; char lcd_data[15]; float mag_x,mag_y,mag_z; [/cpp]

سپس ارتباط درگاه I2C برد AVR Wizard با ماژول MAG3110 بررسی می‌کنیم و در صورت تایید شدن ماژول، پیغام آن بر روی LCD به نمایش در می‌آید:

 

[cpp] lcd_clear(); lcd_gotoxy(0,0); lcd_puts(" Hi! Welcome "); lcd_gotoxy(0,1); lcd_puts("www.redronic.com"); delay_ms(2000); lcd_clear(); buffer[1]=i2c_readReg(mag_address<<1,who_am, (uint8_t*)buffer, 1); if(buffer[1]!=0 ) { lcd_gotoxy(0,0); lcd_puts(" I2C Error!"); while(1); } else if(buffer[0]!=196) { lcd_gotoxy(0,0); lcd_puts(" It isn’t "); lcd_gotoxy(0,1); lcd_puts(" MAG3110"); while(1); } else { lcd_gotoxy(0,0); lcd_puts(" MAG3110 "); lcd_gotoxy(0,1); lcd_puts(" Detected!"); } [/cpp]

سپس ماژول را در حالت فعال قرار می‌دهیم:

[cpp] i2c_writeReg(mag_address<<1, CTRL_REG1, (uint8_t*) mode, 1); [/cpp]

حال وارد حلقه اصلی برنامه می‌شویم. بخاطر جا نشدن تمامی اطلاعات در LCD، دو صفحه برای نمایش تعریف می‌کنیم و برای جابجا شدن بین صفحات از دکمه SW1 استفاده می‌کنیم:

[cpp] if(PINC.4==0) { user++; delay_ms(300); if(user==2) user=0; } [/cpp]

حال نوبت خواندن اطلاعات از ماژول است. رجیستر سنسور دمای داخلی سنسور MAG3110، داده‌ی مربوط به دما را به صورت یک داده هشت بیتی علامت دار نگه می‌دارد و هر بیت نشانگر “1” درجه سانتی‌گراد است:

[cpp] i2c_readReg(mag_address<<1,0x0F, (uint8_t*)temperature,1); [/cpp]

داده‌های مربوط به هر محور مگنتومتر در دو رجیستر 8 بیتی ذخیره می‌شود؛ به عبارت دیگر، داده‌ی هر محور یک داده‌ی 16 بیتی است. برای خواندن این رجیسترها، کافی‌است آدرس اولین رجیستر را در تابع وارد کنیم، تابع به اندازه طولی که برای آن مشخص می‌کنیم، رجیستر‌ها را خوانده و ذخیره خواهد کرد. همچنین هر بیت، نشان‌دهنده “0.1” میکرو تسلاست:

mag_x=(float)((int16_t)(mag_data[0]<<8 | mag_data[1]))*.1; mag_y=(float)((int16_t)(mag_data[2]<<8 | mag_data[3]))*.1; mag_z=(float)((int16_t)(mag_data[4]<<8 | mag_data[5]))*.1; [/cpp]

حال با توجه به SW1 دیتای مربوط به آن حالت را بر روی LCD نشان می‌دهیم:

[cpp] switch (user) { case 0 : lcd_gotoxy(0,0); //line 0, char 0 lcd_puts("Temperature(‘C): "); lcd_gotoxy(6,1); //line 1, char 6 itoa(temperature[0],lcd_data); // Convert integer to string lcd_puts(lcd_data); break; case 1 : lcd_gotoxy(0,0); //line 1, char 0 lcd_puts("MAG(uT):"); lcd_puts("X="); ftoa(mag_x,1,lcd_data); // Convert integer to string lcd_puts(lcd_data); lcd_gotoxy(0,1); //line 2, char 0 lcd_puts("Y="); ftoa(mag_y,1,lcd_data); // Convert integer to string lcd_puts(lcd_data); lcd_puts(" Z="); ftoa(mag_z,1,lcd_data); // Convert integer to string lcd_puts(lcd_data); break; } delay_ms(100); [/cpp]

نتیجه:

اجراشدن-mag3110

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

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

redronic.com