الجمعة، 17 مايو، 2013

برمجة الشاشة الكريستالية lcd1602 باستتخدام البروتوكول I2C


LCD1602 I2C Module 




سأتابع اليوم الحديث عن البروتوكول I2C و الذي سأستخدمه للتحكم في الشاشة الكريستالية 1602 ,  و سنرى سهولة الأستخدام بواسطة أحد موديلات الأردوينو المخصصة لذلك .

في البداية لا بد لك أن تأخذ لمحة عن الI2C , لتكن بدايتك من هذه التدوينة هنا


و أيضاً لا بد لك من الإطلاع على كيفية التعامل مع الشاشة الكريستالية1602 و كيفية برمجتها بواسطة الأردوينو هنا


حسناً  بعد الإطلاع على الرابطين أعلاه ... يمكننا البدء الآن .


ماذا سنحتاج في تجربتنا اليوم ؟


معدات :

1- بطاقة أردوينو 





2) LCD 1602 I2C Interface Module



3)شاشة كريستالية 1602





الموديل الذي سأستخدمه قائم على القطعة PCF8574 و هي من شركة فيليبس و تستطيع التحكم ب 8Bit دفعة واحدة .




كل ما عليك القيام به هو وضع الموديل LCD1602 I2C بهذا الشكل و القيام بعملية اللحام حتى تتصل مع الشاشة الكريستالية .


بعدها قم بتوصيل المدخل الأول في الموديل I2C كالأتي


1) تغذية Vcc
2)المدخل SDA مع المربط A4  ببطاقة الأردوينو
3)المدخل SCL مع المربط A5 ببطاقة الأردوينو
4) الأرضي Gnd



و التوصيل سهل , ليس بحاجة لرسم التوضيحي يبين كيفية التوصيل .


ضع موديل الI2C و قم بعملية اللحام 






الآن نأتي لجزء...


 البرمجة Software:

بالنسبة للبرمجة سنستعين بمكتبتين :
1) wire.h و هي متوافرة في المكتبة الرسمية للأردوينو , أي لا حاجة لتحميلها
2) LiquidCrystal_I2C.h  وهذه المكتبة هي التي ستحتاج لتحميلها و وضعها في مسار المكتبات داخل مجلد الأردوينو . لتحميلها من هنا

في بداية يجب عند بداية كتابة الكود وضع اسم المكتبتين اللتان ننوي أستعمالها و تكون على الصيغة 

ثم نقوم بكتابة الكود المعتاد الذي نستخدمه مع مكتبات Liquid crystal الرسمية .

الجديد هو تعين العنوان لشريحة الI2C ألا وهو 0x20 .

هذا العنوان هو الموقع الذي سيتواصل معاه المتحكم Atmega و يعطي له الأوامر .

و يكتب على الصيغة :


و أبعاد الشاشة المستخدمة تكتب في الخانتين التاليتين (16,2) 

لو اردنا تحميل أكثر من شاشة واحدة , فقط نقوم بتعريف الشاشتين , كلاً على حدا و بأسم مختلف و العنوان يكون مضافاً له 1 كمثال :


و أيضاً في جملة void setup نضيف هذا السطر لتهيئة الشاشة للعمل .


و الباقي كما هي الأوامر في المكتبة العادية تماماً .


هذه أهم الأوامر كما يلي في الرابط   :


سأعرض هنا مثال بسيط  , سأقوم بطباعة جملة Genotronex على الشاشة 


#include<Wire.h>
#include<LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x20,16,2);

void setup(){
  lcd.init();  //initialize the Library
  
  lcd.backlight();   // let the backlight on !
  
  lcd.print(" Genotronex Blog ");
  
}

void loop(){
}
//..................................................................
//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/

//****************************************************
//Name :Mohannad Rawashdeh .
//Date "25/1/2013 3:00pm
// Description: This  Code for using a 74HC595 Shift Register and four Seven segment CA          //
// to count from 0 to 9  , Using arduino pin # 8,10,11,12
// Programmed for  http://genotronex.blogspot.com/                 
//****************************************************************


#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x20,16,2);  // set the LCD address to 0x20 for a 16 chars and 2 line display
int t=800;
void setup()
{
  lcd.init();                      // initialize the lcd 
lcd.setContrast(128); //Adjust the constrast of LCD
  // Print a message to the LCD.
  lcd.backlight(); // Let Backlight on 
  lcd.cursor_on(); // let cursor  shown on LCD
  lcd.print("Hello"); //Print Hello
  delay(2000);
  lcd.clear();// delete the LCD's Content, and set cursor on 0,0
  lcd.home();
  lcd.print("The LCD Initilaize");//print
  lcd.setCursor(0,1);//set the cursor on col 0 and row 1
  lcd.print("Please wait...");
  lcd.blink_on(); //let the cursor Flash on
  delay(5000);
  lcd.clear();
  lcd.home();
  lcd.blink_off();//let the cursor Flash Off
}
char name[]={"Mohannad Rawashdeh "};


void loop(){
lcd.cursor_off();
lcd.autoscroll();
lcd.setCursor(15,0);
  for (int i=0;i<19;i++){
  lcd.noDisplay();
  lcd.print(name[i]);
  lcd.display();
  delay(t);
  }
}
  




اتمنى أن أكون قد وفقت لتوصيل فكرة عمل هذه المكتبة بشكل يمكنك من عمل برامج أكبر على هذه الشاشة بواسطة البروتوكول i2c .

تحياتي


4 التعليقات :

  1. السلام عليكم
    لو عايز استخدم شاشه لعرض معلومات داخل فلاشه فاي نوع ينفع

    ردحذف
    الردود
    1. حسب نوع المعلومات المطلوب عرضها , الأفضل هي TFT Display LCD

      حذف
  2. السلام عليكم :
    ما هي نسخه برنامج الاردوينو المستخدمه .. انا استخدم arduino 1.0.5 ولكن هناك خطأ في الترجمه :(

    ردحذف
  3. تأكد من أنك حملت المكتبة الخاصة بها اولاً و ضعها في مسار المكتبات في الأردوينو "راجع مقالاً حول وضع المكتبة في مسار الأردوينو في المدونة " ثم يمكنك العمل بنجاح على هذا الكود

    الأفضل حمل النسخة 1.5.2 هي الأفضل للان

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.