طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
با استفاده از میکروکنترلر ATMEGA8 و کیبورد 3×4 می توان حروف و اعداد را تایپ کرد و درون یک متغییر ذخیره نمود و محتوای این متغییر بر روی نمایشگر LCD نمایش داده می شود. در صورتی که فضای LCD پر شود کاراکترها به سمت چپ شیفت داده می شوند. تمامی حروف و اعداد کوچک و بزرگ انگلیسی قابل تایپ می باشند.اندازه گیری ظرفیت خازن از 1pF تا 1uF، سلف از 1nH تا 1H و فرکانس از 1Hz تا 4MHz تنها با یک میکرو سوئیچ و همچنین کلیدی برای کالیبراسیون اتوماتیک.کنترل زاویه ای 0 تا 180 درجه؛ قابلیت تعریف بیش 100 برنامه مجزا توسط کاربر؛ تعیین زاویه برای هر پله حرکت سروو موتور؛ تعیین سرعت حرکت سروو موتور؛ تعیین مدت زمان کارکرد در هر برنامه از 1 تا 255 دقیقه. منوی کاربری بسیار آسان برای تعریف برنامه ها.این پروژه یک ماشین حساب ساده با چهار عمل اصلی بروی نمایشگر گرافیگی می باشد.ساعت دیواری دیجتال با قابلیت نمایش ساعت و دقیقه، دمای اتاق، تاریخ شمسی، روز هفته، زدن تک بوق وقتی که زمان یک ساعت جلو می رود، تنظیم ساعت و دما تنها با 2 کلید. ابعاد ساعت 33*27 سانتی متر می باشد.
پروژه تایپ حروف و اعداد با کیبورد 3.4 به زبان سی با avr

MCP-3

پروژه تایپ حروف و اعداد با کیبورد 3.4 به زبان سی با avr
پروژه خازن سنج و سلف سنج-LC متر با avr

MCP-14

پروژه خازن سنج و سلف سنج-LC متر با avr
پروژه کنترل سروو موتور از 0 تا 180 درجه با avr

MCP-2

پروژه کنترل سروو موتور از 0 تا 180 درجه با avr
پروژه ماشین حساب ساده با السیدی گرافیکی و avr

MCP-34

پروژه ماشین حساب ساده با السیدی گرافیکی و avr
پروژه ساعت دیواری دیجیتال به همراه تاریخ شمسی و دما با avr

MCP-13

پروژه ساعت دیواری دیجیتال به همراه تاریخ شمسی و دما با avr

کار با مبدل آنالوگ به دیجیتال ADC میکروکنترلر AVR به زبان سی C

به نام خدا

در این مطلب می خواهیم کار با مبدل آنالوگ به دیجیتال میکروکنترلر AVR را به زبان C و با کمک کامپایلر Code Vision توضیح دهیم. هدف ما از این مطلب این است که به چه صورتی از کانال ها مقدار آنالوگ را بخوانیم و بعد از تبدیل به دیجیتال، با این مقدار دیجیتال کار انجام دهیم.

از پرداختن مسائل ریز مربوط به  ADC صرف نظر می کنیم تا باعث گمراهی افراد تازه کار نشود. در اینجا ما به بحث در مورد رجیستر ها و نحوی انتخاب ولتاژ مرجع و شرایط و چگونگی انتخاب فرکانس نمونه برداری و 8 یا 10 بیتی ADC و یک مثال کامل خواهیم پرداخت.

از بخش سفارش طراحی هم اکنون درخواست خود را ثبت کنید
حل و تشریح کلیه تمرینات درس میکروکنترلر AVR
طراحی و ساخت مدارات دلخواه شما با میکروکنترلر AVR


رجیستر کنترلی ADMUX

0 1 2 3 4 5 6 7
MUX0 MUX1 MUX2 MUX3 MUX4 ADLAR REFS0 REFS1

REFS0,1 از این دو بیت برای انتخاب ولتاژ مرجع ADC استفاده می کنیم که دارای چهار حالت می باشد:

  1. REFS0=0 و REFS1=0 در این حالت ولتاژی که روی پایه AREF است به عنوان ولتاژ مرجع انتخاب می شود.
  2. REFS0=1 و REFS1=0 در این حالت ولتاژ پایه AVCC به عنوان ولتاژ مرجع انتخاب می شود.
  3. REFS0=0 و REFS1=1 بدون استفاده
  4. REFS0=1 و REFS1=1 در این حالت ولتاژ مرجع داخلی 2.56 ولت انتخاب می شود.

نکته: دقیق بودن ولتاژ مرجع در تبدیل کردن آنالوگ به دیجیتال نقش بسیار مهمی دارد. دقیق ترین ولتاژ مرجع همان 2.56 داخلی می باشد البته می توان با استفاده از تثبیت کننده های ولتاژ آن ولتاژ مرجع مورد نظر را ساخت و به پایه AREF داد.

 ADLAR از این بیت برای 8 یا 16 بیتی بودن مقدار خروجی ADC استفاده می شود. ADCH,ADCL

MUX0-4 از بیت ها برای انتخاب کانال ورودی و نیز انتخاب بهره تفاضلی استفاده شده است.

 رجیستر ADCSRA

0 1 2 3 4 5 6 7
ADPS0 ADPS1 ADPS2 ADIE ADIF ADATE ADSC ADEN

ADEN با یک کردن این بیت ADC فعال می شود.

ADSC در مد عملکرد Single با نوشتن یک در این بیت، تبدیل شروع شده و پس از پایان تبدیل به صورت خودکار صفر می شود. در مد Free، یک کردن این بیت برای شروع تبدیل الزامی است.

ADATE با یک کردن این بیت ADC می تواند به صورت اتوماتیک با لبه بالا رونده منبع تحریک کننده شروع به تبدیل کند. منیع تحریک توسط بیت های ADTS از رجیستر SFIOR انتخاب می شود.

ADIF بعد از اتمام تبدیل یا تغییر در رجستر داده ADC یک می شود. (از یک شدن این بیت ما متوجه می شویم که عمل تبدیل تمام شده و حالا می توانیم مقدار دیجیتال تبدیل شده را بخوانیم)

ADIE با یک کردن این بیت هرگاه عمل تبدیل به اتمام رسید یه وقفه ای صادر می شود که توسط آن زیر روال وقفه می توان مقدار داده ADC را خواند.

ADPS0-3 از بیت ها برای تعیین پالس ساعت ADC مطابق جدول زیر استفاده می کنیم:

تقسیم بر ADPS0 ADPS1 ADPS2
 2  0  0  0
 2  1  0  0
 4  0  1  0
 8  1  1  0
 16  0  0  1
 32  1  0  1
 64  0  1  1
 128  1  1  1

رجیستر داده (ADCH,ADCL) ADC

در این دو رجیستر اطلاعات خروجی ADC قرار دارند که در ADCL مقدرا سبک و در ADCH مقدار سنگین قرار دارد همچنین با استفاده از ADCW می توانیم محتوای هر دو متغییر را به صورت 16 بیتی بخوانیم.

رجیستر SFIOR

0 1 2 3 4 5 6 7
PSR1 PSR2 PUD ACME - ADTS0 ADTS1 ADTS2

از طریق بیت های ADTS0-2 می توان منبع تحریک برای شروع تبدیل را مطابق جدول زیر انتخاب کرد:

منبع تحریک ADC ADTS0 ADTS1 ADTS2
مد عملکرد آزاد  0  0  0
تحریک از طریق مقایسه کننده آنالوگ  1  0  0
تحریک از طریق وقفه خارجی صفر  0  1  0
تحریک از طریق تایمر (شمارنده) صفر (در صورتی که نتیجه مقایسه برابر شود)  1  1  0
 تحریک از طریق تایمر (شمارنده) صفر (در صورت سریز شدن)  0  0  1
تحریک از طریق تایمر (شمارنده) یک (در صورتی که نتیجه مقایسه B برابر شود)  1  0  1
 تحریک از طریق تایمر (شمارنده) یک (در صورت سریز شدن)  0  1  1
 تحریک از طریق حالت تسخیر تایمر (شمارنده) یک  1  1  1

 نکته: برای داشتن حداکثر تفکیک پذیری (10 بیتی) باید فرکانس پالس ساعت ADC بین 50KHZ تا 200KHZ باشد. که اگر این فرکانس از این محدود خارج شود دقت ADC پایین خواهد آمد.

 پس باید توجه داشت که با توجه به فرکانس نوسان ساز میکرو ضریب تقسیمی از جدول ADPS0-2 انتخاب کنیم که فرکانس واحد ADC در محدوده گفته شده قرار گیرد.

در این مثال ما می خواهیم با استفاده از دو عدد سنسور LM35 دمای دو نقطه را اندازه گیری کنیم و روی LCD نمایش دهیم. در فایلی که به این مطلب پیوست شده برنامه و سایر فایل های شبیه ساز موجود می باشد

1 ADC Enabled
Volt Ref: Int
Clock: 125KHz
Auto trigger: None

 با استفاده از Code Wizard به صورت بالا ADC را تنظیم می کنیم.

#define ADC_VREF_TYPE 0xC0 //H1 

SFIOR=0x00; //H2 
ADMUX=ADC_VREF_TYPE & 0xff; //H3 
ADCSRA=0x86; //H4

H1: با نسبت دادن ADC_VREF_TYPE 0xC0 ولتاژ مرجع داخلی انتخاب می شود که بعدا در زیر برنامه read_adc با AND و OR کردن آن با کانال انتخاب شده مقدار رجیستر ADMU ایجاد می گردد.

 H2: مد عملکر آزاد انتخاب شده

H3: با AND کردن آن با FF به صورت پیش فرض کانال صفر انتخاب شده و همچنین ADLAR هم صفر می باشد بنابراین خروجی به صورت ADCW شانزده بیتی خواهد بود.

H4: در اینجا ADC فعال شده و همجنین ضریب تقسیم 64 انتخاب می شود بنابراین فرکانس پالس ساعت ADC برابر 125KHZ می شود که در محدود مجاز می باشد.

 در زیرروال read_adc دستوراتی نوشته شده که بجزء یک خط آن بقیه را خود Code Wizard ایجاد می کند.

float t;//H1
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);//H2
delay_us(10);//H3
ADCSRA|=0x40;//H4
while ((ADCSRA & 0x10)==0);//H5
ADCSRA|=0x10;//H6 
t=((ADCW*2.56)/1023)*100;//H7
return t;//H8

H1: ایجاد یک متغییر از نوع اعشاری و بزرگ

H2: اگر C0 را با FF ما ADN کنیم نتیجه همان C0 خواهد شده حالا فرض کنید در هنگام فراخوانی این تابع ما 1 را به عنوان ورودی تابع داده ایم اگر C0 را با 1 OR کنیم آنگاه ADMUX= C1 خواهد شده و درنتیجه کانال 1 به همراه ولتاژ مرجع داخلی انتخاب می شود.

H3: مقدار 10 میلی ثانیه تاخیر برای پایدار شده ولتاژ ورودی ADC

H4: معادل باینری ADCSRA=0x86 برابر با 10000110 می باشد و همچنین معادل باینری 0X40 برابر با 01000000 می باشد. با OR کردن 86OR40 مقدار 11000110 را خواهیم داشت می بینیم که بیت شماره 6 به 1 تغییر یافت و این بیت همان ADSC می باشد که توضیح دادیم.

H5: با استفاده از یک حلقه بی نهایت شرطی بیت 4 یعنی ADIF یا همان پرچم اتمام تبدیل را تحت نظر می گیرم تا موقعی که تبدیل تمام و این بیت 1 شود و شرط حلقه باطل می شود که منجر به خروج از این حلقه بی نهایت می شود.

H6: خوب حالا باید بیت ADIF که یک شده را دوباره صفر کنیم که این کار را با OR‌ کردن بیتی با عدد 10 انجام می دهیم.

H7: خوب الان عمل تبدیل تمام شده و مقدار دیجیتال آن در ADCW قرار دارد چون ولتاژ مرجع را 2.56 انتخاب کردیم اینجا مقدار ADCW را در 2.56 ضرب می کنیم و بعد حاصل را بر 1023 تقسیم کرده و در نهایت در 100 ضرب می کنم تا دما برحسب درجه سانتیگراد بدست اید. عدد 1023 از فرمول زیر حساب می شود که n=10  بوده یعنی تفکیک پذیری 10بیتی

2^n  - 1 ==> 2^10  -1 = 1023

H8: مقدار دما که در متغییر t قرار دارد برگشت داده می شود.

این مثال همراه با توضیحات آن تنها در وب سایت www.picpars.com به صورت متن باز ارئه شده و کپی برداری از آن تنها با ذکر منبع امکان پذیر می باشد.

با تشکر فراوان سید محسن قاسمیان

ورژن نرم افزار ها: CodeVisionAVR V2.04.4a  و Proteus 7.7 sp2 Professional

  منبع: www.picpars.com

  لطفا مقالات، آموزش‌ها و پروژه های خود را به آدرس ایمیل ارتباطی ایمیل نمائید تا آن را با نام خودتان در سایت منتشر کنیم.




فایل های ضمیمه ( ورود - عضويت )

فایل شماره 110 | حجم 45 کیلوبایت | دانلود 6194 بار

