0

اموزش ميكروكنترلر AVR به زبان ساده(Basic)-قسمت سوم

 
mojehb
mojehb
کاربر برنزی
تاریخ عضویت : آبان 1391 
تعداد پست ها : 25
محل سکونت : اصفهان

اموزش ميكروكنترلر AVR به زبان ساده(Basic)-قسمت سوم

قسمت سوم اموزشي

1-   سلام
2-   سلام خوبي
1-   قربانت
2-   چه خبر اون چيزايي رو كه بهت گفته بودم رو كار كردي مثال حل كردي ازش
1-   اره . كار كردم اونم از همش . اقا يك سوال اگه بخايم مقدار يك متغيير رو روي LCD  نمايش بديم بايد چطوري عمل كنيم
2-   اين كه خيلي اسونه با چند تا مثال جواب سوالتو ميدم
مثال 1:   
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM  A  AS BYTE
A = 3
CLS
LCD  A
END
1-   خوب تحليلش كن
2-   باشه
خط اول كه معرفي ميكرو هستش
خط دوم  فركانس كاري ميكرو هستش
خط سوم ما يك متغيير را كه نامش هست A  و  را از نوع بايت مي باشد را تعريف كرديم
خط چهارم به متغيير مقدار داديم
خط پنجم با دستور CLS  ال سي دي را براي نوشتن جديد پاك كرديم
خط ششم  دستور دايم كه مقداري را كه به متغيير A داده ايم روي LCD نمايش داده شود
خط هفتم با دستور END برنامه را به پايان رسانديم.
1-  اها يعني به متغيير A  هر مقداري كه داده باشيم مثلا 1 يا 0 يا 1001 روي   LCD نمايش داده مي شود
2- كاملا درسته واما مثال دوم: اين دفعه مي خايم دو تا متغيير رو يكي پس از ديگري روي LCD نمايش بديم
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM  ALI  AS BIT
DIM  IRAN  AS  BYTE
ALI  = 0
IRAN  = 224
CLS
LCD ALI
CLS
LCD IRAN
END
خط اول كه معرفي خود ميكرو
خط دوم معرفي فركانس كاري ميكرو
خط سوم اومديم يك متغيير از نوع BIT كه نامش است ALI رو معرفي كرديم
خط چهارم هم اومديم يك متغيير از نوع بايت كه نامش هست   IRAN رو معرفي كرديم
خط پنجم به متغيير BIT كه نامش بود ALI يك مقدار داديم
خط ششم هم مثل خط پنجم
خط هفتم  با دستور CLS ال سي دي را براي نوشتن اماده كرديم
خط هشتم  به ميكرو دستور داديم كه مقدار متغيير ALI   رو روي LCD نمايش بدهد
خط نهم دوباره با دستور CLS ال سي دي رو براي نوشتن دوباره پاك كرديم
خط دهم هم به ميكرو دستور داديم كه مقدار متغيير IRAN  رو روي ال سي دي نمايش بده
و در خط اخر نيز با دستور END برنامه رو به اتمام رسانديم
2- مثال اخر :
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM  G  AS  WORD
G  = 12
CLS
LCD G
INCR G
CLS
LCD  G
END
خط اول و دوم رو كه ديگه تكراري شده كه بخام توضيح بدم
خط سوم هم تغريبا مثل قبل اومديم يك متغيير كه نامش هست G  و از نوع WORD مي باشد را براي ميكرو تعريف كرديم
خط چهارم به متغيير G يك مقدار دلخاه داديم
خط پنجم  ال سي دي را با دستور CLS  براي اماده شدن پاك كرديم
خط ششم با دستور  LCD  G  مقدار فعلي متغيير G را كه هست 12  را روي LCD  نمايش داديم
خط هفتم به متغيير G  يك واحد اضافه كرديم يعني شد 13
خط هشتم با دستور CLS ال سي دي را براي نوشتن دوباره پاك كرديم
خط  نهم به ميكرو دستور داديم مقدار متغيير G  را كه الان به ان يك واحد اضافه شده است يعني شده 13 رو روي ال سي دي نمايش بده
خط دهم هم يعني پايان برنامه
1-   همه اين مثالايي رو كه گفتي توي محيط شبيه سازي قابل اجراست
2-   اره قابل اجراست و ميتوني اونجا همه اين مثال هاي رو مشاهده كني.
خوب حال بريم سر مبحث بعدي
1- دستورات LCD همينا بود
2- نه هنوز چند تا ديگه هست كه به موقش ميگم
1- خوب برو سر مبحث بعدي
2- باشه . ببين گاهي وقتا لازم هستش كه در بين برنامه هايي كه داريم مي نويسيم يك تاخير ايجاد كنيم كه اين تاخير مي تونه يك ثاينه . ده ثانيه . يك ميلي ثانيه . يك ميكرو ثانيه يا هر تايمي كه عشقت بود رو تاخير ايجاد كني
1- همين جا وايستا كه يك سوال دارم . اين تاخير به چه درد مي خوره لطفا فقط يك مثال كاربردي هم بزن
2- ببين مثالا شما مي خاي يك LED رو روشن كني و مي خاي اين LED بعد از مثلا ده ثانيه  خاموش بشه خوب حالا ارزش اين دستور بايد حس كني
1- اها فهميدم حالا ادامه بده
2-  تاخيراتي را كه ما ميتوانيم ايجاد كنيم بر حسب ثانيه- ميلي ثانيه- ميكرو ثانيه مي باشد
WAIT  1  تاخير براي مدت زمان يك ثانيه
WAITMS 1  تاخير براي مدت زمان يك ميلي ثانيه
WAITUS 1 تاخير براي مدت زمان يك ميكرو ثانيه
متاسفانه اين مدت زمان هاي تاخير زياد هم دقيق نيستند مثلا شما دستور ميدي كه يك ثانيه تاخير داشته باش ميكرو مياد دوازده ثانيه تاخير ايجاد ميكنه
1- خوب پس چاره چيه؟؟
2- براي حل اين مشكل شما بايد از ميلي ثانيه يا ميكرو ثانيه بيشتر استفاده كني مثال اگه مي خاي يك تاخير يك ثايه ايجاد كني بايد بنويسي  WAITMS  30 البته اين يك مثال بود كه اگه يكم با اين دستورات ور بري همش دستت مياد
خوب حالا بريم سر مثال ها
مثال اول:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM  A  AS  BYTE
A  =  112
CLS
LCD  A
INCR  A
WAITMS  500
CLS
LCD  A
END
حالا تحليل برنامه
خط اول و دوم كه خودت ميدوني
خط سوم هم كه بايد بدوني
خط چهارم هم باز بايد بدوني ولي مي گم كه دلت نشكنه در خط چهارم ما به متغيير A  يك مقدار داديم
خط پنجم با دستور CLS ال سي دي را براي نوشتن و اماده شدن پاك كرديم
خط ششم با دستور LCD A  مقدار متغيير A را كه هست 112  روي ال سي دي نمايش داديم
در خط هفتم با دستور INCR A يك واحد به متغيير A  اضافه كرديم يعني بود 112   حالا شد 113
در خط هشتم با دستور WAITMS 500 يك تاخير پانصد ميلي ثانيه اي ايجاد كرديم يعني اينكه برنامه فعلا هيمنجا متوقف است و بعد از 500 ميلي ثانيه برنامه از خط بعدي خوانده مي شود
در خط نهم  با دستور CLS  ال سي دي را پاك كرديم
در خط دهم مقدار جديد متغيير A  را كه الان هست 113 روي ال سي دي نمايش داديم
در خط اخر هم با دستور  END برنامه رو پايان داديم

