• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
انجمن ها > انجمن برق > صفحه اول بحث
لطفا در سایت شناسائی شوید!
برق (بازدید: 18049)
جمعه 7/12/1388 - 23:7 -0 تشکر 186304
آموزش مبتدی زبان c برای میکروکنترلر AVR

آموزش مبتدی زبان c برای میکروکنترلر AVR 

  معرفی یک روبات ؛ میکروکنترولرها ؛ معرفی مبتدی زبان C برای میکروکنترلر AVR  
تلفیقی
متن:


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

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

در زبان c با علامت {.........} زیاد سرو کار داریم که نمایانگر زیر مجموعه ی دستور اصلی هستند که در نقطه چین می نویسم.

در بعضی از دستورات نیاز به یک توضیح می باشد که می توانییم از علامت // استفاده کنیم ویا اول توضیح را با */ و در آخر توضیح هم با علامت /* تمام می کنیم .
نکته توضیحات یک دستور هیچ فضایی را در کد مبنای 16 ( کد HEX) اشغال نمی کند.


در مثال زیر مانند نرم افزار کدویژن توضیحات را با رنگ آبی نمایش می دهد و من هم همینکار را کردم .


مثال:


دستور اصلی // دستور اصلی ; (سمیکالن) ندارد.
{
زیر مجموعه ;
. ......;
. .........;
.    ....... ;

}


انشاالله این بحث ادامه داردبر گرفته از جزوه ی دانشجویی

شنبه 8/12/1388 - 23:18 - 0 تشکر 186719

انواع داده :


در هر زبان برنامه نویسی تعدادی متغیر وجود دارد.

منظور از متغیر یعنی اینکه ما می توانیم یک نامی را انتخاب کنیم بصورت کاملا شخصی و بعد در آن متغیر اعداد را قرار دهیم.که البته این متغیرها انواع مختلفی دارند که پنج نوع داده ی اصلی در زبان c عبارتند از:


نوع متغیر

نام متغیر

اندازه به بیت (مقدار فضای اشغال شده در آی سی)

محدوده ی کار هر متغیر

شامل اعداد صحیح

int

16

32767 تا 32767-

شامل اعداد اعشاری

float

32

6 رقم اعشار

شامل اعداد اعشاری

double

64

10 رقم اعشار

شامل کاراکتر

char

8

127تا127-

نوع پوچ

noid

حال ممکن است فردی بخواهد فقط از محدوده ی مثبت یک متغیر استفاده کند که برای این کار می تواند کلمه ی unsigned را به اول متغیر اضافه کند که باعث می شود محدوده ای که برای منفی بود به مثبت اضافه شود .


نکته مهم مهم : باید دقت داشت که زبان c به بزرگی و کوچکی حروف حساس است.


مثال:


نام این متغیر را بندهxانتخاب کردم ولی می شود اسم دیگری نوشت//;int x
  ;int y
;int timer



تا اینجا کمی با ساخت متغیر از نوع int آشنا شدیم و حالا باید کمی هم در مورد عملگرها بگوییم که کار بسیار مهمی را می توان با آنها انجام داد و می توان آنها را به چهار دسته ی
1-ریاضی
2-منطقی
3-رابطه ای
4-دست کاری بیت ها
می پردازیم
برگرفته از جزوه ی دانشجویی

AVR




شنبه 1/3/1389 - 11:18 - 0 تشکر 201558

عملگرهای ریاضی

کاربرد

مفهوم

عملگر

;X=X*2

ضرب

*

;X=X/2

تقسیم

/

;X=X%2

باقی مانده تقسیم

%

;X=X+2

جمع

+

;X=X-2

تفریق

-

;++X

افزایش یک واحد

++

;--X

کاهش یک واحد

--

عملگرهای محاسباتی

کاربرد

مفهوم

عملگر

;X>10

کوچکتر

;X>=5

کوچکتر مساوی

=<

;X<1

بزرگتر

>

;X<=5

بزرگتر مساوی

=>

;X!=0

نامساوی

=!

;X==6

مساوی

==

عملگرهای منطقی

کاربرد

مفهوم

عملگر

(if (x>=10 && y==10

AND

&&

(if (x>=10 || y==10

OR

||

;!x

NOT

!

برگرفته از جزوه ی دانشجویی

AVR

دوشنبه 15/1/1390 - 2:7 - 0 تشکر 303628

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

در زبان C به طور کلی در ابتدای برنامه چند کتابخانه داریم.

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

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

کتابخانه نیز همین کار را انجام می دهد یک متن را می توانید در یک برنامه فقط با بکار بردن نامش از آن استفاده کنید.

اکثر کتاب خانه ها تعریف شده است و کافیست شما نام آنها در برنامه بنویسید.

البته خود شما هم می توانید برنامه ای را به عنوان کتاب خانه ذخیره کرده و از آن استفاده کنید.

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

#include

در واقع در این دستور ما کتابخانه ی mega16 که یک آی سی می باشد را باز کردیم.

بعداز کتابخانه ها و یکسری وقفه ها می رسیم به دستور

void main(void)

{

...

}

در واقع(void main(void حداقل تابعی است که در زبان سی از آن استفاده می شود!!

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

به طور مثال ورودی و خروجی ها در این تابع تعریف می شود و ...

ورودی و خروجی چیست؟

در یک میکروکنترلر چندین پایه وجود دارد که به غیر از بعضی پایه ها مانند منبع ولتاژ آی سی و پایه ی ریست می توان از آن پایه ها استفاده کرد و آنها را ورودی و یا خروجی کرد.

می توان داده ای را از یک سوئیچ گرفت و آن را پردازش کرد و سپس یک خروجی در یک فاصله زمانی مشخص از پایه ی خوروجی گرفت.

پورت ها

در یک آی سی بسته به نوع آن و تعداد پایه های موجود در آن پورت هایی را نیز داریم که این پورت ها از پایه های همان آی سی تشکیل شده است که یک پورت سالم دارای 8 پایه از یک آی سی را به خود اختصاص می دهد.

البته بعضی از آی سی ها هستند که دارای پورت های ناقص هستند یعنی تعداد آنها کمتر از 8 پایه می باشد.

در ضمن پورت ها را با حروف لاتین نمایش می دهند PORTA (پورت A) که باید با حروف بزرگ نوشته شوند.

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

برای اینکه یک پورت را مشخص کنیم که ورودی باشد یا خروجی باید اول دستور DDR را بنویسیم سپس نام پورت را نیز ذکر کنیم البته با حروف بزرگ.

به طور مثال :

DDRA=0x00;//در این دستو مشخص شده که پورت ای به طور کامل به عنوان ورودی تعریف شده است

در مثال بالا پورت A یه عنوان پورت ورودی تعریف شده است که چگونگی این عمل را با هم کار می کنیم.

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

برای این کار باید با مبناها آشنایی داشته باشیم.

اول مبنای صفر و یک را در نظر می گیریم که در اینجا صفر یعنی ورودی و یک یعنی خروجی.

پس در این مثال هر جا یک بود یعنی آن پایه از آن پورت خروجی و هر جا صفر بود یعنی آن پایه از آن پورت ورودی است.

حال برای بهتر درک کردن از 8 عدد مربع به عنوان 8 پایه از یک پورت استفاده می کنیم.

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

 صفر   یک  صفر  صفر  صفر  صفر  صفر  صفر 

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

باید تا به اینجا متوجه شده باشید که این کد بالا از مبنای 2 پیروی می کند که خیلی بهتر می شود اگر مبناها را بلد باشید البته در برنامه کدویژن زیاد نیاز نداریم ولی اگر بلد نباشید دوچار مشکل می شویم.

پس به راحتی می نویسیم:

DDRB=0b00000010;

می توان صفرهای پشت یک را نگذاریم یعنی

DDRB=0b10;

حال می خواهم همین کار را در پورت A نیز انجام بدهم

DDRA=0b10;

در زبان سی اگر بخواهیم از مبنای 2 استفاده کنیم باید بعد از دی دی آر پورت مورد نظر = (=DDRA) از صفر بی استفاده کنیم.

اگر مبنای 10 باشد باید بدون هیچ پیش حرفی مقدار را می نویسیم.

به طور مثال اگر 10 از مبنای 2 را به مبنای 10 ببریم حاصل می شود 2

یعنی :

DDRA=2;

اگر هم در مبنای هگز باشد با پیشوند صفر ایکس مشخص می شود.

DDRA=0x2;

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

یا علی

دوشنبه 15/1/1390 - 17:56 - 0 تشکر 303947

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

 برای امام زمان صلوات فرستادی ؟      

خدایا شکرت که هر چه دادی بهترین بود . 


 

دوشنبه 15/1/1390 - 20:58 - 0 تشکر 303993

خوب دارید پیش می روید.
منتظر ادامه اش هستیم.

 ما مي توانيم ....

چهارشنبه 17/1/1390 - 0:10 - 0 تشکر 304500

مرور کلی بر مقاومت پول آپ

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

باتوجه به اینکه وقتی ما ولتاژ 0 و یا 5 را وقتی به یک ورودی می دهیم این مقدار در زمان اینکه ما ولتاژ را نیز قطع بکنیم هنوز خود به خود روی پایه ی آی سی می ماند (حالت لچ) یعنی به طور ساده تر اینکه وقتی ما ولتاژ 5 ولت را به ورودی بدهیم و بعد این 5 ولت را از پایه ی ورودی قطع کنیم هنوز 5 ولت خود به خود روی پایه ی ورودی میکروکنترلر هست بنابراین میکروکنترلر نمی تواند بفهمد که هنوز این ولتاژ وجود دارد یا این ولتاژ قطع شده است و برنامه دوچار مشکل می شود.

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

در این صورت هر وقت کلید و یا سنسور ما فعال شده به طور مستقیم به ورودی آی سی منتقل می شود و هر گاه ورودی و یا سنسور قطع شد ولتاژ 5 ولت از مقاومت 100 کیلو گذشته و مستقیم وارد ورودی آی سی شده و مقدار لچ آی سی را عوض کرده و آی سی دوباره می تواند به کار خود ادامه دهد.

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

برای فعال کردن این مقاومت قبل از دستور DDR می باشد و بدیگونه می توان آن را فعال کرد.

مثال پایه ی 0 از پورت c را ورودی تعریف کرده و مقاومت پولآپ را نیز فعال کنید.

PORTC=0x01;\\یعنی اگر این پایه ورودی بود مقاومت پولآپ فعال شود و اگر خروجی بود مقدار فعلی پایه 5 ولت باشد

DDRC=0x00;\\همه ی پورت سی به عنوان ورودی تعریف شده است ولی

در مثال بالا همه ی پورت سی به عنوان ورودی تعریف شده بود ولی فقط پایه 0 از پورت سی دارای مقاومت پول آپ بود.

نکته اگر در برنامه نویسی فقط یک پایه مد نظر ما باشد می توانیم بدین صورت نیز کار کنیم.

PORTC.0=1;

DDRC.0=0;

در مثال بالا فقط پایه ی 0 از پورت سی به عنوان ورودی می باشد و مقاومت پول آپ این پایه فقط روشن می باشد.

باید این نکته را متذکر شد که مقاومت پول آپ اگر فعال شود در عین واحد مقدار ورودی در لحظه ای که هیچ ورودی را دریافت نکرده است 5 ولت است چون مقدار vcc از مقاومت رد شده و مستقیم از داخل خود آی سی وارد می شود و وقتی ورودی صفر شد تا لحظه ای که صفر ولت به ورودی متصل باشد مقدار ورودی صفر است و تا ورودی قطع شود مقاومت پول آپ وردی را 5 ولت می کند.

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

جمعه 19/1/1390 - 23:33 - 0 تشکر 305542

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

دستور if یکی از پرکاربردترین دستورات شرطی می باشد.

شکل کلی دستور if

(شرط مورد نیاز) if

}

بابر قرار شدن دستور زیر مجموعه خوانده و اجرا می شود//

{

می توان در آخر دستور از این دستور که اگر شرط if اجرا نشد این زیر مجموعه را اجرا کن//else

}

این دستورات اگر شرط if نادرست باشد اجرا می شوذ.//

{

مثال عملی:

()void main

}

;PORTB=0b00000001

;DDRB=0b00000010

این دستور یک حلقه ی بی انتها را ایجاد کرده است و مطالب درون آن مدام خوانده می شود//(1)while       

 }         

(if(PORTB.0==0            

}               

;PORTB.1=1                  

{               

else                  

}                  

;PORTB.1=0                     

{                  

{         

{

جمعه 16/2/1390 - 8:19 - 0 تشکر 315177

       زبان سی گسترده تر از اونه که بشه به این صورت کمک خاصی به یادگیری و آموزش اون کرد. به نظر من بهتر          درباره ترفند ها و راهکار های خلاقانه در این زبان یا سایر زبان های برنامه نویسی بحث بشه . 
   با تشکر از همت شما.
    ___________________________
      هر غیر ممکن در لحظه ی ممکن ، امکان پذیر خواهد بود . 

جمعه 16/2/1390 - 20:2 - 0 تشکر 315493

سلام
من دانشجوی رشته الکترونیکم نیاز به کمک مبرم شما دارم.
استاد آز میکرو از ما برنامه ای خواسته که نام را در خط اول lcdگرافیکی ونام خانوادگی را در خط دوم نمایش دهد .
لطفا در نوشتن کد برنامه وکمک با کار در نرم افزار کد ویژن و پروتئوس کمک کنید .متشکر
ایمیلم:h_m1369@yahoo.com

برو به انجمن
انجمن فعال در هفته گذشته
مدیر فعال در هفته گذشته
آخرین مطالب
  • آلبوم تصاویر بازدید از کلیسای جلفای...
    آلبوم تصاویر بازدید اعضای انجمن نصف جهان از کلیسای جلفای اصفهان.
  • بازدید از زیباترین کلیسای جلفای اصفهان
    جمعی از کاربران انجمن نصف جهان، در روز 27 مردادماه با همکاری دفتر تبیان اصفهان، بازدیدی را از کلیسای وانک، به عمل آورده‌اند. این کلیسا، یکی از کلیساهای تاریخی اصفهان به شمار می‌رود.
  • اعضای انجمن در خانه شهید بهشتی
    خانه پدری آیت الله دکتر بهشتی در اصفهان، امروزه به نام موزه و خانه فرهنگ شهید نام‌گذاری شده است. اعضای انجمن نصف جهان، در بازدید دیگر خود، قدم به خانه شهید بهشتی گذاشته‌اند.
  • اطلاعیه برندگان جشنواره انجمن‌ها
    پس از دو ماه رقابت فشرده بین کاربران فعال انجمن‌ها، جشنواره تابستان 92 با برگزاری 5 مسابقه متنوع در تاریخ 15 مهرماه به پایان رسید و هم‌اینک، زمان اعلام برندگان نهایی این مسابقات فرارسیده است.
  • نصف جهانی‌ها در مقبره علامه مجلسی
    اعضای انجمن نصف جهان، در یك گردهمایی دیگر، از آرامگاه علامه مجلسی و میدان احیا شده‌ی امام علی (ع) اصفهان، بازدیدی را به عمل آوردند.