ايران ويج

نسخه‌ی کامل: آموزش Xmega در AtmelStudio
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
این جا قرار هست آموزش قدم به قدم برنامه نویسی برای این سری از میکرو ها قرار گیرد میکرو مورد استفاده AtXmega128A3U خواهد بود که توانایی برنامه ریزی توسط USB را نیز دارا است
هدر برد این میکرو رو از eca دریافت کنید
با توجه به قیمت این هدر برد و عدم پشتیبانی پروتئوس از این میکرو کنترلر بسیاری از آموزش ها در خود AtmelStudio انجام خواهد شد
پیش نیاز این آموزش ها آشنایی سطحی با زبان سی و مطالعه نمودن این پست است که مکمل یک دیگر هستند.
این آموزش ها با استفاده از این PDF از وب سایت Atmel تنظیم شده اند

این فایل پروژه را دانلود کنید و کد های نوشته شده را در این پروژه اضافه و کم کنید
[attachment=9149]
اگر با محیط برنامه آشنایی ندارید برای هماهنگی با آموزش ها بهتر است تنظیمات AtmelStudio را مطابق تنظیمات من قرار دهید
[attachment=9150]
در محیط نرم افزار در تول بار بالایی در تب Tools گزینه ی Import رو انتخاب کنید

ساخت چراغ چشمک زن!
اول از همه بگم که پایه های این میکرو 8 میلی آمپر جریان خروجی دارن پس هیچ وقت به LED مستقیم وصل نکنید! این آموزش در شبیه سازی انجام میشود!
-
مثل سری های قبلی این میکرو هم دارای ریجیستر هایی با نام
PORTA
PORTB
PORTC
...
است با این تفاوت که به زیر مجموعه هایی تقسیم شده است!
برای مثال در سری های گذشته از
DDRA برای تعیین جهت پایه ها استفاده میشد
اکنون به این صورت باید استفاده شود
PORTA_DIR
و برای مقدار هر پورت از
PORTA
استفاده می شد که اکنون به این صورت است
PORTA_OUT
و همچنین برای خواندن از پورت از
PINA
استفاده می شده است اکنون با استفاده از
PORTA_IN
میتوان مقدار پورت را خواند
برای اولین قسمت از برنامه تکه کد زیر را اضافه کنید
کد:
int main(void)
{
//Place Your Codes
PORTB_DIR=0xFF;
PORTB_OUT=0xAB;
return 0;
}
با دکمه F7 برنامه کامپایل می شود
و با استفاده از Alt+F5 وارد محیط دیباگر می شوید
اگر پنجره ای با نام Memory باز شد آن را ببندید به هر تعداد که بود
در بالای صفحه در تب debug بروید از قسمت Windows گزینه ی IO View رو بزنید حال تمامی ریجیستر های میکرو رو می تونید مشاهده کنید
بر روی
i/o port configuration (PORTB)
کلیک کنید در زیر آن قسمت ریجیستر های زیر مجموعه قابل مشاهده هستند!
با دکمه F11 به خط بعد بروید اگر ادامه دهید خواهید دید تمامی پین ها به خروجی تبدیل می شوند و مقدار برخی از آن ها برابر 1
-
برای خاموش و روشن کردن هر بیت بر روی ان کلیک کنید
-
همین طوری که میدونید برای افزایش سرعت کار با این میکرو برخی ریجیستر ها اضافه شده اند
مانند
PORTB_DIRSET
با توجه به مقدار این ریجستر پین های متناظر با بیت های 1 شده مقدار یک می گیرند
PORTB_DIRCLR
با توجه به مقدار این ریجستر پین های متناظر با بیت های 1 شده مقدار صفر می گیرند
PORTB_DIRTGL
پین متناظر با بیت یک شده مقدار عکس خواهد گرفت
ریجیستر های مشابه برای قسمت OUT نیز وجود دارد به طور کلی هرگاه به این نوع ریجیستر ها برخورد کردید بدانید عمل مشابهی انجام می دهند
PORTB_OUTSET
...
حال یک برنامه بنویسیم که از این ریجیستر ها استفاده کنیم
کد:
int main(void)
{
//Place Your Codes
PORTB_DIR=0xFF;
PORTB_DIRCLR=0xF0;
PORTB_DIRTGL=0x20;
PORTB_OUT=0xFF;
PORTB_OUTTGL=PORTB_DIR;
return 0;
}
با F11 خط به خط برنامه رو اجرا کنید و نتایج رو ببینید
(تغییرات هنگامی که اشارگر به خط بعدی می رود اعمال می شوند)
برای توقف شبیه سازی Ctrl+Shift+F5 را فشار دهید (دکمه آن را می توانید فشار دهید!)
اگر قسمتی وارد کد اسمبلی شد مربوط به قسمتی است که خود کامپایلر به آن اضافه کرده است!
[attachment=9151]
کد:
 12-bit resolution
 Up to two million samples per second
 Two inputs can be sampled simultaneously using ADC and 1x gain stage
 Four inputs can be sampled within 1.5μs
 Down to 2.5μs conversion time with 8-bit resolution
 Down to 3.5μs conversion time with 12-bit resolution
 Differential and single-ended input
 Up to 16 single-ended inputs
 16x4 differential inputs without gain
 8x4 differential input with gain
 Built-in differential gain stage
 1/2x, 1x, 2x, 4x, 8x, 16x, 32x, and 64x gain options
 Single, continuous and scan conversion options
 Four internal inputs
 Internal temperature sensor
 DAC output
 VCC voltage divided by 10
 1.1V bandgap voltage
 Four conversion channels with individual input control and result registers
 Enable four parallel configurations and results
 Internal and external reference options
 Compare function for accurate monitoring of user defined thresholds
 Optional event triggered conversion for accurate timing
 Optional DMA transfer of conversion results
 Optional interrupt/event on compare result
