PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : Xmega ADC



Caspian1361
19-05-2011, 17:23
چند تا سوال در مورد ADC دارم:

1- مگه Xmega128A1 تعداد 16 عدد کانال ADC نداره؟(8 تا تو پورتA و 8 تا تو پورت B) چرا تو تنظیمات ویزاد کدویژن از هر پورت 4 تا می شه تنظیم کرد؟

2- تو Help کدویژن چهارتا Input mode داره که تو ویزاردش فقط دوتا رو نشون می ده. چرا؟؟

3- کسی باADC های این میکرو تو کدویژن کار کرده؟؟ راهنمایی در مورد راه اندازیش می خواستم. من مطابق Help رفتم و از دستور adca_read(0) استفاده می کنم ولی همیشه عدد خروجی بین 385 تا 390 تغییر می کنه و به تغییرات ورودی هم وابسته نیست.

Caspian1361
21-05-2011, 23:23
یعنی واقعا کسی بعد از دو روز کمکی نمی تونه بکنه؟؟؟؟؟؟؟:unh:

pooriya
22-05-2011, 01:38
سلام.
من برای میکرو های xmega زیاد با codevision کار نکردم ولی بهتره به تصویر زیر نگاه کنید خودش گویا هست و تمام پایه های ورودی adc رو هم می تونید ببینید<در مورد عملکرد chanel 0,1,2,3 هم بهتره دیتاشیت رو مطالعه کنید.

در مورد مقدار نشان داده شده از ورودی adc هم احتمال زیاد به دلیل درست تنظیم نکردن این قسمت باشه.(در تنظیم قسمت ولتاژ رفرنس دقت کنید)

Caspian1361
22-05-2011, 15:14
اینارو تنظیم کردم وضعیت همون طوریه

Caspian1361
26-05-2011, 00:05
کسی با ADC ی Xmega تو Code vision کار کرده؟؟؟؟

pooriya
26-05-2011, 00:50
سلام.
دوست عزیز بهتره برنامتون رو اینجا اپلود کنید تا ببینیم مشکل کجاست.

Caspian1361
28-05-2011, 22:40
سلام.
دوست عزیز بهتره برنامتون رو اینجا اپلود کنید تا ببینیم مشکل کجاست.

من یه برنامه ساده با ویزاردش ساختم و گفتم یه کانال رو بخونه و نمایش بده. اعداد نمایش داده شده ثابت نیستند و در حدود 2 یا سه تا کم و زیاد می شن و این نشون می ده که تبدیل داره انجام می شه ولی وقتی ولتاژ رو روی پایه عوض می کنم تغییری نمی کنن.
اگه شما با اون کار کردید یه برنامه بنویسید که کار میکنه و upload کنید.

راستی من کلاک میکرو رو توی Configure the Project می زارم رو 16 مگ ولی تو برنامه نمی آد. مگه اینطور نیست که تو Xmega کلاک رو باید داخل برنامه تعریف کرد؟
متشکر

pooriya
29-05-2011, 01:14
سلام.
به این برنامه که نوشتم یه نگاه بندازین،تو این برنامه من از ورودی adc 0 استفاده کردم و adc در مد 12 بیت راه اندازی شده، به این صورت که به ورودی مورد نظر یک عدد پتانسیومتر وصل کردم که با تغییر ان مقدار ورودی adc روی lcd به نمایش در می اید.

بله کلاک داخل برنامه با کد نویسی اعمال می شه.(تصویر زیر)

Caspian1361
29-05-2011, 12:03
آقای پوریا ازتون ممنونم
مشکلم رفع شد. پایه adc من خوب به برد متصل نشده بود. در هر صورت برنامه شما رو که دیدم مطمئن شدم مشکل نرم افزاری ندارم و هرچی هست تو سخت افزاره. جالب بود که حتی با ذره بین هم به نظر می اومد که پایه متصل هست ولی با بازر مولتی متر قطع بود.

بازم ممنونم

mahdi74
02-12-2011, 02:43
با سلام
من یک مشکل با ADC در XMEGA دارم اینجا مطرح میکنم انشاالله دوستان جواب بدن
مشکل من اینه که موقع اندازه گیری از adc در xmega با وجود اینکه ولتاژ روی پایه میکرو ثابت هست ولی عددی که میکرو اندازه گیری میکنه در حد 10 واحد تغییرات داره ( هر 100 میلی ثانیه اندازه گیری میکنه ).
من از میکرو ATXMEGA32A4 استفاده کردم و میکرو فقط ورودی ADc رو اندازه گیری میکنه و به پورت سریال میفرسته اندازه گیری درست انجام میشه ولتاژ روی پایه میکرو و تغذیه میکرو با ولتمتر ثابته ولی در هر بار اندازه گیری عدد اندازه گیری شده با مقدار قبلی متفاوته و حد اکثر 10 واحد نوسان داره ولتاژ هم dc هست . با رفرنسهای مختلف هم تست کردم ( internal 1v , internalvcc/1.6 )
سوال من اینه که اولا آیا میشه با این میکرو با دقت بیشتر از این اندازه گیری کرد ؟ آیا کسی عملا این کارو کرده ؟

لطفا منو راهنمایی کنید .

در بیسکام تعریفم اینطوریه
Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off
Reference = Intvcc , Event_mode = None , Prescaler = 32

mahdi74
02-12-2011, 17:31
دوستان کسی وقت نکرد جواب بده !!
میدونم در مورد این مشکل چند جا بحث شده ولی سر آخر هیچ کسی نگفت حد اکثر دقتی که داشته چقدره و کدوم روش کاهش نویز موثرتر بوده ؟
سوال من همینه که حد اکثر دقتی که تونستید داشته باشید در ولتاژ ورودی ثابت و single endچقدره ؟
ببینم این میکرو به درد کار من میخوره یا باید برم سراغ adc های خارجی یا arm و lpcو...
من در بهترین حالت 2 بیت خطا دارم . ( با گذاشتن فیلتر در مسیر تغذیه و ورودی ADC استفاده از رفرنس خارجی و idle mode تنظیم prescaler و offset و ....)
اگر هم جایی که سوالم رو مطرح کردم صحیح نیست بهم تذکر بدید .
متشکر .

morteza_rk
02-12-2011, 20:36
شما باید از ولتاژ روی پایه چندین بار نمونه بگیرید و بعدش ازیا معدل گیری کنید. این موثرترین روش در کاهش میزان خطا و ثابت کردن عدد اندازه گیری شده هست. ضمنا پیشنهاد می کنم که از ولتاژ مرجع خارجی استفاده کنید و حتما فیلتری که در دیتاشیت موجوده رو بکار ببرید.

من خودم یه نمونه با atmEGA32 ساختم ، خیلی هم خوب کار می کرد. حالا با XMEGA هم نباید زیاد فرقی داشته باشه.

mahdi74
02-12-2011, 23:49
با تشکر از شما .
من از مرجع خارجی استفاده کردم و همینطور از معدل گیری ( 10 بار نمونه گیری و بعد میانگین ) البته موثر بود خطای من از 10 واحد به 3 کاهش پیدا کرد ولی هنوز زیاده علی القاعده حد اکثر خطا نباید از یک بیت بیشتر باشد ولی ...
نمونه ای که شما ساختی چقدر تغییرات ( خطا ) داشت ؟

atrak
10-12-2011, 11:17
سلام
من در حال مرور انجمن بودم که سوال شما را دیدم .
من فکر میکنم که نوسانی که شما می فرمائید به دلیل نویز روی تغذیه باشد . معمولا روی پایه ولتاژ مرجع adc باید از خازن های خوب نویز گیر استفاده شود تا چنین نوساناتی در خروجی adc وجود نداشته باشد .

arm-mohsen-avr
01-01-2012, 00:28
سلام دوستان من این برنامه رو واسه تست ADC نوشتم ولی خروجی علامت سوال نشون میده می تونید بگید مشکل از کجاست .cry::cry:::(:(:(
با AVRstudio نوشتم برنامه رو واسه xmega32a4

/*
* xmegaadc.c
*
* Created: 12/31/2011 10:57:28 PM
* Author: N4030
*/

#include <avr/io.h>
#include "lcd.h"
#include <avr/delay.h>
#include "avr_compiler.h"
#include "adc_driver.h"

#define ADC_INPUT ADC_CH_MUXPOS_PIN1_gc

int main(void)
{
float p;
float ADC_result;
char lcd_buff[20];
lcd_init(LCD_DISP_ON);

ADC_CalibrationValues_Load(&ADCA);
ADC_ConvMode_and_Resolution_Config(&ADCA, ADC_ConvMode_Signed, ADC_RESOLUTION_12BIT_gc);
ADC_Reference_Config(&ADCA, ADC_REFSEL_VCC_gc);
ADC_Prescaler_Config(&ADCA, ADC_PRESCALER_DIV8_gc);

ADC_Ch_InputMode_and_Gain_Config(&ADCA.CH0,
ADC_CH_INPUTMODE_SINGLEENDED_gc,
ADC_CH_GAIN_1X_gc);
ADC_Ch_InputMux_Config(&ADCA.CH0, ADC_INPUT, ADC_CH_MUXNEG_PIN0_gc);
ADC_Enable(&ADCA);
ADC_Wait_8MHz(&ADCA);
lcd_clrscr();
lcd_home();
lcd_puts("ADC0.1 LCD XMEGA");
while(1)
{
ADC_Ch_Conversion_Start(&ADCA.CH0);
while(!ADC_Ch_Conversion_Complete(&ADCA.CH0));
ADC_result = ADC_ResultCh_GetWord(&ADCA.CH0);
sprintf(lcd_buff,"ADC=%f",ADC_result);
lcd_gotoxy(1,1);
lcd_puts(lcd_buff);
_delay_ms(400);
}
}

sadmonew
01-01-2012, 00:37
با سلام
دوست عزيز اين مشكل رو دوستان قبلا به اون برخوردن. البته حل شده. به اين لينك يه نگاه بندازيد.
اگه مشكلتون حل نشد در خدمتم.
You can see links before reply

arm-mohsen-avr
01-01-2012, 00:55
حل شد دوست عزیز خیلی ممنون :125::018:

rbdragon72
13-02-2012, 20:41
سلام
اگه می شه یکی از مهندسان لطف کنند ریجسترهای مربوط به ADC را به طور کامل توضیح دهند.
پیشاپیش تشکر میکنم.:hi: