به نام خدا : آموزش کار با ADC خارجی آی سی ADC0820 : سلام خدمت دوستان ، تو این مطلب میخوام در مورد آی سی ADC خارجی توضیح بدم و آموزش کار با ADC0820 رو قرار بدم و یه پروژه AVR هم براتون بزارم با این IC…..والا من دیتاشیت ADC0820 رو خوندم و دارم این مطلب رو مینویسم….. لذا توضیحات زیر همگی از دیتاشیت این IC میباشند…..
توجه : پروژه کار میکنه و مشکلی نداره ولی در توضیحات زیر ممکن است بد ترجمه کارده باشم یا اصلا اشتباه ترجمه کرده باشم(بعید میدونم ولی احتمالش وجود داره) ممنون میشم بهم بگید.
مشخصات آی سی ADC0820
- دقت : 8 بیت
- دارای 2 مد کاری می باشد.( RD و WR-RD )
- زمان تبدیل ( برای هر مد )
- mode RD = 2.5 us MAX
- mode WR-RD = 1.5 us MAX
- دارای 20 پایه میباشد.
- به کلاک خارجی نیاز ندارد ( No external clocking )
- یک پایه برا خروچی سرریز ( Overflow output )
- در زیر میزان خطا رو ( به ازای دمل های مختلف ) مشاهده میکنید ؛ منظور از LSB بیت اول خروجی یعنی DB0 هستش.
ماکزیمم ها در آی سی ADC0820
- VCC = 10v
- میزان توان مصرفی ( در دمای 25°c ) برار است با 875mW
- جریان هر پایه ورودی = والا من دقیقا نفهمیدم 1mA هستش یا 4mA — در کل یکی از این دو تاس دیگه ^_^
محدوه ها در IC ADC0820
۱) 4.5V ≤ VCC ≤ 8V
۲) GND ≤ Vin ≤ VCC
۳) GND ≤ VREF(−) ≤ VREF(+) ≤ VCC
۴) محدوده دما به ازای مدل های مختلف(شکل زیر)
توضیح پایه های آی سی ADC0820
کار پایه | نام پایه | شماره پایه |
ولتاژی که میخوایم آی سی برامون محاسبه کنه رو به این پایه وصل میکنیم. | Vin | ۱ |
وقتی آی سی ولتاژ رو محاسبه کرد از طریق پایه هایDB0 الی DB7 به میکرو انتقالشون میدهپایه DB0 که بهش LSB هم میگن. | DB0 | ۲ |
پایه DB1 | DB1 | ۳ |
پایه DB2 | DB2 | ۴ |
پایه DB3 | DB3 | ۵ |
وظیفه اعلام آغاز تبدیل رو داره (در مد WR-RD) | WR/RDY | ۶ |
این پایه وضیفه انتخاب مد کاری آی سی رو داره | MODE | ۷ |
وظیفه اعلام آغاز تبدیل رو داره (در مد RD) | RD | ۸ |
وقتی عملیات تبدیل تموم بشه و آی سیولتاژ رو محاسبه کنه این پایه ۰ میشه | INT | ۹ |
VCC و GND پایه های تغزیه IC هستند. | GND | ۱۰ |
….در پایین توضیح داده شده…. | (-)VREF | ۱۱ |
پایه های (+)VREF و (-)VREFپایه های مربوط به ولتاژ مرجع هستند | (+)VREF | ۱۲ |
وظیفه فعال کردن آی سی و ریست کردن INT رو داره | CS | ۱۳ |
پایه DB4 | DB4 | ۱۴ |
پایه DB5 | DB5 | ۱۵ |
پایه DB6 | DB6 | ۱۶ |
پایه DB7 | DB7 | ۱۷ |
خروجی سرریز—–وقتی Vin از (+)Vref بیشتر بشهاین پایه بعد از پایان تبدیل صفر میشه | OFL | ۱۸ |
به جایی وصل نمیشه | NC | ۱۹ |
VCC و GND پایه های تغزیه IC هستند. | VCC | ۲۰ |
توجه ۲ : کلا هر موقع تو IC ها پایه ای NC روش نوشته شده بود یعنی این که به جایی وصل نمیشه و بدون اتصال باید قرارش بدید.
با توجه به خط بالا به نظرم بهتره (−)VREF رو به GND وصل کنید و (+)VREF رو به ولتاژ مورد نظرتون >>> فقط حواستون باشه که مقدارش از GND بیشتر و از VCC کمتر یا مساوی باشه باهاش >>>> من در این پروژه (−)VREF رو به GND و (+)VREF رو به VCC وصل کردم و VCC رو هم به ۵ ولت وصل کردم.
در پروژه من : VREF(−)=GND=0 و VREF(+)=VCC=5 هستش.
سوال : ولتاژ مرجع چیست ؟
جواب : پل کلوم این که آی سی ولتاژ محاسبه شده رو با ولتاژ مرجع مقایسه میکنه و هر چه این ولتاژ(ولتاژ مرجع) دقیق تر(مثلا یه ۵ ولت تر و تمیز باشه و ۵٫۱ نباشه و…) باشه ولتاژ محاسبه شده توسط آیسی نیز دقیق تر میشه.
توضیح انواع MODE آی سی ADC0820
RD Mode :
مرحله۰) انتاخب مود RD برای آی سی >>> MODE=0
مرحله۱) فعال کردن آی سی >>> CS=0
مرحله۲) صدور فرمان آغاز نمونه گیری و تبدیل(همون محاسبه ولتاژ) >>> RD=0
مرحله۳) ما وای میستیم تا زمانی که تبدیل تمام بشه ، با پایان تبدیل پایه INT در مد RD صفر میشه >>> (while(INT
توجه : البته میتونستیم از وقفه خارجی به جای استفاده از (while(INT هم استفاده کنیم که کار دقیق تر و بهتر بشه….
مرحله۴) بعد از اتمام تبدیل اطلاعات(مقدار ولتاژ محاسبه شده) در پایه های خروجی (DB0 الی DB7) قرار میگیرد….که با وصل کردن این ۸ تا پایه به یکی از پورت های میکرو کنترلر(مثلا PORTB) اطلاعاتش رو دریافت میکنیم و در یه متغییر ذخیره میکنیم(اسم متغییر مثلا a هستش) که باید به صورت زیر بنویسیم :
1 |
a=PINB; |
مرحله۵) بعد از دریافت اطلاعات از IC ما باید یه سری اعداد در این عدد ضرب و تقسیم کنیم(همانند همون محاسبات توی ADC داخلی میکروکنترلر AVR) که این فرمول برای این پروژه به صورت زیر هستش :
1 |
a=(a*5)/256; |
که عدد ۲۵۶ حاکی از دقت IC ADC میباشد (دقت IC هشت بیت میباشد که ۲ بتوان ۸ میشه ۲۵۶) و عدد ۵ همون (+)Vref میباشد….ما بسته به پروژتون باید این فرمول رو تغییر بدید……یعنی Vref رو هر چی انتخاب کردی باید همون مدار رو در فرمول بالا به جای ۵ قرار بدی…
مرحله۶) برای ریست کردن پایه INT و آغاز نمونه گیری دوباره باید CS=1 شود (یا به پایه RD یه لبه بالا رونده اعمال بشه)
در زیر یه پروژه با این مد براتون میزارم…
پروژه AVR آی سی ADC خارجی
این از شماتیک پروژه
این از کد های پروژه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <mega16.h> #include <delay.h> #include <stdlib.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #define MODE PORTD.0 #define INT PIND.1 #define CS PORTD.2 #define RD PORTD.3 void main(void) { char str[20]; float a; DDRB=0x00;//DB0-DB7 DDRD.0=1;//MODE DDRD.1=0;//INT DDRD.2=1;//CS DDRD.3=1;//RD lcd_init(16); lcd_puts(" DMF313.IR"); delay_ms(3000); lcd_clear(); MODE=0;// MODE = RD while (1) { delay_ms(200); CS=1;//غیر فعال کردن آی سی-- for reset INT delay_ms(200); CS=0;//فعال کردن آی سی RD=0;//START CONVERT //ما وای میستیم تا زمانی که تبدیل تمام بشه //با پایان تبدیل این پایه در مد آر دی صفر میشه while(INT);//وای میستیم تا صفر بشه a=PINB; a=(a*5)/256; ftoa(a,2,str);lcd_gotoxy(0,0);lcd_puts(str);lcd_putsf(" "); }; } |
WR-RD Mode :
مرحله0) انتخاب مود WR-RD برای آی سی >>> MODE=1
مرحله1) فعال کردن آی سی >>> CS=0
مرحله2) صدور فرمان آغاز نمونه گیری و تبدیل(همون محاسبه ولتاژ) >>> WR=0
مرحله3) حدود ۸۰۰ns صبر میکنیم ( یه (۵)delay_ms ) و بعد باید WR=1 شود…..تا INT=0 بشه (که یعنی پایان عملیات تبدیل).
مرحله4) در این مرحله اطلاعات در پایه های خروجی (DB0 الی DB7) قرار گرفته و با وصل کردن این ۸ تا پایه به یکی از پورت های میکرو کنترلر(مثلا PORTB) اطلاعاتش رو دریافت میکنیم و در یه متغییر ذخیره میکنیم(اسم متغییر مثلا a هستش) که باید به صورت زیر بنویسیم :
1 |
a=PINB; |
مرحله5) بعد از دریافت اطلاعات از IC ما باید یه سری اعداد در این عدد ضرب و تقسیم کنیم(همانند همون محاسبات توی ADC داخلی میکروکنترلر AVR) که این فرمول برای این پروژه به صورت زیر هستش :
1 |
a=(a*5)/256; |
که عدد ۲۵۶ حاکی از دقت IC ADC میباشد (دقت IC هشت بیت میباشد که ۲ بتوان ۸ میشه ۲۵۶) و عدد ۵ همون (+)Vref میباشد….ما بسته به پروژتون باید این فرمول رو تغییر بدید……یعنی Vref رو هر چی انتخاب کردی باید همون مدار رو در فرمول بالا به جای ۵ قرار بدی…
مرحله6) برای ریست کردن پایه INT و آغاز نمونه گیری دوباره باید CS=1 شود (یا به پایه RD یه لبه بالا رونده اعمال بشه)
در زیر یه پروژه با این مد براتون میزارم…
پروژه AVR آی سی ADC خارجی
شماتیک پروژه
مثلا شماتیک پروژه قبلی هستش.
کد های پروژه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
#include <mega16.h> #include <delay.h> #include <stdlib.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #define MODE PORTD.0 #define INT PIND.1 #define CS PORTD.2 #define RD PORTD.3 #define WR PORTD.4 void main(void) { char str[20]; float a; DDRB=0x00;//DB0-DB7 DDRD.0=1;//MODE DDRD.1=0;//INT DDRD.2=1;//CS DDRD.3=1;//RD DDRD.4=1;//WR lcd_init(16); lcd_puts(" DMF313.IR"); delay_ms(3000); lcd_clear(); MODE=1;// MODE = WR while (1) { delay_ms(200); CS=1;//غیر فعال کردن آی سی-- for reset INT delay_ms(200); CS=0;//فعال کردن آی سی WR=0;//START CONVERT delay_ms(5); WR=1; //ما وای میستیم تا زمانی که تبدیل تمام بشه //با پایان تبدیل این پایه در مد آر دی صفر میشه while(INT);//وای میستیم تا صفر بشه a=PINB; a=(a*5)/256; ftoa(a,2,str);lcd_gotoxy(0,0);lcd_puts(str);lcd_putsf(" "); }; } |
فیلم پروژه
توجه : این دو مد ولی در نحوه راه اندازی(که در بالا گفتم) و در مدت زمان مورد نیاز برا تبدیل (اول مطلب گفتم) با هم تفاوت دارن ولی این که دقیقا چه فرقی با هم دارن رو من متوجه ندم…..اگه کسی میدونه ممنون میشم بگه……در ضمن اگه چیزی رو جا انداختم بگید….
هزینه این مطلب : والا من بابام در اومد تا این مطلب رو نوشتم(مطلب چیز خاصی نداره) شمایی که از این مطلب استفاده میکنید باید یه فاتحه برا کسایی که تازه از دنیا رفتن و برا شهدا بخونید.
مهمان
دمت گرم مطالب یکی از یکی عالی تر