َِADC این میکرو با دقت 12 بیت (بهتر است بگوییم 11 بیت!)
توانایی اندازه گیری 2 میلیون نمونه در ثانیه را دارا است
داشتن ورودی های متنوع از ویژگی های آن به شمار می آید
دارا بودن 4 کانال تبدیل این امکان را می دهد که چهار تنظیم مجزا را انجام دهیم و داده های خروجی جدا جدا ذخیره شوند!
امکان استفاده از DMA برای انتقال مستقیم نتایج به حافظه بدون دخالت CPU وجود دارد!
ولتاژ های مرجع مختلفی هم برای این میکرو در نظر گرفته شده است!
[attachment=9164]
چهار ورودی برای ADC در نظر گرفته شده است
1- تفاضلی
2- تفاضلی با تقویت کننده
3- حالت ساده (متصل به پورت های ADC)
4- ورودی از داخل!
بجز قسمت چهارم که به سنسور های داخلی و قسمت های دیگر متصل میشود
در بقیه موارد همه از پورت های ADC استفاده می کنند
برای میکرو ها با دو مبدل ADC
PORTA برای ADCA
و PORTB برای ADCB
و در بقیه با یک ADC
هم PORTB و هم PORTA متصل به ADCA

ADC کلا در مد تفاضلی عمل می کند ولی در مد 3 (Single-ended input(
با اتصال کانال منفی به زمین می توان ولتاژ را اندازه گیری کرد
با توجه به تفاضلی بودن ولتاژ منفی هم در دست رس خواهد بود
(این جوری که من فهمیدم می توان ولتاژ منفی رو هم اندازه گرفت! مثلا -1 رو بدی به پایه میکرو! برای حالتی که زمین مثبت تر از زمین مدار باشد!
در باره ی این قابلیت دفعه بعد بیشتر توضیح میدم شاید هم من اشتباه کرده باشم!)
(این مبدل دقیقا مثل مقایسه کننده عمل می کنه)
-
حالت تفاضلی
در این مد همه ی پایه های ADC می توانند به عنوان ورودی مثبت قرار گیرند
و پایه های 0و1و2و3 به عنوان ورودی منفی
[attachment=9165]
-
حالت تفاضلی با تقویت کننده
در این حالت همه پین ها به عنوان ورودی مثبت می توانند در نظر گرفته شوند ولی پایه منفی فقط پین های 4و5و6و7
تقویت می تواند
نصف کننده،یک برابر ،دو برابر،4 برابر،8 برابر،16 برابر، 32 برابر،64 برابر کننده باشد
[attachment=9166]
در هر دو مد بالا ADC باید در مد عدد صحیح علامت دار باشد!
-
حالت ساده(به قول منBiggrin)
در این مد همه ی پین ها به پایه مثبت می توانند وصل شوند و پایه منفی اگر ADC در مد علامت دار باشد به زمین متصل میشود
[attachment=9167]
در حالت بدون علامت (مثبت) پایه منفی به نصف ولتاژ مرجع وصل می شود
و ولتاژ مرجع به میزان ضرب 0.05 کاهش می یابد
[attachment=9168]
در این مد می توان نقطه گذر از صفر را تشخیص داد
(در آینده بحث خواهد شد)
-
ورودی های داخلی
می تواند به سنسور های دمای داخلی(در همه ی مدل ها نیست)
Bandgap voltage (ولتاژ مرجع دقیق داخلی!)
VCC scaled(تقسیم به 10 میشه و بعد اندازه گیری میشه)
خروجی دیجیتال به آنالوگ
Pad and Internal Ground(PAD میشه سیگال زمینی که به پایه میکرو دادید زمین داخلی میشه زمین داخلی که مقدار خیلی کمی از هم ممکن هست تفاوت داشته باشند!)
(کلا این هارو نخوندم نصفیش رو ترجمه نکردمBiggrin حالا بعد که فهمیدیم خودتون جای گذاری کیندBiggrin)
سنسور دمای داخلی دو تا ریجیستر کالیبره داره که بر اساس اون ها و اینکه یه تابع خطی هست ولتاژ و دمای اون می تونید دما رو بدست بیارید
(بهش میرسیم در آیندهBiggrin)
-
ولتاژ زمین داخلی (نه اونی که به پین میدید) به عنوان ورودی منفی در این قسمت استفاده می شود!
[attachment=9171]
اگر هم در مدل عدد صحیح مثبت استفاده شود مانند قبل
[attachment=9170]
-
ولتاژ های مرجع هم شامل این ها میشوند!
اون ولتاژ 1 V همون ولتاژ مرجع دقیق داخلی است
[attachment=9169]