طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود. ولتاژ فعلی، زمان باقیمانده تا اتصال رله و پیغام ها روی نمایشگر نشان داده می شود.این پروژه یک مدار گیرنده رادیویی 433 یا 315 مگاهرتز می باشد که قابلیت تعریف و ذخیره سازی انواع ریموت کنترل هایی از قبیل (ریموت دزدگیر ماشین، پارکینگ، بالابر و ...) را دارد. با نگه داشتن یک میکروسوئیچ و فشار دادن یکی از کلید های ریموت به مدت 1 ثانیه کد شناسایی ریموت مورد نظر آشکار و سپس در حافظه ذخیره می شود و می توان با چهار کلید ریموت (کلیدهای A,B,C,D) چهار رله را روشن و خاموش کرد.اندازه گیری ضربان قلب توسط تمامی انگشتان دست. نمایش بر روی سون سگمنت سه رقمی LED. ذخیره ضربان های اندازه گیری شده تا 250 مورد. نمایش اندازه گیری های ثبت شده توسط کلید های Up و downدر این پروژه با استفاده از یک ساعت نجومی و محاسبات ریاضی، دو عدد سروو موتور یکی در جهت XY و دیگری در جهت Z پنل خورشیدی را به صورت اتوماتیک در موقیعتی قرار می دهید که بیشترین تابش خورشید را دریافت کند.این پروژه یک فاصله سنج می باشد که می توان در مواردی نیز به عنوان عمق سنج از آن استفاده نمود. حداقل فاصله قابل تشخیص 10cm و حداکثر 80cm تا 100cm می باشد.
پروژه محافظ لوازم برقی با avr و نمایشگر LCD

MCP-23

پروژه محافظ لوازم برقی با avr و نمایشگر LCD
پروژه ریموت کنترل 433-315 مگاهرتز 4 کاناله با قابلیت لرنینگ

MCP-27

پروژه ریموت کنترل 433-315 مگاهرتز 4 کاناله با قابلیت لرنینگ
پروژه اندازه گیری ضربان قلب با نوک انگشتان و avr

MCP-17

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

MCP-25

پروژه کنترلر پنل خورشیدی با استفاده از ساعت نجومی
پروژه فاصله سنج با سنسور مادون قرمز شارپ Sharp

MCP-37

پروژه فاصله سنج با سنسور مادون قرمز شارپ Sharp

کار با LED ماتریسی 8.8 (LED Displays 8.8 LED Matrix)

www.picpars.com کار با LED ماتریسی 8.8 (LED Displays 8.8 LED Matrix) 357

در این مبحث آموزشی ما خواهیم گفت که چگونه باید یک ماتریس LED سایز 8×8 را کنترل کرد، یا بیان دیگر چگونه حروف و علایم را بر روی 64 عدد LED به نمایش بگذاریم. همانطور که میدانیم این ماتریس دارای 8 سطر و 8 ستون می باشد، با اتصال ماتریسی LED ها (64 عدد) تعداد پایه های خروجی را به 16 پین کاهش می دهیم. بنابراین برای کنترل آن باید به روش جاروب کردن سطر و ستون استفاده کرد، به این صورت که ابتدا سطر اول را یک (مابقی صفر) می‌کنیم و سپس مقادیر (خاموش یا روشن بودن هر 8 LED این سطر) مربوط به این ردیف را بر روی 8 پین ستون قرار دهیم حال در مرحله بعدی سطر دوم را یک (مابقی صفر) می‌کنیم و سپس مقادیر مربوط به ردیف دوم را بر روی 8 پین ستون قرار دهیم و همین طور تا سطر هشتم ادامه می دهیم. به یاد داشته باشید که تمامی این مراحل باید با سرعت بالا انجام پذیرد که در این برنامه ما زمان تاخیر بین هر یک از عملیات فوق را 2 میلی ثانیه قرار داده ایم و از آنجایی که چشم انسان خطای دید دارد ما به راحتی وضعیت هر 64 LED را در آن واحد مشاهد می‌کنیم. این روش همانند ایجاد کاراکتر های خاص (مثلا علایم و حروف فارسی) در LCD های متنی می باشد.

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


