Εισαγωγή στο I2C LCD Adapter Module

Δοκιμάστε Το Όργανο Μας Για Την Εξάλειψη Των Προβλημάτων





Σε αυτήν την ανάρτηση θα ρίξουμε μια ματιά στη μονάδα προσαρμογέα LCD 'I2C' ή 'IIC' ή 'I square C', η οποία θα μειώσει τις συνδέσεις καλωδίων μεταξύ της οθόνης Arduino και της οθόνης LCD σε μόλις 2 καλώδια, εξοικονομώντας επίσης τόνους ακίδων GPIO για άλλοι αισθητήρες / δίσκοι κ.λπ.

Πριν συζητήσουμε για τη μονάδα προσαρμογέα LCD I2C, είναι σημαντικό να κατανοήσουμε τι είναι ο δίαυλος I2C και πώς λειτουργεί.



Ωστόσο, δεν χρειάζεται να είστε ειδικός στο πρωτόκολλο I2C για να εργαστείτε με αυτόν τον προσαρμογέα LCD αναφοράς.

Απεικόνιση της σύνδεσης I2C:

Απεικόνιση της σύνδεσης I2C:

Το I2C ή το IIC σημαίνει 'Inter-Integrated Circuit' είναι ένας σειριακός δίαυλος υπολογιστή που εφευρέθηκε από τους ημιαγωγούς της Philips, γνωστός σήμερα ως ημιαγωγοί NXP. Αυτό το σύστημα λεωφορείων εφευρέθηκε το 1982.



Τι είναι το λεωφορείο;

Το Bus είναι μια ομάδα καλωδίων / καλωδίων που μεταφέρουν δεδομένα από ένα chip σε άλλο chip / ένα board κυκλώματος σε άλλο board κυκλώματος.

Το κύριο πλεονέκτημα του πρωτοκόλλου διαύλου I2C είναι ότι, ο υποστηριζόμενος μικροελεγκτής ή οι αισθητήρες ή τα τσιπ μπορούν να διασυνδεθούν με δύο μόνο καλώδια. Το πλεονέκτημα αυτού του πρωτοκόλλου είναι ότι μπορούμε να διασυνδέσουμε 127 διαφορετικά τσιπ ή αισθητήρες / προγράμματα οδήγησης σε μια κύρια συσκευή, η οποία συνήθως είναι ένας μικροελεγκτής με μόλις 2 καλώδια.

Ποια είναι τα δύο καλώδια I2C;

Τα δύο καλώδια είναι SDA και SCL τα οποία είναι σειριακά δεδομένα και σειριακό ρολόι αντίστοιχα.

Το σειριακό ρολόι ή SCL χρησιμοποιείται για συγχρονισμό της επικοινωνίας δεδομένων μέσω διαύλου I2C. Το SDA ή Serial Data είναι η γραμμή δεδομένων στην οποία τα πραγματικά δεδομένα μεταφέρονται από το master στο slave και το αντίστροφο. Η κύρια συσκευή ελέγχει το σειριακό ρολόι και αποφασίζει για ποια εξαρτημένη συσκευή χρειάζεται να επικοινωνήσει. Καμία δευτερεύουσα συσκευή δεν μπορεί να ξεκινήσει μια επικοινωνία πρώτα, μόνο η κύρια συσκευή μπορεί να κάνει.

Η σειρά σειριακών δεδομένων είναι αμφίδρομη και ισχυρή, μετά την αποστολή κάθε συνόλου δεδομένων 8 bit, η συσκευή λήψης στέλνει πίσω ένα bit αναγνώρισης.

Πόσο γρήγορο είναι το πρωτόκολλο I2C;

Η αρχική έκδοση του πρωτοκόλλου I2C που αναπτύχθηκε το 1982 υποστηρίζει 100 Kbps. Η επόμενη έκδοση τυποποιήθηκε το 1992 που υποστηρίζει 400Kbps (Fast mode) και υποστηρίζει έως και 1008 συσκευές. Η επόμενη έκδοση αναπτύχθηκε το 1998 με 3,4 Mbps (λειτουργία υψηλής ταχύτητας).

Αρκετές άλλες εκδόσεις I2C αναπτύχθηκαν κατά τα έτη 2000, 2007, 2012 (με λειτουργία Ultra-Fast 5Mbps) και η πρόσφατη έκδοση του I2C αναπτύχθηκε το 2014.

Γιατί οι αντιστάσεις έλξης στο δίαυλο I2C;

Το SDA και το SCL είναι «ανοιχτού-αποστράγγισης» που σημαίνει ότι και οι δύο γραμμές μπορούν να πάνε ΧΑΜΗΛΗ αλλά δεν μπορούν να οδηγήσουν τις γραμμές ΥΨΗΛΗ, οπότε μια αντίσταση έλξης συνδέεται σε κάθε μία από τις γραμμές.

Αλλά με τις περισσότερες από τις μονάδες I2C, όπως η LCD ή η RTC, έχουν ενσωματωμένες αντιστάσεις έλξης, οπότε δεν χρειάζεται να συνδέσουμε μία αν δεν έχει καθοριστεί.

Αντίσταση Pull-up / Pull-down: Η αντίσταση Pull-up είναι μια αντίσταση που συνδέεται με τη γραμμή + Ve της τροφοδοσίας για να διατηρήσει το λογικό επίπεδο μιας γραμμής στο HIGH εάν η γραμμή δεν είναι ούτε υψηλή ούτε χαμηλή.

Μια αντίσταση pull-down είναι μια αντίσταση που συνδέεται με –Ve της γραμμής τροφοδοσίας για να διατηρήσει το λογικό επίπεδο μιας γραμμής στο LOW εάν η γραμμή δεν είναι ούτε υψηλή ούτε χαμηλή.

Αυτό αποτρέπει επίσης το θόρυβο να εισέρχεται στις γραμμές.

Ελπίζουμε να χαράξουμε την επιφάνεια του πρωτοκόλλου I2C, αν χρειάζεστε περισσότερες πληροφορίες σχετικά με το πρωτόκολλο I2C, παρακαλούμε σερφάρετε

YouTube και Google.

Ας ρίξουμε μια ματιά στη μονάδα LCD I2C:

Καρφίτσες μονάδας LCD I2C

Υπάρχουν 16 ακίδες εξόδου για οθόνη LCD που μπορούν να κολληθούν απευθείας στο πίσω μέρος της μονάδας LCD 16 X 2.

Οι ακίδες εισόδου είναι + 5V, GND, SDA και SCL. Οι ακίδες SDA και SCL στο Arduino Uno είναι οι ακίδες A4 και A5 αντίστοιχα. Για το Arduino mega SDA είναι το pin # 20 και το SCL είναι το pin # 21.

Ας συγκρίνουμε πώς φαίνεται όταν συνδέουμε το LCD στο Arduino χωρίς τον προσαρμογέα I2C και με τον προσαρμογέα.

Χωρίς προσαρμογέα I2C:

Προσαρμογέας Arduino Χωρίς I2C

Με προσαρμογέα I2C:

Arduino χρησιμοποιώντας I2C Adapter

Ο προσαρμογέας είναι συγκολλημένος στο πίσω μέρος της οθόνης LCD και όπως μπορούμε να δούμε ότι αποθηκεύσαμε φορτία ακίδων GPIO για άλλες εργασίες και επίσης μπορούμε να συνεχίσουμε να προσθέτουμε 126 ακόμη συσκευές I2C στις καρφίτσες A4 και A5.

Λάβετε υπόψη ότι η τυπική βιβλιοθήκη Liquid Crystal δεν θα λειτουργεί με αυτόν τον προσαρμογέα LCD I2C, υπάρχει μια ειδική βιβλιοθήκη για αυτό, η οποία θα καλυφθεί σύντομα και θα σας δείξουμε πώς να χρησιμοποιήσετε αυτήν την ενότητα με παράδειγμα κωδικοποίησης.

Πώς να συνδέσετε τον προσαρμογέα I2C σε οθόνη 16 x 2

Στις παραπάνω ενότητες του άρθρου μάθαμε τα βασικά του πρωτοκόλλου I2C και πραγματοποιήσαμε μια βασική επισκόπηση σχετικά με τη μονάδα προσαρμογέα LCD I2C. Σε αυτήν την ανάρτηση θα μάθουμε πώς να συνδέσουμε τη μονάδα προσαρμογέα I2C LCD σε οθόνη LCD 16 x 2 και θα δούμε πώς το πρόγραμμα με ένα παράδειγμα.

Το κύριο πλεονέκτημα του πρωτοκόλλου I2C είναι ότι μπορούμε να συνδέσουμε τους υποστηριζόμενους αισθητήρες / συσκευές εισόδου / εξόδου σε δύο μόνο γραμμές και είναι χρήσιμο με το Arduino καθώς έχει περιορισμένους ακροδέκτες GPIO.

Τώρα ας δούμε πώς να συνδέσετε τη μονάδα σε LCD.