منبع www.picpars.com  نویسنده: سید محسن قاسمیان

منبع www.picpars.com  دانلود مثال کار با مبدل آنالوگ به دیجیتال ADC میکروکنترلر AVR به زبان سی C

منبع www.picpars.com  پسورد: www.picpars.com

به این مطلب امتیاز دهید

برچسب ها:
تاریخ ارسال چهارشنبه، 13 بهمن ماه، 1389    نویسندهنویسنده: مدیریت    نظرات 50 نظر    بازدید بازدید [ 65363 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان   

پروژه ماشین حساب ساده با السیدی گرافیکی و avr
کد پروژه: MCP-34
عنوان: پروژه ماشین حساب ساده با السیدی گرافیکی و avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
این پروژه یک ماشین حساب ساده با چهار عمل اصلی بروی نمایشگر گرافیگی می باشد.
پروژه تایپ حروف و اعداد با کیبورد 3.4 به زبان سی با avr
کد پروژه: MCP-3
عنوان: پروژه تایپ حروف و اعداد با کیبورد 3.4 به زبان سی با avr
میکروکنترلر: AVR ==> زبان سی C (کدویژن)
قیمت: به جزئیات پروژه مراجعه نمایید
جزئیات سفارش خرید
با استفاده از میکروکنترلر ATMEGA8 و کیبورد 3×4 می توان حروف و اعداد را تایپ کرد و درون یک متغییر ذخیره نمود و محتوای این متغییر بر روی نمایشگر LCD نمایش داده می شود. در صورتی که فضای LCD پر شود کاراکترها به سمت چپ شیفت داده می شوند. تمامی حروف و اعداد کوچک و بزرگ انگلیسی قابل تایپ می باشند.

مرتبط باموضوع :          مطالب بیشتر در این موضوع

 تولید موج سینوسی، مربعی، مثلثی، شیب، دندان اره ای، ECG و نویز با AVR به زبان C  [ يكشنبه، 7 خرداد ماه، 1391 ] 35677 مشاهده
 کار با LCD کاراکتری یا متنی به زبان C  [ پنجشنبه، 16 ارديبهشت ماه، 1389 ] 85212 مشاهده
 ایجاد تاخیرهای دقیق با تایمرهای صفر و یک AVR به زبان سی  [ جمعه، 15 ارديبهشت ماه، 1391 ] 24281 مشاهده
 شمارنده تک رقمی با سون سگمنت زبان C و AVR  [ چهارشنبه، 13 مرداد ماه، 1389 ] 63541 مشاهده
 شمارنده دو رقمی با سون سگمنت زبان C و AVR  [ چهارشنبه، 13 مرداد ماه، 1389 ] 64292 مشاهده
نام شما:
ایمیل شما:
در مورخه : دوشنبه، 3 مرداد ماه، 1390

باعرض سلام خدمت دوستان چون در ميكرو تازه كارم و وقت زيادي ندارم كمك شما رو مي طلبم

پروژه ام ساخت يك نشان دهنده عقربه اي است براي اندازه گيري فشار با استپ موتور به طوري كه حركت پيوسته داشته باشيم نه حركت گسسته وتيك تيك دار مثل ساعت

اطلاعات:

ميكروكنترولر اي وي ار به زبان سي

اگر 0 ولت داشته باشيم عقربه عدد 0

اگر 28 ميلي ولت داشته باشيم عقربه عدد 20

گر 57 ميلي ولت داشته باشيم عقربه عدد 40

گر 85 ميلي ولت داشته باشيم عقربه عدد 60 را نشان دهد

   اگر موتوري ديگري پيشنهادمي كنيد كه كنترلش راحت باشد ذكر كنيد اگر امكان دارد فايل هگز و پرتئوس رو برام ايميل كنيد كمال تشكر را از شما دوستان دارم

shafeesabet@yahoo.com

ارسال جوابیه

نام شما: سوال
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : شنبه، 10 دي ماه، 1390

سلام من یه سوا ل داشتم در مورد این برنامه

من این برنامه رو دقیقا به همین صورت توی فایل کدویژن دیگه نوشتم و اجرا میکنم با همین ورژن پروتئوس و همین ورژن کدویژن برای من توی پروتئوس دما را نشون نمیده اما وقتی همین فایل دانلود شده را اجرا میکنم نشون میده علتش چیه؟

ویه سوال دیگه اینکه من میخوام از طریق ارتباط میکرو به پی سی این دو تا دما را بفرستم روی پی سی از طریق پورت com تا اونجا بهم دما را نشون بده اما مشکلی که هست اینه که اینها 16 بیتی تعریف شدند اما توی برنامه سمت پی سی من که بزبان vb نوشتم اینها باید هشت بیتی خونده بشن. چطوری میتونم اینارو تبدیل به دو تا داده هشت بیتی کنم؟

اینم برنامه سمت vb

Option Explicit
Option Base 1
Dim buffer As Variant
Private Sub Command_Click()
MSComm1.Output = Text1.Text
End Sub
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.CommPort = 1
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
mscom1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
buffer = Asc(buffer)
If buffer < 50 Then Text1.Text = buffer
End If
End Sub
ارسال جوابیه

نام شما: سوال2
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : شنبه، 10 دي ماه، 1390

ببخشید یه سوال دیگه هم داشتم اینجا که گفته تفکیک پذیری 10 بیتی یعنی چی؟ دقیقا منظور از تفکیک پذیری یعنی چی؟

ارسال جوابیه

نام شما: مدیریت
ایمیل شما:
در مورخه : شنبه، 10 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

در مورد عدم نمایش دما به اینجا مراجعه کنید:

برای تبدیل کردن محتوای 16 بیتی به 8 بیتی هم باید متغیر 16 بیتی را بر عدد 255 تقسیم کنید و با استقاده از دستور تقسیم "/" و همچنین دستور باقیمانده "٪" مقادیر جدید را در متغیر های 8بیتی کپی کنید.

تفکیک پذیری یا همان رزولوشن هرچی بالاتر باشه نمونه برداری دقیق تر انجام میشه. با یک مثال ساده قضیه رو برات روشن می کنم.

محور X را قدرت تفکیک در نظر بگیرید و محور Y را هم دامنه ولتاژ در نظر بگیرید. حال فرض کنید می خواهید بین اعداد 1 تا 10 با تفکیک 0.5 نمونه برداری کنید! این یعنی اینکه در هر 0.5 تایی از محور X یک نمونه از مقدار دامنه Y قرائت می کنیم. پس بین این اعداد 20 نمونه برداری داریم. حال اگر قدرت تفکیک را به 0.2 ببریم تعداد نمونه برداری ها به 100 بار خواهد رسید که نسبت به حالت قبل از رزولوشن یا قدرت تفکیک بالاتری برخوردار است.

اینها همه یعنی اینکه هر چه تعداد نمونه برداری ها بیشتر باشد ما تعداد دامنه های بیشتری را قرائت می کنیم و در نهایت کمیت مورد اندازگیری دقیق تر خواهد بود.

امیدوارم متوجه موضوع شده باشید.

ارسال جوابیه

نام شما: سوال
ایمیل شما:
در مورخه : شنبه، 10 دي ماه، 1390

عذر میخوام من متوجه نشدم

یعنی کدوم متغیرم را باید دقیقا تقسیم بر 255 تقسیم کنم؟

منظورتون عدد داخل adcw یا متغیر buffer که در سمت برنامه vb داده های منو از میکرو میگیره تقسیم بر 255 کنم و بعد توی دو تا textbox نمایش بدم؟

مشکل نمایش اعداد توی پروتئوسم حل شد ممنون لینکتون واقعامفید بود ممنون که خیلی سریع پاسخ دادین

 

ارسال جوابیه

نام شما: مدیریت
ایمیل شما:
در مورخه : يكشنبه، 11 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

باید محتوای adcw رو بر 255 تقسیم کنی. در ضمن buffer خودش از نوع char و آرایه می باشد. مثلا قسمت صحیح رو با / توی var1 بریز و باقیمانده رو هم با % توی var2 قرار بده، حالا این دو متغییر رو برای پورت سریال بفرست.25

ارسال جوابیه

نام شما: سوال
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : يكشنبه، 11 دي ماه، 1390

سلام ببخشید من دوباره مزاحم شدم

من برنامه رو به این شکل تغییر دادم که بصورت 8 بیتی دربیاد

#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1,var1,var2;
unsigned int read_adc(unsigned char adc_input)
    {   
    float t;
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    var1=ADCW/255;
    var2=ADCW%255;
    t=((var1*2.56)/1023)*100;
    t=((var2*2.56)/1023)*100;
    return t;
    }
void main(void)
{
    char buffer[32];
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    while(1)
    {
        t0=read_adc(0);
        t1=read_adc(1);
        lcd_clear();
        sprintf(buffer,"T0=%fnT1=%f",t0,t1);
        lcd_puts(buffer);
        delay_ms(100);
    }
 }

آیا همین درسته یا تغییر دیگه ایی هم لازمه؟ البته توی پروتئوس جواب گرفتم درست بود اما توی ساخت هنوز امتحان نگرفتم

ارسال جوابیه

نام شما: سوال
ایمیل شما:
در مورخه : يكشنبه، 11 دي ماه، 1390

ببخشید من یه سوالم در مورد ارتباط میکرو به پی سی داشتم

اگر بخوام همین برنامه رو بفرستم به پی سی چه تغییراتی باید توی برنامه بدم؟

باید از usart استفاده کنم؟

یعنی باید دو تا میکرو استفاده کنم یکیش دما رو تولید کنه و بفرسته به میکرو دیگه و اون یکی هم دما رو نشون بده؟ پس چجوری میفرسته به pc؟ یعنی چجوری باید usart ش را فعال کنم.

خیلی گیج شدم! تروخدا کمک کنید

ارسال جوابیه

نام شما: سوال
ایمیل شما:
در مورخه : يكشنبه، 11 دي ماه، 1390

سلام من برنامه را به این صورت تغییر دادم ارتباط usart هم درست شد و با virtual terminal پروتئوس چک کردم جواب داد

#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned int read_adc(unsigned char adc_input)
    {   
    float t;
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    t=((ADCW*2.56)/1023)*100;
    return t;
    }
void main(void)
{
    char buffer[32];
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    while(1)
    {
        t0=read_adc(0);
        t1=read_adc(1);
        lcd_clear();
        sprintf(buffer,"T0=%fnT1=%f",t0,t1);
        lcd_puts(buffer);
        printf("%s",buffer);
        delay_ms(100);
    }
 }

 

حالا اگه بخوام از وقفه usart استفاده کنم چطور باید اینکارو بکنم؟

ارسال جوابیه

نام شما: مدیریت
ایمیل شما:
در مورخه : يكشنبه، 11 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

دوست من هدف شما این بود که متغیر 8 بیتی ارسال کنید و ما هم با دستورات بالا گفتیم چگونه اینکار رو انجام بدی. حالا شما اومدید دوباره var1‌و var2 رو 32 بیتی تعریف کردید؟29 بهتر که اینا رو به unsigned char تغییر بدی. در ضمن عملیات رو درست انجام دادی و مطمئنا در عمل هم جواب خواهید گرفت.

اما در مورد سوال آخری: هیچ نیازی نیست که دوتا میکرو استفاده کنی قدرت یه دونه میکرو خیلی بیشتر از این حرفها است!27

باید با استفاده از پروتکل USART ارسال رو انجام بدی و این طوری هم که معلوم اطلاعات چندانی در این مورد نداری. بهتر که اول بخش USART رو از کتاب مرجع AVR یا سایر کتاب های به زبان سی مطاله کنید تا به موضوع مسلط شوید.

در ضمن شما می تونید یه بار دما رو اندازه گیری کنید و همان لحظه هم روی LCD نمایش بدید و بعد از آن متغیر های var1,var2 رو هم برای USART ارسال کنید و این کار همین طور ادامه داشته باشه. به همین سادگی

 

ارسال جوابیه

نام شما: سوال
ایمیل شما:
در مورخه : يكشنبه، 11 دي ماه، 1390

سلام من عذر میخوام اون برنامه قبلی را اشتباه فرستادم

برنامه من اینه الان اما فکرمیکنم ایراد داره چون فکرمیکنم برای تقسیم باید یه حلقه بزاریم با یه شرطی که تا به اون نرسیده تقسیم را ادامه بده بعد وقتی adcw در 255 تقسیم بشه باید باقیمانده در هشت بیت پایین و خارج قسمت توی هشت بیت بالا قرار بگیره و مدام باقیمانده را بریزه توی اون متغیرمان تا اونجا که به ذهنم میرسه الگوریتمش این شکلی بود و دومرتبه حاصل اخرین تقسیم را بریزه توی متغیر تقسیممان تا اگر لازم بود باز بر 255 تقسیم بشه و یه شرط هم باید براش بزاریم که آخرین خارج قسمت را هم توی اون آرایه هشت بیتی مون بزاره یعنی توی هشت بیت بالایی

الان ابن کد بنظرتون درسته؟

#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned char var1,var2;
unsigned int read_adc(unsigned char adc_input)
    {   
    float t;
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    var1=ADCW/255;
    var2=ADCW%255;
    t=((var2*2.56)/1023)*100;
    ADCW=var1;
    return t;
    }
void main(void)
{
    char buffer[32];
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    while(1)
    {
        t0=read_adc(0);
        t1=read_adc(1);
        lcd_clear();
        sprintf(buffer,"T0=%fnT1=%f",t0,t1);
        lcd_puts(buffer);
        printf("%s",buffer);
        delay_ms(100);
    }
 }
جوابیه ها

نام شما: مدیریت
ایمیل شما:
در مورخه : دوشنبه، 12 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

دوست عزیز هیچ نیازی به شرط یا تقسم های پی در پی ... نیست و اگر نظر شخصی بنده رو می خواهید چون کلا ارسال میکرو به پورت کام PC دارای خطای زیادی هست بهتر که به این صورت عمل کنید:

unsigned char var1,var2;
var1=ADCW/255;
var2=ADCW%255;

و حالا شما فقط var1 , var2 رو به پورت سریال بفرست و در سمت PC که دریافت کردی این دو متغییر رو دوباره به هم بچسبان و توی PC عمل تبدیل دما رو انجام بده تا هم از اعشار خوبی برخوار بشه و هم دقیق تر باشه یعنی اینکه var1 , var2 را توی یک متغییر جدید به نام tempvar به هم بچسبانید و عمل تبدیل رو تو همون PC به صورت tempvar=((tempvar*2.56)/1023)*100; انجام بده و محتوای tempvar رو نمایش بده.

تصمیم با خودته

ارسال جوابیه

ارسال جوابیه

نام شما: adc
ایمیل شما:
در مورخه : دوشنبه، 12 دي ماه، 1390

سلام

من کاریکه گفتید انجام دادم برنامه هارو به این شکل تغییر دادم

برنامه کدویژن :

#include <mega16.h>
#include <lcd.h>
#include <stdio.h>
#include <delay.h>
#define xtal 8000000
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#define ADC_VREF_TYPE 0xC0
float t0,t1;
unsigned int read_adc(unsigned char adc_input)
    {   
    unsigned char var1,var2;
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    delay_us(10);
    ADCSRA|=0x40;
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    var1=ADCW/255;
    var2=ADCW%255;
    return var1,var2;
    }
void main(void)
{
    char buffer[32];
    lcd_init(16);
    SFIOR=0x00;
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;
    while(1)
    {
        t0=read_adc(0);
        t1=read_adc(1);
        lcd_clear();
        sprintf(buffer,"T0=%fnT1=%f",t0,t1);
        lcd_puts(buffer);
        printf("%s",buffer);
        delay_ms(100);
    }
 }
 

اینم برنامه سمت پی سی که با vb بود :

 

 

Option Explicit
Option Base 1
Dim buffer, var1, var2,tempvar As Variant
Private Sub Form_Load()
MSComm1.Settings = "9600,n,8,1"
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputLen = 1
MSComm1.CommPort = 6
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub MSComm1_OnComm()
If MSComm1.CommEvent = comEvReceive Then
buffer = MSComm1.Input
tempvar = var1 + var2
tempvar = ((tempvar * 2.56) / 1023) * 100
buffer = tempvar
Text1.Text = Asc(buffer)
End If
End Sub
 

مدارمو ساختم اما همچنان روی ال سی دی من هیچ دمایی نشون نمیده چندصد بار هم اتصالاتمو چک کردم همه درستن!

ولی توی پی سی توی textbox وقتی فرمم را لود میکنم و ارتباط برقرار میشه فقط یه عدد 48 به من نشون میده. یعنی حداقل یه چیزی میفرسته به pc اما باید دو تا دما را بفرسته درصورتیکه فقط یه عدد نشون میده نمیدونم آیا تغییرات برنامه رو طبق اونچه که فرموده بودین درست انجام دادم؟ امکان داره یکی از سنسورهای lm35  من کار نکنه و بخاطر اون یه دما را نشون میده؟

ارسال جوابیه

نام شما: سوال
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : سه شنبه، 13 دي ماه، 1390

چرا کسی جواب نمیده؟

ایا برنامه رو درست تغییر دادم؟

مشکل چیه که فقط یه دما رو نشون میده

سخت افزاریه یا نرم افزاری؟

عدد 48 که نشون میده واقعا دماست؟

پس چرا روی lcd چیزی نشون نمیده؟

lcd را به این شکل متصل کردم

pc0=rs

pc1=rw

pc2=e

pc4=d4

pc5=d5

pc6=d6

pc7=d7

vssرا زمین کردم

vddرا زمین کردم

vee را با یه مقومت 1k زمین کردم

آند را با یه مقاومت1k وی سی سی کردم

کاتد را هم زمین کردم

جوابیه ها

نام شما: مدیریت
ایمیل شما:
در مورخه : سه شنبه، 13 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

شما مثل اینکه کلا منظور منو متوجه نشد اید. برنامه pc کلا مشکل داره شما دارید از پورت COM1 میخونید و توی buffer = MSComm1.Input قرار میدهید و بعد

tempvar = ((tempvar * 2.56) / 1023) * 100
buffer = tempvar

حالا به نظر خودتون توی buffer الان چی؟؟28 var1,var2 که tempvar‌ رو تشکیل میده الان محتوای اون صفر! اون عدد 48 هم هیچ ربطی به اطلاعات دریافتی از پورت نداره!

من گفتم به علت اینکه ارتباط با PC دو سیمه هست مطمئن باش خطای زیادی به وجود میاد پس فقط دو دما رو به صورت عددی ارسال کن و هیچ نیازی هم نیست اونها راه 8 بیتی کنی! همون محتوای ADCW رو به پورت بفرست که یک عدد صحیح می باشد. حالا در سمت PC اولین دما که توی ADCW هست رو توی var1 قرار بده و همین طور دمای دومی رو توی var2 حالا برای هر یکی از این دو متغییر ها عمل تبدیل به درجه سانتیگراد رو انجام بده.

اما در مورد LCD:

VSS=GND
VDD=VCC
VEE=1K GND

نکاتی هم وجود داره: 1- برخی از LCD ها از داخل VEE=1K به زمین وصل شده پس دیگه نباید بیرون به اون مقاومت وصل کرد بلکه باید یه سره یه زمین وصلش کرد. اما در صورتی که از این نوع نباشد باید با یه مقاومت 1کیلو زمین کرد. 2- اگر از نسخه CodeVisionAVR V2.05.3 استفاده میکنی باید توی تنظیمات پروژه قسمت LCD متنی پایه ها  رو مطابق اون چیزی که توی عمل و توی پروتیوس بستی اونجا هم تنظیم کنی. 3- میکرو atmega16 و 32 به صورت پیش فرض پورت C اون برای ارتباط JTAG فعال هست و از اونجایی که خود بنده این اتفاق برام افتاده این رو میگم. بهتر که پورت تو عوض کنی یا هنگام پروگرم کردن فیوز بیت JTAG رو غیر فعال کنی. (البته این رو هم اضافه کنم که این اتفاق مال خیلی قبل و من الان دقیقا توی ذهنم نیست که فیوز بیت JTAG بود یا فیوز بیت دیگری اگه حرفه‌ای نیستی بهتر که پورت C رو تغییر بدی به یه پورت دیگه)

امیدوارم که مشکلت حل بشه

ارسال جوابیه

ارسال جوابیه

نام شما: adc
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : جمعه، 16 دي ماه، 1390

کاریکه گفتید کردم

پورت lcd را عوض کردم

الان دما را روی lcd نشون میده

اما به pc عدد 0 میفرسته

دیگه نمیدونم مغزم هنگ کرده 25 چرا انقد عصبانی شدین موهاتونو کندین؟

خوب اگه بلد بودم که نمیومدم اینجا سوال کنم!! 17

جوابیه ها

نام شما: مدیریت
ایمیل شما:
در مورخه : شنبه، 17 دي ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

سلام

شرمنده قصد جسارت نداشتم، خدا رو شکر که به یه جاهایی رسیدین.

در مورد ارتباط سریال هم پپیشنهاد میکنم از منابع موجود در لینک زیر استفاده کنید.

article/category11/topic28/page1/پروتکل‌ها

ارسال جوابیه

ارسال جوابیه

نام شما: adc
ایمیل شما: saint.jesus.christ@gmail.com
در مورخه : دوشنبه، 19 دي ماه، 1390

لینکاتونو مطالعه کردم یعنی دوتاشو که مربوط به RS232  بود دیدم چون بقیه ش بدرد مشکلم نمیخورد

یکیش که بیشتر درباره قطعه RS232 بود که نحوه کارشو توضیح داده بود که من با این قطعه و نحوه کارش تا اونجا که لازمه آشنایی داشتم و این قطعه هم بصورت آماده که روی یه IC سوار هست و با کابلم به pc متصل میشه خریدم که فقط کافیه rx شو به TX میکرو وصل کنم تا اطلاعاتمو بفرسته همین!

اون یکی هم که درباره ارتباط usart و پورت کام توضیح داده بود که من با قطعه com کار نمیکنم و تنظیمات usart من هم تا اونجایی که تو کتابا و مقالات خوندم رجیسترهاش همه درست مقداردهی شده!

اونکاری هم که گفتید داده هارو بفرستم سمت pc و اونجا تقسیم کنم و هشت بیتی و اینا یه مشکلی که بود این بود که داده سمت pc من که buffer هست و داده هارو از میکرو دریافت میکنه از نوع variant تعریف کردم و هر عملیات ریاضی که روش انجام میدم برنامه موقع اجرا خظای type mismatch یعنی عدم تطابق نوع داده میده!!!

از هر نوع دیگه هم تعریف کردم همین پیغامو میداد! نمیدونم چرا؟

داده هایی که از میکرو به pc میره کاراکتری هستن یا عددی؟؟ چرا وقتی میخوام روش عملیاتی انجام بدم ایراد میگیره از نوع دادم؟

ارسال جوابیه

نام شما: sh.j
ایمیل شما: sh.j1383@yahoo.com
در مورخه : چهارشنبه، 24 اسفند ماه، 1390

سلام این اولین بار سایت شما رو میبینم.!!!!!!!!!من خیلی تازه کارمومیخوام برنامه یک ترانس رو بنویسم.یعنی میکرو ولتاژ ورودی برق شهر رو بخونه و اون رو روی lcd  نمایش بده وچون ماکزیمم ولتاژ ورودی 240 ولت اما ماکزیمم ولتاژی آی سی  5 ولت نمیدونم از چه رابطه ای اینها رو مچ کنم2و برنامه رو چه جوری بنویسم!!!!!!!!لطفا و خواهشا کمکم کنید.تشکر

ارسال جوابیه

نام شما: sh.j
ایمیل شما: sh.j1383@yahoo.com
در مورخه : چهارشنبه، 24 اسفند ماه، 1390

راستی  از atmega8  استفاده میکنم

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : چهارشنبه، 24 اسفند ماه، 1390توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

سلام

اول از همه یک خازن (خازن های بزرگی که تو محافظ ها هم هست) با برق ورودی سری کن بعد از خازن ولتاژ رو به بده به یک پل دیود و بعد از اون هم با یک مدار مقاومتی ولتاژ 220 رو با یک نسبتی به محدوده 5 ولت تبدیل میکنید. برای توضیحات بیشتر به لینک زیر مراجعه کنید. این پروژه دقیقا همون کاری رو انجام میده که شما میخواهید با این تفاوت که میکرو اون 8051 هست ولی می تونید از رو نقشه مداری اون کمک بگیرید.

30//8051-به-زبان-اسمبلی/پروژه-ولت-متر-دیجیتال-با-8051-به-زبان-اسمبلی/

ارسال جوابیه

ارسال جوابیه

نام شما: مجتبي
ایمیل شما: m.baghbanzade@yahoo.com
در مورخه : چهارشنبه، 9 فروردين ماه، 1391توسط
(مشخصات کاربر mmojtabaa | ارسال پیغام شخصی)

سلام من برنامه رو همينطور كه شما گفتين تنظيم ميكنم ولي از من ADCSRA=0x85;ميشه ولي از شما ADCSRA=0x86;

علتش چيه؟

 

ACSR=0x80;
SFIOR=0x00;
 
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x85;
ارسال جوابیه

نام شما: sh.j
ایمیل شما: sh.j1383@yahoo.com
در مورخه : جمعه، 11 فروردين ماه، 1391

سلام از راهنمایی قبلیتوون ممنونم.میشه یکی به من بگه که چه جوری میشه جلوی تغییرات ناگهانی ولتاژ رو گرفت؟این ولتاژ ورودی یک ترانس محافظ هست!برنامه سوال قبلم رو به زبان سی تقریبا نوشتم و فقط نمیدونم اگه پیک ولتاژ ناگهانی تغییر کرد چی کار باید بکنم

ممنون

ارسال جوابیه

نام شما: sh.j
ایمیل شما: sh.j1383@yahoo.com
در مورخه : جمعه، 11 فروردين ماه، 1391

سلام از راهنماییتون سپاسگزارم.برنامه رو به زبان سی تقریبا نوشتم فقط نمیدونم چه طوری میشه تغییرات ناگهانی پیک ولتاژ رو کنترل کرد و ثابت نگه داشت.این ولتاژ  .ورودی یک ترانس محافظ هست

ارسال جوابیه

نام شما: eli
ایمیل شما: k.eli27@yahoo.com
در مورخه : پنجشنبه، 31 فروردين ماه، 1391

سلام ممنون از مطالب بسیار مفیدتون.

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

اگه راهنماییم کنید ممنون میشم.

ارسال جوابیه

نام شما: مجید
ایمیل شما:
در مورخه : پنجشنبه، 28 ارديبهشت ماه، 1391توسط
(مشخصات کاربر MEMOL | ارسال پیغام شخصی)

سلام اگر بخواهیم پتانسیومتر را به ورودی آنالوگ صفر وصل کنیم و مقدار پتانسیومتر را تغییر بدیم و هر بار السیدی اون مقدارو نشون بده(منظور از تغییر پتانسیومتر تغییر مقاومته یا ولتاژ)بیخوابی

ارسال جوابیه

نام شما: eli
ایمیل شما: k.eli27@yahoo.com
در مورخه : چهارشنبه، 3 خرداد ماه، 1391

سلام چرا کسی جواب منو نمی ده ،کسی اطلاعاتی در مورد مبدل آنالوگ به دیجیتال نداره؟

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

ارسال جوابیه

نام شما: مجید
ایمیل شما:
در مورخه : جمعه، 5 خرداد ماه، 1391توسط
(مشخصات کاربر MEMOL | ارسال پیغام شخصی)

سلام.ببخشید می دونم سوالم  مربوط به این بخش نیست نمیدونستم کجا باید بنویسم

یه عدد دهدهی از طریق کیپد وارد می کنیم (یک عدد بین 0 تا 255) بعد پورت C باید مساوی این مقدار قرار بگیره می خواستم کدشو تو کدویزن راهنمایی کنید چجوری بنویسم

یعنی اگر کاربر 147 وارد کرد چجوری پورت سی را = 147 بگذرام

آیا درسته PORTC=147? یا باید با هگز و باینری بنویسم؟ اخه من بعدش باید روی بیتای پورت سی یه محاسباتی انجام بدم اگه مثلا پورت سی =1 خودش می فهممه هر کدوم از بیتای پورت سی چنده؟

ممنون

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : جمعه، 5 خرداد ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

با سلام، بله درسته در حوزه دسیمال به این صورت PORTC=147; پورت را مقدار دهی میکنیم. اگر شما نوشتید PORTC=1 فقط بیت 0 یک خواهد شد و بقیه بیت ها صفر. و اگر نوشتید PORTC=7 بیت 0و1و2 یک خواهد شد و بقیه صفرموافقم

این هم آموزش اتصال کیبورد به میکرو: اتصال کیبورد 4*4 به میکروکنترلر AVR گل

ارسال جوابیه

ارسال جوابیه

نام شما: مجید
ایمیل شما:
در مورخه : جمعه، 5 خرداد ماه، 1391توسط
(مشخصات کاربر MEMOL | ارسال پیغام شخصی)

خیلی اقایی شستگل

ببخشید یه سوال دیگه دارم تو dac که فرموله زیر را داره که

v=vref(A1/2+.....A8/256) این فرمول تو مدار داخلی خود دک محاسبه میشه یا باید تو کدویزن بنویسیم این فرمولو

اگه تو خود مدار داخلیش حساب میشه اگه بخاییم مقدار انالوگ ولتازو رو السیدی نشون بدیم بدون فرمول چجوری ولتازو در بیاریم که نشون بدیم چون اسم خود پایه های DAC هم می نویسم کدویزن نمیشناسدش باید چه کنیمعصبانی

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : جمعه، 5 خرداد ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

دوست عزیز من نمیدونم این فرمول رو از کجا آوردی! ولی چیزی که هست این که شما باید یک کانال رو انتخاب کنی و مقدار تبدیل شده را قرائت کنی. مقدار تبدیل شده همواره در رجستر ADCW قرار دارد. سعی میکنم یا مثال در این مورد بزارم، چون خیلی از تاره کارها این سوال رو مطرح میکند.

ارسال جوابیه

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : شنبه، 6 خرداد ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

اندازه گیری ولتاژ با مبدل آنالوگ به دیجیتال ADC به زبان سی

ضمیمه شدشست

ارسال جوابیه

ارسال جوابیه

نام شما: مجید
ایمیل شما:
در مورخه : شنبه، 6 خرداد ماه، 1391توسط
(مشخصات کاربر MEMOL | ارسال پیغام شخصی)

سلام خسته نباشید کی میشه این درس تموم شه شما هم از دست سوالای من راحت شید دندانها ببخشید می خواهیم مربعی و مثلثی و دندان اره ای  تولید کنیم  موجشونو می خواستم فرمولشو بم یاد بدین گریه اخه واسه سینوسی خب تابع سینوس هست بدست میاریم ولی  اینا رو چجوری بدست بیاریم.من فقط فرمول بدست اوردنشو میخوام موجشو خودم درست میکنم خستگی

مرسیعاشق

ارسال جوابیه

نام شما: مجید
ایمیل شما:
در مورخه : يكشنبه، 7 خرداد ماه، 1391توسط
(مشخصات کاربر MEMOL | ارسال پیغام شخصی)

ایییییی چرا جواب سوالمو ندادیدگریه

جوابیه ها

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : يكشنبه، 7 خرداد ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

سلام، به صفحه زیر مراجعه نمائید:فکرکردن

تولید موج سینوسی، مربعی، مثلثی، شیب، دندان اره ای، ECG و نویز با AVR به زبان C

ارسال جوابیه

ارسال جوابیه

نام شما: سمانه
ایمیل شما: mousayi69@yahoo.com
در مورخه : يكشنبه، 10 دي ماه، 1391

سلام من پروژه مولتی متر رو می خوام با میکرو کنترلر پی آی سی

این مولتی متر 4 تا کار می کنه یکی فرکانس متر یکی مقاومت سنج و ولت متر می خوام آمپر متر رو درست کنم اما یاد ندارم

تورو خدا کمکم کنید 2 روز بیشتر وقت ندارم

ارسال جوابیه

نام شما: poia
ایمیل شما: poia58@gmail.com
در مورخه : يكشنبه، 15 بهمن ماه، 1391

سلام من از این مبدل برای خواندن خروجی سنسور MQ9 استفاده کرده ام  اما آخرین عددی که می تواند نمایش دهد 256 است در حالیکه خروجی 16 بیتی است و نباید مشکلی برای نمایش اعداد بزرگتر وجود داشته باشد.لطفاً در مورد چگونگی حل مشکل راهمایی ام کنید.باتشکر

ارسال جوابیه

نام شما: سید محسن قاسمیان
ایمیل شما:
در مورخه : يكشنبه، 15 بهمن ماه، 1391توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

سلام، شما باید از محتوای ADCW که 16 بیتی هست برای خواندن اطلاعات استفاده کنید

ارسال جوابیه

نام شما: poia
ایمیل شما: poia58@gmail.com
در مورخه : يكشنبه، 15 بهمن ماه، 1391

من دقیقاً از کد شما استفاده کرده ام و همانطور که برای سطر

ADMUX=ADC_VREF_TYPE & 0xff; //H3

توضیح داده اید خروجی به صورت ADCW شانزده بیتی خواهد بود. و با توجه به

t=((ADCW*2.56)/1023);//H7

عملاً از محتوای شانزده بیتی ADCW استفاده شده است با اینحال مشکل من همچنان باقیست و این مسأله در پروژه «اندازه گیری ولتاژ با مبدل آنالوگ به دیجیتال ADC به زبان سی» نیز وجود دارد و ولتمترها ولتاژ بالاتر از 5 ولت را نشان نمی دهند.

ارسال جوابیه

نام شما: گلی
ایمیل شما: mihammadif642@ymail.com
در مورخه : يكشنبه، 20 اسفند ماه، 1391

با سلام من برنامه نویسی سنسور های ربات را میخواهم  به طوریکه دو موتور را روشن کنند

ارسال جوابیه

نام شما: عارف حسنی
ایمیل شما: damavandfx@gmail.com
در مورخه : دوشنبه، 19 فروردين ماه، 1392

با سلام

من رو بردم برای تبدیل آنالوگ به دیجیتال از ADS7816 استفاده کردن آیا از این آی سی قویتر هم وجود ندارد 

ممنون

ارسال جوابیه

نام شما: ابوالفضل
ایمیل شما:
در مورخه : شنبه، 14 دي ماه، 1392

سلام

من مداری با ATmega8 میخواهم که بتونه ازدو ورودی آنالوگ صفر تا ده ولت رو بگیره ودو تا خروجی پالس یک کیلو هرتز ثابت ولی اندازه قسمت مثبت پالس بسته به ورودی متغییر باشه و برای هر خروجی با دو عدد پتانسیومتر در ورودیهای A/D AVR لمیت پایین و لمیت بالا تعریف کنیم که تغییرات ما در بازه دو لمیت باش

البته بیشتر منظورم برنامه هست تا سخت افزار

ارسال جوابیه

نام شما: mohammad
ایمیل شما: mamali.gh67@yahoo.com
در مورخه : سه شنبه، 2 ارديبهشت ماه، 1393

سلام. من برنامه رو با کدویژن نوشتم و در پروتئوس خروجی صحیح و کامل گرفتم. ولی تو واقعیت که ساختم دما تکون نمیخوره. بین 18تا22 متغیره. حتی فندکم بگیرم بازم عوض نمیشه. نمیدونم چه مشکلی داره. آیا کدویژن تنظیمات خاصی داره برای دماسنج؟ آیا lm35 روش خاصی داره؟

 while (1)
      {
      delay_ms(50);
      a=read_adc(0);
      a=(a*5)/1024*100;
      b=a;
      lcd_gotoxy(0,0);
      sprintf(buffer, "temp= %dxdfc", b);
      lcd_puts(buffer);

جوابیه ها

نام شما: مدیر
ایمیل شما:
در مورخه : سه شنبه، 2 ارديبهشت ماه، 1393

سلام، پین های مربوط به تغذیه ADC یعنی AGND و AVCC و AREF رو برسی کنید به احتمال زیاد یکی از پین ها آزاد می باشد.

ارسال جوابیه

ارسال جوابیه

نام شما: یاسین
ایمیل شما: www.yasin1631@yahoo.com
در مورخه : جمعه، 12 ارديبهشت ماه، 1393

با سلام و احترام

برنامه زیر را می خواستم لطف کنید برام ایمیل بزنین ممنونم

برنامه ای بنویسید که دما را از سنسور دما دریافت کرده و جهت نمایش به lcd

بفرستد برنامه برای میکرو atmega16  نوشته شود و باید به زبان AVR باشد .

 

 

ارسال جوابیه

نام شما: حمید
ایمیل شما: hamidheidari@email.com
در مورخه : سه شنبه، 31 تير ماه، 1393

خواهش میکنم کمکم کنید 

این برنامه فقط دمای 0 تا 50 درجه رو نشون میده امت چطور میتونم دمای زیر صفر و بالاتر از 50 رو با lm35 در کدویژن و زبان c روی lcd نشون بدم

 

جوابیه ها

نام شما: hamid
ایمیل شما:
در مورخه : سه شنبه، 31 تير ماه، 1393

دمای 50+ را درست کردم اما هنوز نتونستم دمای منفی رو نشون بدم

ارسال جوابیه

ارسال جوابیه

نام شما: اکبر
ایمیل شما:
در مورخه : دوشنبه، 25 خرداد ماه، 1394

با سلام . یک برنامه برای اندازه گیری ولتاژ 0 -5 ولت در  c نوشتم در پروتئوس جواب گرفتم در عمل هم جواب میده فقط یه مشکلی هست اینکه در عمل رقم آخر مقدار ولتاژ نوسان میده یعنی مثلا یک لحظه عدد 3.55 رو نشون میده و فورا عدد 3.45 و 3.50 و ... این مشکل از کجاست و چکار باید کرد با تشکر 

جوابیه ها

نام شما: مدیر
ایمیل شما:
در مورخه : سه شنبه، 26 خرداد ماه، 1394توسط
(مشخصات کاربر SMGH-admin | ارسال پیغام شخصی)

با سلام، توسط یک تابع بین 20 تا 50 بار از ADC بخوان و سپس میانگین آن را به عنوان مقدار ADC بازگشت بدهید.

ارسال جوابیه

ارسال جوابیه

نام شما: محمد
ایمیل شما: pishtazanesanaat@gmail.com
در مورخه : شنبه، 7 بهمن ماه، 1396

با سلام و عرض خسته نباشید در حال ساخت پروژه ای بودم مشکل فنی پیدا کردم می خواستم از خروجی اسپیکر ic ka8603 به میکرو کنترلر ورودی آنالوگ بگیرم اما بازه ان خیلی کوچیکه تو دیتا شیتش نوشته که مقدار موثر ولتاژ خروجی rxo که همون اسپیکر 0.2 تا 0.4 ولته برا همین می خواستم ببینم ولتاژ مرجع میکروکنترلر atmega 16 رو می تونم کوچکتر از 2.56 ولت قرار بدم تا گام کمتر بشه یا کلاً چطوری می تونم گام های کمتر از 2mv رو ایجاد کنم با تشکر 

ارسال جوابیه

 
نام شما: [ کاربر جدید ]

نام شما (ضروری): 
ایمیل شما : 
نظر:
کد امنیتی
کد امنیتی

  [ بازگشت ]