$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
DIM  S  AS  BYTE
S  =  112
CLS
LCD S
INCR  S
WAITMS  500
CLS
WAITMS  100
LCD  S
END

از خط اول تا خط هشتم
خط نهم  ال سي رو رو پاك كرديم
خط دهم يك تاخير در برنامه با مدت زمان 100 ميلي ثانيه ايجاد كرديم و بعد از اينكه صد ميلي ثانيه گذ شت برنامه از خط بعدي ادامه پيدا مي كنه
خط يازدهم دستور داديم كه مقدار جديد S   را كه 113   هستش رو روي ال سي دي نمايش بده
خط اخر هم پايان برنامه
1- اينم توي محيط شبيه ساز قابل اجراست
2-  بله حتما. موافقي كه بريم سر مبحث بعدي
1- اره بريم
2- خوب حالا رسيديم به قسمت هاي جون دارتر ميكرو. اگه يادت باشه اون اوايل بهت گفته بودم كه ميكروكنترلر داراي يك سري امكانات هستش مثل تايمر – كانتر -  مبدل انالوگ به ديجيتال همچنين گفتم كه يكي از امكاناتش ورودي خروجي يا همون I/O هستش  كه كاربرداي فراون داره . مثلا در ساده ترين حالت شما با استفاده از اين امكان مي توني يك LED رو روشن يا خاموش يا هر دو حالت رو انجام بدي
1-  I/O چي هست
2-  I يعني ورودي  O   هم يعني خروجي  البت هردو از نوع ديجيتال هستند
1- ها فهميدم . ميشه يك مثال ديگه از كاربردش بزني
2- چراكه نه حتما. فرض كن مي خاي با يك ميكرو سوييچ ( يك نوع كليد ) يك موتور رو روشن خاموش كني و حتما بايد با يك عدد ميكروسوييچ يك بار كه ميزني روشن و دفعه بعد كه ميزني خاموش شود
1- ميكرو سوييچ همون شسي  هستش ؟
2- اره  ميكروسوييچ همون كليد زنگ در خونتون هستش
2- در كل براي استفاده از امكانات ميكروكنترلر بايد از روش پيكره بندي استفاده شود كه بهش مي گن CONFIG يعني شما با اين كار به ميكروكنترلر اعلام مي كني كه مي خاهم از فلان امكانات استفاده كنم . بزار اول يك سري دستورات رو ليست وار معرفي كنم بعد يكي يك اونها رو توضيح بدم
PORT
PIN
SET
RESET
TOGGLE
خوب حالا درباره هر كدوم توضيح ميدم
PORT  به معني خروجي هستش هر وقت كه خاستي از ميكرو يك خروجي بگيري از اين دستور بايد استفاده كني . مثلا يك LED رو مي خاي روشن كني يا هر چيز ديگه
PIN  به معني ورودي هستش هر وقت كه خاستي يه ميكروكنترلر يك ورودي بدي بايداز اين دستور استفاده كني مثلا مي خاي يك كليد به ورودي وصل كني البته اين دستور  PIN و PORT به تنهايي كاربرد ندارن كه در ادامه ميگم كه بايد چيكار كني
SET  كه همون يك ديجيتال خودمونه
RESET كه همون صفر ديجيتال خودمونه
TOGGLE يعني عكس حالت فعلي بعني اگر قبلا يك بوده حالا صفر ميشه اگه قبلا صفر بوده حالا يك ميشه
بزار قبل از اينكه توضيحاتمو كامل كنم يك سري اطلاعات درباره پايه هاي ميكرو بدم . ببين هر ميكرو بسته به نوعش يك تعداد پايه داره كه از 8 پايش هست تا 40 پايه  كه هر هشت پايه رو يك پورت مي نامند البته ربطي به اون پورتي كه توي دستورات  بهت گفتم نداره هر پورت رو كه هشت پايه هستش رو با يك اسم نام گذاري مي كنن كه استاندارد هستش به نام هاي پورت A پورتB پورت C پورت D  ميكرو ها حداكثر چهار پورت ورودي خروجي دارن. در ضمن هر كدام از پورت ها مي توانند ورودي يا خروجي باشند كه بستگي به انتخاب برنامه نويس داره علامت پورت ها به ترتيب زير هستش:
A,0
A.1
A.2
A.3
A.4
A.5
A.6
A.7
براي پورت هاي B C  و D هم مثل بالا هستش
1-   يك سوال . اگه بخاد حداكثر چهار پورت داشته باشه و هر پورت هم كه هشتا پايه هستش پس در كل ميشه 32 پايه پس چرا بعضي از ميكرو ها 40 پايه هستند
2-   خوب 32 پايه هستش با به عبارتي چهار پورت بقيش مال VCC  GND و... هستش
1-   اها فهميدم ادامه بده
2-   خوب گفتيم كه براي استفاده از امكانات ميكرو بايد انها را پيكره بندي كنيم يا به عبارتي CONFIG كنيم . حالا ما براي استفاده از ورودي خروجي ميكروكنترلرI/O هم بايد اونو پيكره بندي كنيم يعني به ميكرو اعلام كينم كه اقا ما ميخاهيم از فلان پايه تو به عنوان ورودي يا مثلا خروجي استفاده كنيم.
اگه خاستيم از يك پورت به عنوان خروجي استفاده كنيم بايد به ترتيب مثال زير عمل كنيم:
مثال : مثلا مي خاهيم از پورت A به عنوان خروجي استفاده كنيم :
CONFIG  PORTA  =  OUTPUT
حالا تحليل اين دستور. CONFIG كه بهت گفتم يهني چي  PORTA يعني مي خواهيم از پورت A به عنوان خروجي استفاده كنيم به جاي A از هر پورت دلخاه ديگه هم مي تونيم استفاده كنيم . علا مت مساوي = رو كه بايد هميشه بزاري . عبارت OUTPUT هم يعني خروجي
اگه خاستيم از يك پورت به عنوان ورودي استفاده كنيم بايد به ترتيب مثال زير عمل كنيم :
مثال : مثلا مي خاهيم از پورت B  به عنوان وردي استفاده كنيم
CONFIG  PINB.0 =  INPUT
حالا گوش فرا بده به تحليل اين دستور. CONFIG  كه گفتم قبلا. خوب PINB.0 يعني ما مي خاهيم از پايه B.0 به عنوان ورودي استفاده كنيم . = هم كه هيچي هميشه بايد بزاري. كلمه INPUT را وقتي ميزاري كه خاسته باشي از يك پايه به عنوان ورودي  استفاده كني
3-   خوب بزار يك مرور بكينم . اگر خاستيم كه از يك پايه به عنوان ورودي استفاده كنيم از دستور
CONFIG  PINC.0  =  INPUT استفاده كنيم كه ما دراين مثال از پورت C.0 به عنوان ورودي استفاده كرديم نكته اينجاست كه هر وقت كه خاستي از يك پايه به عنوان ورودي استفاده كني بايد شماره پايه رو هم مثل همين مثال بالا كه براي زدم استفاده كني به جاي PINB.0   هم مي توني مثال بزاري PINB.1 يا PINB.3 يا بزاري PINB.7 كه بستگي داره به انتخاب تو
اگر خاستيم كه از يك پورت به عنوان خروجي استفاده كنيم از دستور زير استفاده مي كنيم بايد از دستور زير استفده كني
CONFIG  PORT C = INPUT  ما در اين مثال به ميكرو فهمانديم  مي خاهيم از پورت C تو به عنوان خروجي استفاده كنيم
1-   شما ره پايه رو نبايد بنويسيم
2-   نه نبايد بنويسيم بعدا ما بين برنامه مشخص مي كنيم كه كدام پايه بايد خروجي بدهد
بزار ادمه درس رو با يك مثال برات بگم فرض كن ما ميخايم از پايه D.4 ميكرو كنترلر يك خروجي بگيرم و يك LED رو روشن كنيم براي اين كار از برنامه زير استفاده مي كنيم:
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG  PORTD = OUTPUT
SET  PORTD.4
END
خط اول ودوم كه هيچ
خط سوم ما اومديم به ميكرو اعلام كرديم كه مي خاهيم از پورت C تو به عنوان يك خروجي استفاده كنيم
خط چهارم  نوشتيم SET  PORTD.4  ما بانوشتن كلمه SET اين منظور را رسانديم كه مي خاهيم پورت D.4 يك شود . و همچنين جلوي SET  نام پايه اي رو كه بايد يك شود يا به عبارتي ديگر SET شود رو هم اعلام كرديم
در خط اخر هم با دستور END برنامه را به پايان رسانديم
1-   يعني اگه يك LED رو به پايه D.4 ميكروكنترلر وصل ميكرديم LED روشن مي شد
2-   اره روشن مي شد
مثال دوم: مي خاهيم همان پورت D.4 را يك بار كه روشن شد بعد از دو ثانيه خاموش شود
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG  PORTD = OUTPUT
SET  PORTD.4
WAITMS  2000
RESET  PORTD.4
END
خط اول دوم كه هيچ
خط سوم هم اومديم تعرف كرديم كه از پايه D.4 مي خاهيم به عنوان خروجي استفاده كنيم
خط چهارم  با دستور SET PORTD.4  پايه D.4 رو يك كرديم
خط پنجم با دستور WAITMS 2000 اين را رسانديم كه مي خاهيم 2000 ميلي ثانه به عبارتي دو ثانيه در همين جا تاخير ايجاد شود در طول اين دو ثانيه PORTD.4 در همان حالت يك باقي مي ماند. بعد از دو ثانيه برنامه از خط بعد ادامه پيدا مي كند
خط ششم  با دستور RESET PORTD.4  به ميكرو دستور داديم كه همان پايه D.4 را ريست كن يعني صفر كن
خط اخر هم كه يعني پايان برنامه. در اين مثال اگر كه ما يك LED به پايه D.4 وصل مي كرديم  LED براي بار اول با دستور SET روشن مي شد و اين روشن بودن با دستور WAITMS 2000 دو ثانيه به طول مي انجاميد و بعد از دو ثانيه با دستور RESET  PORTD.4    LED خاموش مي شد چون پايه را صفر كرديم.
مثال سوم : فرض كن مي خا هيم دو تا پايه رو هم زمان يك كنيم و بعد از دو ثانيه فقط يكي از انها را صفر كنيم .
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG  PORTC = OUTPUT
SET  PORTC.2
SET  PORTC.7
WAITMS  2000
RESET  PORTC.7
END
خط اول و دوم كه هيچ
خط سوم هم كه بايد حتما ياد داشته باشي
خط چهارم اومديم فرمان داديم كه پايه C.2  را يك كن
خط پنجم هم اومديم فرمان داديم كه پايه C.7 رو يك كن
خط ششم  دو ثانيه تاخير در برنامه ايجاد كرديم كه در طول اين مدت پايه هاي C.2 و C.7 در حالت يك است
خط هفتم با دستور  RESET  PORTC.7  فقط  پايه C.7 رو صفر كرديم. ولي پايه C.2  در همان حالت يك باقي مانده است
خط اخر هم كه هيچ
مثال سوم : اين مثال رو ببينم كه مي توني تحليل كني
$REGFILE = "M16DEF.DAT"
$CRYSTAL = 8000000
CONFIG PORTA = OUTPUT
CONFIG PORTC = OUTPUT
SET PORTA.1
SET PORT C.0
حالا خودت تحليلش كن
1-   خط اول و دوم رو كه بلدم
خط سوم  اومديم به ميكرو اعلام كرديم كه مي خاهيم از پوت A به عنوان خروجي استفاده كينم
خط چهارم هم مثل خط سوم
خط ششم دستور يك شدن پايه A.1 رو صادر كرديم
خط هفتم هم دستور يك شدن پايه C.0 رو صادر كرديم
خوب بود
2-   عالي بود
1-   حال ورودي رو برام توضيح بده
2-   ورودي باشه براي وقتي كه چندتا از دستورات شرط و چندتا دستور ديگه رو گفتم برات ميگم
1-   خوب حالا اين صفر و يك شدن پايه ها رو ميشه تو شبيه ساز نرم افزار تماشا كرد
2-   متاسفانه نه نميشه
1-   پس بايد چكار كنم
2-   دو راه داري اول اينكه بري يك ميكرو بخري و خودت امتحان كني دوم اينكه با استفاده از نرم افزار پروتوس اونو شبيه سازي كني .
1-   خوب اين پروتوس رو برام توضيح بده
2-   اينو ديگه خودت برو ياد بگير توي انجمن هاي برق و الكترونيك ايراني كه تعدادشون هم زياده به خوبي توضيح دادن
1-   باشه حالا چي رو مي خاي برام توضيح بدي
2-   فعلا تا همين جاشو داشته باش تا بعدا ادامشو برات توضيح بدم
پايان قسمت سوم



تمرينات قسمت سوم:
بنا به درخاست يكي از دوستان از اين به بعد در پايان هر قسمت تمرينات مربوط به همان قسمت را مي زارم و در قسمت بعدي جواب انها را مي نويسم . دوستان سعي كنند خودشان تمرينات را جواب دهد و در قسمت بعدي پاسخ ان را ببينند تا اشكالات بر طرف شود.
1-   برنامه اي بنويسيد كه روي LCD  نوشته شود MICRO
2-   برنامه اي بنويسيد كه ابتدا روي LCD نوشته شود AVR . و بعد از  30 ميلي ثانيه تاخير LCD پاك شود و دوباره روي ان نوشته شود ALI
3-   برنامه اي بنويسيد كه در ان پايه  A.0 ميكرو SET شود ( منظور PORTA.0 ميباشد)
4-   برنامه اي بنويسيد كه در ان پايه A.1 يك بار SET شود و بعد از 50 ميلي ثانيه تاخير RESET شود
5-   برنامه اي بنويسيد كه در ان پايه هاي B.5  و D.7 ميكرو يك بار هم زمان باهم SET شوند و بعد از 60 ميلي ثانيه تاخير RESET شوند.
درضمن دوستان توجه داشته باشند اگر در جايي به اشكال برخورديد حتما سوال كنيد . يك نكته اينكه SET و RESET وورودي خروجي هاي ميكرو رو نميشه تويه محيط شبيه ساز تماشا كرد و براي شبيه سازي بهتره از نرم افزار PROTEUS  استفاده كنيد

جمعه 3 آذر 1391  7:05 PM
تشکرات از این پست
دسترسی سریع به انجمن ها