صفحه 3 از 3 نخستنخست 123
نمایش نتایج: از شماره 21 تا 24 , از مجموع 24

موضوع: آموزش کار با بردهای آردوینو

  1. #21

    راه اندازی ال سی دی کاراکتری با آردوینو

    خب امروز میخوام از کتابخانه های موجود در آردوینو استفاده کنم و یک ال سی دی کاراکتری ۱۶x۲ راه اندازی کنم . کتابخانه های متعددی برای راه اندازی ال سی دی وجود داره که متدهای مختلف

    رو پشتیبانی میکنه . ما میتونیم با کمک کتابخانه های متعدد از روشهای four- and eight-bit parallel, three-wire, serial, I2C and SPI interfaces برای راه اندازی ال سی دی استفاده کنیم .

    در این آموزش ما از ال سی دی ۱۶ پین با چیپ ست hitachi HD44780 استفاده کردیم . ترتیب پایه ها بصورت زیر هستش :

    کد:
    1 : GND
    2 : 5V
    3 : Contrast
    4 : RS
    5 : RW
    6 : Enable
    7 : DB0
    8 : DB1
    9 : DB2
    10 : DB3
    11 : DB4
    12 : DB5
    13 : DB6
    14 : DB7
    15 : Backlight +
    16 : Backlight GND
    بعضی از ال سی دی ها پینهای خروجی متفاوتی با اطلاعات درج شده ما دارن پس حتما قبل از کار به دیتاشیت اون قطعه نگاهی بندازید . بعضی دیگر از مدلها هم در پشت ال سی دی اطلاعات

    پینها رو چاپ کردن و میتونید از اون استفاده کنید .

    آموزش کار با بردهای آردوینو-pcbpinoutsss-jpg


    نحوی اتصال ال سی دی ۱۶x۲ به برد آردوینو بصورت زیر هستش :

    آموزش کار با بردهای آردوینو-4bitparallel21-jpg

    شکل بالا نشون میده که ما چطور ۶ پین ال سی دی رو به پینهای درجیتال آردوینو متصل کردیم . نکته مهم در این نقشه اتصال یک پتانسیومتر ۱۰ کیلو اهم به پایه ۳ ال سی دی برای کنترل

    کنتراست هستش . مورد دوم اتصال ولتاژ ۵ ولت به پین شماره ۱۵ برای روشن کردن بک لایت ال سی دی هستش . در صورتی که ولتاژ بکلایت شما ۳.۳ ولت بود ، میتونید از خروجی ۳.۳ ولت

    آردوینو برای اون استفاده کنید .

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

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

    کد:
    #include <LiquidCrystal.h>
    ۲ : شما باید متغیرهایی برای ال سی دی ایجاد کنید و به برنامه بگید که کدوم پینهای آردوینو مسئول راه اندازی ال سی دی هستن . این کار توسط یک فانکشن و بصورت زیر قابل انجام هستش :

    کد:
    LiquidCrystal lcd(4,5,6,7,8,9);
    ۳ : نوع ال سی دی رو در فانکشن setup مشخص کنید :

    کد:
    lcd.begin(16, 2);
    در پایین این خط ما یه برنامه برای تست نوشتیم :

    کد:
    #include <LiquidCrystal.h> // we need this library for the LCD commands
    
     
    
    // initialize the library with the numbers of the interface pins
    
    LiquidCrystal lcd(4,5,6,7,8,9); // define our LCD and which pins to use
    
     
    
    int d = 3000; // used for display delayfloat
    
     
    
    void setup()
    
    {
    
      lcd.begin(16, 2); // need to specify how many columns and rows are in the LCD unit
    
      lcd.clear();      // this clears the LCD. You can use this at any time
    
    }
    
     
    
    void loop()
    
    {
    
      lcd.clear();
    
      lcd.setCursor(0,0);
    
      // positions starting point on LCD, column 0, row 0 (that is, the top left of our LCD)
    
      lcd.print("Hello!");
    
      // prints "Hello" at the LCD's cursor position defined above
    
      lcd.setCursor(0,1);
    
      // positions starting point on LCD, column 0, row 1 (that is, the bottom left of our LCD)
    
      lcd.println("www.HiAnzali.com");
    
      // note the rest of the line is padded out with spaces
    
      delay(d);
    
      lcd.clear();
    
      lcd.setCursor(0,0);
    
      lcd.print("Ali Youtube Ch- ");
    
      lcd.setCursor(0,1);
    
      lcd.print("AA16 Games (^_^)");
    
        delay(d);
    
      lcd.noDisplay(); // turns off the display, leaving currently-displayed data as is
    
      delay(1000);        // however this does not control the backlight
    
      lcd.display();   // resumes display
    
      delay(d);
    
      lcd.clear();
    
      lcd.home(); // sets cursor back to position 0,0 - same as lcd.setCursor(0,0);
    
      lcd.print("Example Text :");
    
      lcd.setCursor(0,1);
    
      lcd.print("ABCDEFGHIJ");
    
      delay(d);
    
    }
    فکر نکنم برنامه به توضیح خاصی نیاز داشته باشه . و در پایان فیلم این کار رو میتونید در پایین همین پست ببینید :




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

    حمایت از ما

  2. #22

    ادامه کار با ال سی دی کاراکتری

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

    میکنم . البته اگه به مثالهای موجود در این کتابخانه که از بخش File -> examples -> LiquidCrystal از داخل آی دی ای دقت کنید ، به راحتی متوجه همه امکانات این کتابخانه خواهید شد .

    شما همچنین میتونید از این صفحه مثالها رو مشاهده کرده و تست کنید .

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

    نوشته بصورت متحرک در پایین ال سی دی باشه باید چه کار کنیم ؟ برای این کار مثال زیر شما رو بیشتر راهنمایی خواهد کرد :

    کد:
    #include <LiquidCrystal.h>
    
    
    
    
    LiquidCrystal lcd(4,5,6,7,8,9);
    
    
    
    
    int i=0;
    
    
    
    
    void setup() {
    
      // set up the LCD's number of columns and rows: 
    
      lcd.begin(16, 2);
    
      lcd.print("Ali Youtube Chnl");
    
      delay(2000);
    
    }
    
    void loop() {
    
      for (int i=16; i > 2; i--)
    
        {
    
          lcd.setCursor(0,0);
    
          lcd.print("Ali Youtube Chnl");
    
          lcd.setCursor(i, 1);
    
          lcd.print("AA16 Games");
    
          delay(400);
    
          lcd.clear();
    
        }
    
      lcd.setCursor(0,0);
    
      lcd.print("Ali Youtube Chnl");
    
      lcd.setCursor(3, 1);
    
      lcd.print("AA16 Games");
    
      delay (2500);
    
      lcd.clear();
    
      for (int i=2; i >= -8; i--)
    
        {
    
          lcd.setCursor(0,0);
    
          lcd.print("Ali Youtube Chnl");
    
          lcd.setCursor(i, 1);
    
          lcd.print("AA16 Games");
    
          delay(400);
    
          lcd.clear();
    
         }
    
    }
    شماتیک مدار در مثال بالا مثل شماتیک پست قبلی ما هستش . ویدئوی این آموزش در زیر همین پست قابل مشاهده هستش .



    این هم از آموزش امروز . تا جلسه بعد ...
    برای حمایت از ما بصورت نقدی میتونید از لینک زیر استفاده کنید :

    حمایت از ما

  3. #23

    اتصال External eeprom به آردوینو

    گاهی مجبوریم برای گنجاندن کدهای خودمون از حافظه اضافی استفاده کنیم . برای مثال ما یه برنامه برای یه تابلو روان نوشتیم و برای سخت افزار از میکروی Atmega 8 استفاده کردیم . برای

    ذخیره سازی متنی که نیاز به نمایش داریم ، فضای کافی در فلش میکرو نیست ، پس مجبوریم از یه حافظه جانبی استفاده کنیم که انتخاب ما میتونه eeprom باشه . البته eeprom ها یه مزیت دیگه

    هم دارن و اون اینه که هنگام قطع ولتاژ ، داده ها رو داخل خودشون حفظ میکنن . در کل کاربرد eeprom ها خیلی زیاده . eeprom ها با پروتکل i2c bus به میکرو متصل میشن . در این جلسه من از

    هیچ کتابخانه ای که مختص eeprom خارجی باشه استفاده نمیکنم ، فقط دو تا فانکشن read و write رو مینویسم که بتونیم اطلاعات رو در قطعه مذکور بنویسیم و بخونیم .

    eeprom مورد استفاده ما در این جلسه 24lc16 هستش که یه حافظه 16 بیتی و دارای هشت پایه هستش . پایه های 1 تا 3 برای آدرس دهی و پایه 4 پایه منفی آی سی هستش . پایه 5 ، sda و پایه

    6 ، scl هستش که به ترتیب به پایه های A4 و A5 بورد آردوینو متصل میشن . پایه شماره 7 ، پایه wp هستش که اگه این پایه آزاد یا به منفی مدار متصل باشه ، ایپرام ما قابلیت خواندن و نوشتن

    داره و اگه این پایه به مثبت مدار وصل باشه ، ایپرام ما فقط قابل خواندن هستش و در برابر نوشتن محافظت میشه . پایه شماره 8 هم مثبت مدار هستش .

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

    شماتیک ما بصورت زیر خواهد بود :

    آموزش کار با بردهای آردوینو-eeprom_i2c-png


    ما در این برنامه ، یک مقدار رو در آدرس 0 ایپرام مینویسیم و اون مقدار رو مجددا از آدرس 0 میخونیم و توسط سریال مانیتور نمایش میدیم :

    کد:
    #include <Wire.h>
    
    
    #define disk1 B01010000
    
    
    int addressd = 0;
    
    
    byte val = 56;
    
    
    void eeprom_i2c_write(int from_addr, byte data) {
    
      Wire.beginTransmission(disk1);
    
      Wire.write((int)(from_addr)); 
      
      Wire.write(data);
    
      Wire.endTransmission();
    
    
      delay(5);
    }
    
    
    byte eeprom_i2c_read(int from_addr) {
      
      byte rDATA = 0xFF;
      
      Wire.beginTransmission(disk1);
      
      Wire.write((int)(from_addr));
    
      Wire.endTransmission();
    
    
      Wire.requestFrom(disk1, 1);
    
    
      rDATA = Wire.read();
      
        return rDATA;
    }
    
    
    void setup() {
    
      Wire.begin();
    
      Serial.begin(9600);
    
      eeprom_i2c_write(addressd, val);
    
    
      Serial.println("Writen to memory!");
    }
    
    
    void loop() {
    
        byte r = eeprom_i2c_read(addressd);
    
       Serial.print(r);
    
        Serial.print("\n");
    
        delay(1000);
    }
    مقدار مورد نظر ما برای نوشتن در ایپرام ، در متغییر val ذخیره شده که اینجا 56 هستش .

    نکته دوم در این برنامه مقدار ثابت disk1 هستش که آدرس ایپرام ما برای میکرو در پروتکل i2cbus هستش .

    پایان جلسه
    برای حمایت از ما بصورت نقدی میتونید از لینک زیر استفاده کنید :

    حمایت از ما

  4. #24

    استفاده از ایپرام داخلی آردوینو | Internal EEprom

    گاهی نیاز داریم که اطلاعاتی رو در میکرو ذخیره کنیم که حتی بعد از قطع منبع تغذیه میکرو ، پایدار بمونه . برای این کار میتونیم از حافظه ایپرام داخلی خود میکرو استفاده کنیم . در میکروی

    اتمگا 328 که در مدل آردوینو uno استفاده شده ، مقدار 1 کیلوبایت حافظه ایپرام در نظر گرفته شده . در میکروهای دیگه میتونید به دیتاشیت میکرو مراجعه کرده و از میزان حافظه ایپرام میکرو

    مطلع بشید .

    ما تو جلسه قبل در مورد اتصال ایپرام خارجی به آردوینو بحث کردیم . ممکنه برای بعضی از دوستان این سئوال به وجود بیاد ، چرا باید از ایپرام داخلی میکرو استفاده کنیم ، وقتی به راحتی میتونیم

    از حافظه خارجی با ظرفیت خیلی بیشتر استفاده کنیم ؟!!!

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

    به راحتی قادر به دامپ اطلاعات نخواهد بود .

    برای کار با حافظه داخلی باید از کتابخانه EEPRAM استفاده کنیم برای این کار باید این کتابخانه رو داخل برنامه قرار بدیم :

    کد:
    #include <EEPROM.h>
    کار با ایپرام داخلی آسونتر از اون چیزیه که فکرشو میکنید . من برای مثال یه کد قرار میدم که ابتدا در یه متغییر از جنس کاراکتر ، یه شماره تلفن قرار میدم ، در تابع ستاپ اطلاعات رو روی

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

    کد:
    #include <EEPROM.h>
    
    
    int addr;
    
    
    char val[] = {"4222068"};
    
    
    void setup(){
    
    
        Serial.begin(9600);
    
    
        Serial.println();
    
    
        for (byte i = 0; i < (sizeof(val)-1); i++) {
    
    
            EEPROM.write(i, val[i]);
    
    
        }
    
    
    
    }
    void loop() {
    
    
        for (byte k = 0; k < (sizeof(val)-1); k++) {
    
    
            char ss = EEPROM.read(k);
    
    
            Serial.print(ss);
    
    
        }
    
    
        Serial.print("\n");
    
    
        delay(2000);
    
    
    }
    تنها نکته قابل اشاره در این کد استفاده از تابع sizeof هستش که کارش شمارش مقدار آرایه هستش .

    پایان جلسه ...
    برای حمایت از ما بصورت نقدی میتونید از لینک زیر استفاده کنید :

    حمایت از ما

صفحه 3 از 3 نخستنخست 123

کلمات کلیدی این موضوع

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •