طراحی کنترلر، مدارت دلخواه، پروژه ها و تمرینات درس میکروکنترلرها
ماشین حساب مهندسی ساده با قابلیت دریافت اعداد اعشاری و محاسبه توابع مثلثاتی به همراه سایر توابع توسط یک صفحه کلید 4*4این پروژه یک ماشین حساب مهندسی می باشد که تمامی کلید ها و توابع به صورت گرافیگی بر روی LCD نمایش داده می شود و با فشردن هر کلید روی کیپد کلید متناظر آن بر روی السیدی نیز تغییر حالت می دهد. نمای کلی و توابع قابل انجام توسط این ماشین حساب در تصاویر نمایش داده شده است. همچنین قابلیت رسم نمودار را دارد.این پروژه جریان برق مصرفی را اندازه گیری و توسط یک ماژول سیم کارت اطلاعات مورد نظر را به شماره همراه دلخواه ارسال میکند. ولتاژ کاری آن AC220 ولت و حداکثر جریان عبور آن 50 آمپر می باشد.یک مدار صوتی جهت پخش فایل های صوتی MP3 و WMV با Sampling rate 8KHz-48KHz و خروجی دیجیتال به آنالوگ 24 بیتی می باشد که از حافظه های Micro SD تا 32GB و فرمت های FAT16 و FAT32 پشتیبانی می کند.در صورتی که برق شهر از حداقل تعریف شده کمتر، یا از حداکثر بیشتر شود رله خروجی قطع خواهد شد و از طریق بازر بوق هشدار پخش می شود.
ماشین حساب مهندسی ساده

MCP-28

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

MCP-11

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

MCP-40

پروژه کنتور برق با AVR و ارسال اطلاعات توسط سیم کارت
پروژه mp3 پلیر ساده با avr به زبان C

MCP-32

پروژه mp3 پلیر ساده با avr به زبان C
پروژه محافظ لوازم برقی با avr و نمایشگر سون سگمنت

MCP-21

پروژه محافظ لوازم برقی با avr و نمایشگر سون سگمنت

کار با 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 کیلوبایت | دانلود 4778 بار

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

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

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

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

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