Η μονάδα διαθέτει 16 ακίδες εξόδου και 4 ακίδες εισόδου. Μπορούμε απλώς να κολλήσουμε τον προσαρμογέα στο πίσω μέρος της οθόνης LCD 16 x 2. Από τις 4 ακίδες εισόδου, οι δύο είναι + 5V και GND, οι υπόλοιπες είναι SDA και SCL.

Μπορούμε να δούμε ότι αποθηκεύσαμε πολλές καρφίτσες στο Arduino για άλλες εργασίες εισόδου / εξόδου.

Μπορούμε να ρυθμίσουμε την αντίθεση της οθόνης ρυθμίζοντας το ποτενσιόμετρο με μικρό κατσαβίδι (επισημαίνεται με κόκκινο κουτί).

Ο οπίσθιος φωτισμός μπορεί τώρα να ελεγχθεί στον ίδιο τον κώδικα προγράμματος:

lcd.backlight ()

Αυτό θα ανάψει τον οπίσθιο φωτισμό στην οθόνη LCD.

lcd.noBacklight ()

Αυτό θα απενεργοποιήσει τον οπίσθιο φωτισμό στην οθόνη LCD.

Μπορούμε να δούμε ότι υπάρχει συνδεδεμένος βραχυκυκλωτήρας, ο οποίος επισημαίνεται με κόκκινο κουτί, εάν αφαιρεθεί ο βραχυκυκλωτήρας, ο οπίσθιος φωτισμός παραμένει ΑΝΕΝΕΡΓΟΣ ανεξάρτητα από την εντολή προγράμματος.

Τώρα η ρύθμιση του υλικού έχει ολοκληρωθεί, τώρα ας δούμε πώς να κωδικοποιήσετε. Θυμηθείτε ότι η μονάδα LCD I2C χρειάζεται ιδιαίτερη

βιβλιοθήκη και η προεγκατεστημένη βιβλιοθήκη 'liquidcrystal' δεν θα λειτουργήσει.

Μπορείτε να κατεβάσετε τη βιβλιοθήκη I2C LCD από εδώ και να προσθέσετε στο Arduino IDE:

github.com/marcoschwartz/LiquidCrystal_I2C

Από την προηγούμενη ανάρτηση μάθαμε ότι οι συσκευές I2C έχουν διεύθυνση μέσω της οποίας ο κύριος ή ο μικροελεγκτής μπορεί να αναγνωρίσει τη συσκευή και να επικοινωνήσει.

Στις περισσότερες περιπτώσεις, για τη μονάδα I2C LCD η διεύθυνση θα είναι '0x27'. Αλλά διαφορετική κατασκευή μπορεί να έχει διαφορετική διεύθυνση. Πρέπει να εισαγάγουμε τη σωστή διεύθυνση στο πρόγραμμα μόνο τότε θα λειτουργεί η οθόνη LCD.

Για να βρείτε τη διεύθυνση, απλώς συνδέστε 5V σε Vcc και GND στο GND του Arduino και SCL pin του I2C module στο A5 και SDA στο A4 και ανεβάστε τον παρακάτω κωδικό.

Αυτό θα σαρώσει τις συνδεδεμένες συσκευές I2C και θα δείξει τη διεύθυνσή τους.

// -------------------------------- //
#include
void setup()
{
Wire.begin()
Serial.begin(9600)
while (!Serial)
Serial.println('-----------------------')
Serial.println('I2C Device Scanner')
Serial.println('-----------------------')
}
void loop()
{
byte error
byte address
int Devices
Serial.println('Scanning...')
Devices = 0
for (address = 1 address <127 address++ )
{
Wire.beginTransmission(address)
error = Wire.endTransmission()
if (error == 0)
{
Serial.print('I2C device found at address 0x')
if (address <16)
{
Serial.print('0')
}
Serial.print(address, HEX)
Serial.println(' !')
Devices++
}
else if (error == 4)
{
Serial.print('Unknown error at address 0x')
if (address <16)
Serial.print('0')
Serial.println(address, HEX)
}
}
if (Devices == 0)
{
Serial.println('No I2C devices found ')
}
else
{
Serial.println('-------------- done -------------')
Serial.println('')
}
delay(5000)
}
// -------------------------------- //

Ανεβάστε τον κωδικό και ανοίξτε τη σειριακή οθόνη.

Όπως μπορούμε να δούμε, εντοπίστηκαν δύο συσκευές και εμφανίζονται οι διευθύνσεις τους, αλλά αν θέλετε να βρείτε μόνο τη διεύθυνση της μονάδας LCD I2C, δεν πρέπει να συνδέσετε άλλες συσκευές I2C κατά τη σάρωση.
Συμπερασματικά, πήραμε τη διεύθυνση '0x27'.