مهمان
دمت گرم … روح شهدا رو با این کارت شاد میکنی … همین که میبینن مثل شما باعث پیشرفت این آب و خاک میشن
مهمان
سلام شما توسنتین اینو درست کنین البته با ورودی سینوسی؟
مهمان
دمت گرم، عالی بود
مهمان
سلام ممنونم برای مطالب مفید و کاربردی که آموزش می دهید.
مهمان
سلام خیلی عالی ممنون
مهمان
دمت گرم داداش ، چیزای زیادی از سایتت یاد گرفتم ???
مهمان
سلام
خیلی عالیه
خدا خیرتون بده
تشکر فراوان
مهمان
سلام. می خوام سیگتال با فرکانس ۵۰ کیلو هرتز رو نمونه برداری کنم و تو متلب روش آنالیز انجام بدم .شما چه پیشنهادی دارید؟
من lpc1768 رو با یه adc خارجی می خوام run کنم و دیتا ها رو روی sd ذخیره کنم و ….
به نظرتون میشه ؟
آیا این بهترین راهه ؟
مهمان
سلام برای نمونه برداری از صوت (ماژول میکروفون دارم و پایه ای داره که اگه آستانه صدا به حد معینی برسه یک میشه ky-037 ) میشه از این آی سی استفاده کرد می خوام بیت ها رو دونه دونه بفرستم به محض نمونه برداری اون هم با ماژول nrf اگه میشه کمک کنید
مهمان
آقا مهدی بابا دمت گرم داداش
دست خوش اینم مثل قبلیها پروژه خوبی بود . . .
کار تو زمینه الکترونیک چقدر برات خرج برداشته ؟
نویسنده این مطلب
نمیدونم-ولی میدونم یه پلاستیک فاکتور جمع کردم تا الان
مهمان
تشکر
مهمان
درود بر شما احسنت
مهمان
اقا ممنون واسه همه مطلب هایی که میزاری شرمنده که ما واسه ی همه مطلبهات نظرنمیزاریم خدا خیرت بده اگه میتونی ادامه بده
نویسنده این مطلب
مهمان
عالی بود داداش
اقا من میخوام کار با arm و stm و رسپری رو یاد بگیرم , از کجا شروع کنم چ کلاسایی باید برم؟ میشه بدون یاد گرفتن avr مستقیم رفت arm یاد گرفت؟
نویسنده این مطلب
من خودم به شخصه کلاس نمیرم و میشینم خودم میخونم – سایت های فارسی خارجی – کتب فارسی خارجی – دیتاشیت – هر چی خوب گیرم بیاد میخونم.
بیشتر بابت ساده بودن avr و منابع زیاد میگن اول Avr وگرنه هیچ الزامی نیست
مهمان
سلام.
امیدوارم در تمام مراحل زندگی موفق باشید.
تشکر از شما بابت مطلب اموزنده و احسنت به هنر اموزش شما.
در پناه حق.
مهمان
سلام
وبسایت بسیار خوبی داری.من همیشه از مطالب آموزشی مفید شما استفاده میکنم و خیلی چیزا یاد گرفتم. خدا خیرت بده
مهمان
با تشکر مطالب مفید بودند اگر برای fpga هم توضیحاتی مشابه ارائه دهید بسیار عالی می شود
مهمان
سلام مهندس جان
پروتئوس به این آی سی ارور میده …هم فایل پروتئوس شما رو امتحان کردم هم خودم تک تک قطعات چیدم و اجرا کردم …
از کتابخونه خاصی استفاده کردید ؟
پروتئوسم جدیدتری ورژن موجود …
اینم از خطا
No model specified for U2. [U2]
Simulation FAILED due to partition analysis error(s).
مهمان
سلام
مهندس جان مدلی که در پروتئوس شبیه سازی کردی ۰۸۲۰ ؟
در پروتئوس من کمی فرق داره با این آی سی که گذاشتین
همچنین موقع اجرا از ای سی ADC ارور میگیره …کتاب خونه خاصی استفاده کردین ؟
پروتئوس من جدیدترین ورژن موجود …
نویسنده این مطلب
سلام
فک کنم در پروتئوس شبیه سازی نمیشه این ic
چون تو عکس پروژه(از پروتئوس) هم پروژه روشن نیست
و مجبور شدن در عمل تست کنم(که فیلمش ته مطلب هستش)
مهمان
tnx
مهمان
عالیه. فقط دانلود ها رو جدا کنید. مثلا یه جدول درست کنید و هر فایل هر قسمت رو جدا آپلود کنید و برای دانلود بگذارید
نویسنده این مطلب
سلام
والا چون اکثرا فایل پروژه ها به صد کیلو بایت نمیرسه چه برسه به ۱ میگ
مثلا فایل های همین مطلب ۷۰۰ کیلوبایته که زیاد نیست
به همین خاطر کل فایل ها رو یجا برا دانلود میزارم
مهمان
سلام از اینکه به فکر پیشرفت کشور هستید بسیار سپاسگزارم کاش همه مثل شما فکر میکزدند
مطلبتون هم عالی بود ولی ای کاش ADC های بالای ۱۰ بیت رو راه اندازی میکردید
مهمان
چجور بفرستم
مهمان
سلام دستتون درد نکنه ولی دانلود کردم تو پروتئوس اجرا نمیشه errorمیده مربوط به adc
چرا اینطور میشه؟
مگه خودتون امتحانش نکردید؟
نویسنده این مطلب
سلام
یه عکس از ارور بگیر و بفرست
مهمان
میتونی از همین مبدل برای سریع تر کردن اسیلوسکوپ که ساختی استفاده کنی. با avr سرعتش در حدود ۴۰ هزار نمونه بر ثانیه اما اگه از adc0820 استفاده کنی میتونی این نرخ نمونه برداری رو به ۶۵۰ هزار نمونه برسونی و اگه از ADS831 که جوان الکترونیک میفروشه و موجود داره میتونی اسیلوسکوپ با نرخ نمونه برداری ۸۰ میلیون بسازی ،
البته اینم بگم که مبدل رو به یه FPGA باید وصل کنی و با یه میکرو ARM ، مبدل رو با FPGA هماهنگ میکنه و در اخر اطلاعات دریافتی از FPGA رو روی ال سی دی رنگی نمایش میده.
مهمان
سلام اموزش خوبی بود، مبدل انالوگ به دیجیتال سریع داخل ایران خیلی نایابه ، از ADS830 سریعتر هم گیرتون اومده ؟؟؟
نویسنده این مطلب
سلام
…. که بعد طرف دیگه پیگیر پروژه نشد…ما هم بیخیال شدیم
والا من زیاد تو بحرش نیستم….
یه بار یه نفر یه پروژه ای میخواست که نیاز به آی سی Adc سریع بود….که تو ایران نبود و باز از کشور دوس و همسایه سفارش میدادی
مهمان
سلام
اقامهدی انگار من شمارو از نزدیک دیدم
میرفتی کلاس فنی حرفه ای پیش بیگی؟
بهرحال کارت قشنگه
ببین دوست عزیز رزومت رو برام بفرست من بزودی میخام یه چند جایی تدریس کنم و اگه خدابهاد یه شرکتم رابندازم
دنبال ادمایی مثل شما میگردم
کارات رو طبقه بندی کن و همیشه یک مقدمه از فرایند کل پروژه تو اول مطلب بزار خیلی کمک میکنه
بهرحال بدون که رفتی تو لیست bookmark من تا همیشه چکت کنم
خسته نباشی عزیز
خوشحال میشم باهم همکاری تو هرجور زمینه ای داشته باشیم
موفق باشی مهندس
نویسنده این مطلب
تو مطلب fpga جوابت رو دادم
مهمان
DAMET GARM
مهمان
سلام داداش مهدي
خيلي عالي بود
مطالب متنوع و خوبي ميزاري
من كه خيلي خوشم اومده
مرسي
نویسنده این مطلب
سلام
خواهش