برنامه به گونه‌ای نوشته شده است که به براحتی می توانید حروف انگلیسی بزرگ و کوچک را توسط نرم افزار PicPars Tools طراحی کنید و سپس کدهای مربوطه را به آرایه A1_alephba (برای حروف بزرگ) و a0_alephba (برای حروف کوچک) اضافه کنید. و در نهایت به صورت کاملا عادی جملات خود نوشته و سپس توسط دستورات سی معادل حروف الفبایی را پیدا کرده و کدهای متناظر آنها را از آرایه های ذکر برای نمایش انتخاب می‌کنیم، در ادامه این مسئله را بیشتر توضیح خواهیم داد.

اصول کلی ارسال داده

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

unsigned char R_data[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

متغییر speed برای کنترل سرعت نمایش حروف است، یعنی فاصله بین نمایش هر حروف توسط این تاخیر انجام می پذیرد. (بر حسب میلی ثانیه و ماکزیمم آن 65535 می‌باشد)

ایجاد فونت

Aa متغیری برای بزرگ بودن یا کوچک بودن حروف می باشد. locat نیز متغیر بسیار مهمی است که معادل حروف اسکی را از آرایه بر می‌دارد. دو آرایه زیر که به اصلاح فونت ما دارد می باشد باید به صورت a-z و A-Z تکمیل گردد که ما برای نمونه سه تا از حروف آن را تکمیل کرده ایم و مابقی را به سلیقه خوتان گذاشته ایم که باید توسط نرم افزار PicPars Tools طراحی و تکمیل شوند.

 flash unsigned char A1_alephba[][8]={
 {0X18,0X3C,0X66,0X66,0X7E,0X66,0X66,0X00}, // A  Locate in array = 0
 {0X78,0X64,0X64,0X7C,0X7C,0X64,0X64,0X78}, // B  Locate in array = 1
 {0X04,0X3C,0X7C,0X64,0X60,0X60,0X7C,0X3C}, // C  Locate in array = 2
 };
 
 flash unsigned char a0_alephba[][8]={
 {0X38,0X44,0X04,0X3C,0X44,0X44,0X3E,0X00}, // a  Locate in array = 0
 {0X20,0X20,0X20,0X38,0X24,0X24,0X38,0X00}, // b  Locate in array = 1
 {0X00,0X00,0X38,0X40,0X40,0X40,0X38,0X00}, // c  Locate in array = 2
 };

جدول شناسایی موقیعت حروف

به ازای هر حروفی که در آرایه اضافه می کنید باید در تابع lockup نیز یک case جدید برای شناسی ایجاد کنید، نکته مهم این است که باید ترتیب قرار گرفتن رعایت شود مانند آرایه های بالا که توضیح دادیم و همچنین case ها همگی با حروف کوچک تعریف شوند. اولین حرف locat 0 را دارد و حروف دوم locat 1 را دارد و همین طور تا آخر... بنابراین باید آدرس این locat‌ در تابع lockup نیز به طور صحیح وارد شوند.

    void lockup(char input){
        switch (input) {
            case 'a'  :
            locat=0;
            break;
            case 'b'  :
            locat=1;
            break;
            case 'c'  :
            locat=2;
            break;
        };
    }

تابعrefrash

وظیفه این تابع این است که در مدت زمانی که تاخیر ایجاد می‌شود به صورت مداوم داده ها را روی ماتریس تازه سازی (Refresh) نماید، همانطور هم که قبلا اشاره کردیم اگر عمل تازه سازی را انجام ندهیم حروف تنها برای مدت 16 میلی ثانیه قابل دیدن خواهد بود.

    void refrash(){
     unsigned char i,d;
     unsigned int sp;
     sp=speed/16; if(sp<=0) sp=1; 
        for(d=0; d<sp; d++){ //delay loop
            for(i=0; i<8; i++){ //char
                c_row=R_data[i];
                if(Aa) c_clom=~A1_alephba[locat][i];
                else c_clom=~a0_alephba[locat][i];
                delay_ms(2);
            }
        }
    }

در این تابع از دو حلقه تو در تو استفاده کرده ایم که حلقه داخلی وظیفه ارسال داده های موجود در آرایه انتخاب شده را دارند یعنی هر 8 بایت موجود در آرایه انتخاب شده باید با تاخیر 2 میلی ثانیه ارسال شوند بنابراین 16 میلی ثانیه تاخیر در اینجا به وجود می آيد حال با تقسیم کردن تاخیر کلی یعنی speed بر عدد 16 شرط حلقه for اولی ایجاد می شود و تا زمانی که این شرط برقرار است هم تاخیر دلخواه را ایجاد می کنیم و هم در لابه لای این تاخیر آرایه انتخاب شده تازه سازی می شود.

نحوی ارسال جملات به ماتریس

به عنوان مثلا ما می خواهیم جمله AaBbCcABCabc را روی ماتریس به صورت حروف به حروف نمایش دهیم. ابتدا باید این جمله را در حافظه flash میکرو به صورت زیر بنویسیم:

flash char text1[]={"AaBbCcABCabc"};

 

 

اکنون باید به صورت زیر جمله را برای ارسال آماده سازی کنیم:

// text1 START
            len=strlenf(text1);  //Lengh of string
            for(i=0; i<len; i++){
             c=text1[i];
                 if(islower(c)){
                    lockup(c);
                    Aa=0;
                 }else if(isupper(c)){
                    c=tolower(c);
                    lockup(c);
                    Aa=1;
                }
             refrash();
            }
// text1 END

 

ابتدا توسط دستور strlenf طول جمله موجود در متغیر text1 را بدست می آوریم و درون متغیر len قرار می‌دهیم، متغیر len شرط پایان پذیرفتن حلقه می باشد، حال به ترتیب حروف جمله را جدا کرده و درون متغیر c قرار می دهیم و توسط دستور islower ابتدا چک میکنیم که آیا این کارکتر حروف کوچک می باشد یا خیر؟ در صورتی که جزء حروف کوچک بود با فراخوانی تابع lockup(c) آدرس آرایه این حرف را پیدا می کنیم و درون متغیر locat قرار می دهیم، همچین Aa=0 قرار می دهیم به این معنی که حروف کوچک می باشد. اما در صورتی که شرط برقرار نبود مجددا توسط دستور isupper چک می شود که آیا حرف موجود در متغییر c جزء حروف بزرگ می باشد یا خیر؟ در صورتی که اینگونه بود ابتدا تابع tolower فراخوانی می‌شود و حروف بزرگ به حروف کوچک تبدیل می شود سپس با فراخوانی تابع lockup(c) آدرس این حرف در آرایه پیدا می شود و درون متغیر locat قرار می‌گیرد، همچین Aa=1 می شود به این معنی که حروف بزرگ می باشد.

برای ایجاد جمله جدید فقط باید دستورات فوق را مجددا بنویسید و نام متغیر text1 را تغیر دهید به عنوان مثال text2 و در ابتدای برنامه text2 را تعریف کرده و جمله خود را درون آن بنویسید.

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

انشاء الله در مطالب آیند به موضوع حرکت درآوردن متن خواهیم پرداخت.

  منبع: www.picpars.com

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




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

فایل شماره 222 | حجم 37 کیلوبایت | دانلود 4856 بار

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

منبع www.picpars.com  دانلود مثال آموزشی کار با LED ماتریسی 8×8

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

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

برچسب ها:
تاریخ ارسال چهارشنبه، 14 تير ماه، 1391    نویسندهنویسنده: مدیریت    نظرات 1 نظر    بازدید بازدید [ 31174 ]   پرینتنسخه چاپی
فایل پی دی اف فایل پی دی اف   ارسال به دوستان ارسال به دوستان