Τώρα πρόκειται να κάνουμε ένα ψηφιακό ρολόι ως παράδειγμα, επειδή υπάρχουν δύο συσκευές I2C, η μονάδα LCD και η μονάδα RTC ή ρολόι πραγματικού χρόνου. Οι δύο μονάδες θα συνδεθούν με δύο καλώδια.

Κατεβάστε την ακόλουθη βιβλιοθήκη:
Βιβλιοθήκη RTC: github.com/PaulStoffregen/DS1307RTC
TimeLib.h: github.com/PaulStoffregen/Time

Πώς να ρυθμίσετε το χρόνο σε RTC

• Ανοίξτε το Arduino IDE και μεταβείτε στο Αρχείο> Παράδειγμα> DS1307RTC> ρυθμίστε την ώρα.
• Ανεβάστε τον κωδικό με ολοκληρωμένο υλικό και ανοίξτε τη σειριακή οθόνη και τελειώσατε.

Διάγραμμα κυκλώματος:

Πρόγραμμα:

//------------Program Developed by R.Girish-------//
#include
#include
#include
#include
LiquidCrystal_I2C lcd(0x27, 16, 2)
void setup()
{
lcd.init()
lcd.backlight()
}
void loop()
{
tmElements_t tm
lcd.clear()
if (RTC.read(tm))
{
if (tm.Hour >= 12)
{
lcd.setCursor(14, 0)
lcd.print('PM')
}
if (tm.Hour <12)
{
lcd.setCursor(14, 0)
lcd.print('AM')
}
lcd.setCursor(0, 0)
lcd.print('TIME:')
if (tm.Hour > 12)
{
if (tm.Hour == 13) lcd.print('01')
if (tm.Hour == 14) lcd.print('02')
if (tm.Hour == 15) lcd.print('03')
if (tm.Hour == 16) lcd.print('04')
if (tm.Hour == 17) lcd.print('05')
if (tm.Hour == 18) lcd.print('06')
if (tm.Hour == 19) lcd.print('07')
if (tm.Hour == 20) lcd.print('08')
if (tm.Hour == 21) lcd.print('09')
if (tm.Hour == 22) lcd.print('10')
if (tm.Hour == 23) lcd.print('11')
}
else
{
lcd.print(tm.Hour)
}
lcd.print(':')
lcd.print(tm.Minute)
lcd.print(':')
lcd.print(tm.Second)
lcd.setCursor(0, 1)
lcd.print('DATE:')
lcd.print(tm.Day)
lcd.print('/')
lcd.print(tm.Month)
lcd.print('/')
lcd.print(tmYearToCalendar(tm.Year))
} else {
if (RTC.chipPresent())
{
lcd.setCursor(0, 0)
lcd.print('RTC stopped!!!')
lcd.setCursor(0, 1)
lcd.print('Run SetTime code')
} else {
lcd.clear()
lcd.setCursor(0, 0)
lcd.print('Read error!')
lcd.setCursor(0, 1)
lcd.print('Check circuitry!')
}
}
delay(1000)
}
//------------Program Developed by R.Girish-------//

Σημείωση:

LiquidCrystal_I2C lcd (0x27, 16, 2)

Το '0x27' είναι η διεύθυνση που βρήκαμε με σάρωση και τα 16 και 2 είναι ο αριθμός των σειρών και στηλών στην οθόνη LCD.

Για το RTC δεν χρειάζεται να βρούμε τη διεύθυνση, αλλά βρήκαμε κατά τη σάρωση του '0x68', αλλά ούτως ή άλλως η βιβλιοθήκη RTC θα το χειριστεί.

Τώρα ας δούμε πόσο μειώσαμε τη συμφόρηση καλωδίων και σώσαμε τους καρφίτσες GPIO στο Arduino.

Μόνο 4 καλώδια είναι συνδεδεμένα στην οθόνη LCD, επισημαίνονται με κόκκινο κουτί.

Επίσης, μόνο 4 καλώδια συνδέονται από το Arduino και η μονάδα RTC μοιράζεται τις ίδιες γραμμές.

Μέχρι τώρα έχετε αποκτήσει βασικές γνώσεις σχετικά με το I2C και τον τρόπο χρήσης της μονάδας προσαρμογέα LCD I2C.
Σας άρεσε αυτό το post; Έχετε ερωτήσεις; Παρακαλώ εκφράστε στην ενότητα σχολίων, μπορεί να λάβετε μια γρήγορη απάντηση.




Προηγούμενο: Απλό κύκλωμα δοκιμής διόδου τρανζίστορ Επόμενο: Κάντε αυτό το κύκλωμα επέκτασης Range Remote Control IR