Σύνδεση της οθόνης μέσω i2c στο arduino. Σύνδεση μονάδας LCD I2C με Arduino

10.09.2021

Ίσως μια από τις πιο δημοφιλείς οθόνες της αγοράς. Κατασκευασμένο στο δημοφιλές χειριστήριο HD44780U. Από το όνομα του μοντέλου προκύπτει ότι η οθόνη αποτελείται από δύο γραμμές των 16 χαρακτήρων. Δεν υπάρχει υποστήριξη για τη ρωσική γλώσσα στο συγκεκριμένο μοντέλο.

Ο δίαυλος δεδομένων sh2s σας επιτρέπει να συνδέσετε έως και 127 συσκευές μέσω δύο καλωδίων, ταυτόχρονα. Αυτό το I2C υλοποιείται στο τσιπ PCF8574T.

Διάγραμμα σύνδεσης:

Μπλε πράγμα - μεταβλητή αντίσταση, σας επιτρέπει να προσαρμόσετε την αντίθεση της οθόνης.

Ο βραχυκυκλωτήρας στα αριστερά είναι υπεύθυνος για τον οπίσθιο φωτισμό της οθόνης.

Ένα μπλοκ 4 επαφών συνδέεται με το arduino ως εξής:

GND - GND
VCC - 5V
SDA - A4 (εάν Arduino MEGA, τότε σε D20)
SCL - A5 (εάν Arduino MEGA, τότε σε D21)

Βιβλιοθήκη

Σκίτσο

Η οθόνη μπορεί να έχει διαφορετική διεύθυνση IIC, αντί για 0x27 μπορεί να είναι 0x3F. Για να προσδιορίσετε με ακρίβεια τη διεύθυνση, μπορείτε να χρησιμοποιήσετε έναν σαρωτή συσκευής i2c.

#συμπεριλαμβάνω #συμπεριλαμβάνω //ορίστε τη διεύθυνση Οθόνη LCD 0x27, 16 χαρακτήρες, 2 γραμμές LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Εκκίνηση της οθόνης //ενεργοποιήστε τον οπίσθιο φωτισμό lcd.backlight(); //Ορίστε τη θέση από την οποία θα εμφανίζεται το κείμενο. lcd.setCursor(2, 0); //γραμμή εξόδου 1 lcd.print("Hello, World!"); //εκτυπώστε τη δεύτερη γραμμή με τον ίδιο τρόπο lcd.setCursor(1, 1);

Ίσως μια από τις πιο δημοφιλείς οθόνες της αγοράς. Κατασκευασμένο στο δημοφιλές χειριστήριο HD44780U. Από το όνομα του μοντέλου προκύπτει ότι η οθόνη αποτελείται από δύο γραμμές των 16 χαρακτήρων. Δεν υπάρχει υποστήριξη για τη ρωσική γλώσσα στο συγκεκριμένο μοντέλο.

Ο δίαυλος δεδομένων sh2s σας επιτρέπει να συνδέσετε έως και 127 συσκευές μέσω δύο καλωδίων, ταυτόχρονα. Αυτό το I2C υλοποιείται στο τσιπ PCF8574T.

Διάγραμμα σύνδεσης:

lcd.print("www.site"); ) κενός βρόχος () ( )

Ο βραχυκυκλωτήρας στα αριστερά είναι υπεύθυνος για τον οπίσθιο φωτισμό της οθόνης.

Ένα μπλοκ 4 επαφών συνδέεται με το arduino ως εξής:

GND - GND
VCC - 5V
SDA - A4 (εάν Arduino MEGA, τότε σε D20)
SCL - A5 (εάν Arduino MEGA, τότε σε D21)

Βιβλιοθήκη

Σκίτσο

Η οθόνη μπορεί να έχει διαφορετική διεύθυνση IIC, αντί για 0x27 μπορεί να είναι 0x3F. Για να προσδιορίσετε με ακρίβεια τη διεύθυνση, μπορείτε να χρησιμοποιήσετε έναν σαρωτή συσκευής i2c.

#συμπεριλαμβάνω #συμπεριλαμβάνω Το μπλε είναι μια μεταβλητή αντίσταση που σας επιτρέπει να προσαρμόσετε την αντίθεση της οθόνης. LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() ( lcd.init(); // Εκκίνηση της οθόνης //ενεργοποιήστε τον οπίσθιο φωτισμό lcd.backlight(); //Ορίστε τη θέση από την οποία θα εμφανίζεται το κείμενο. lcd.setCursor(2, 0); //γραμμή εξόδου 1 lcd.print("Hello, World!"); //εκτυπώστε τη δεύτερη γραμμή με τον ίδιο τρόπο lcd.setCursor(1, 1);

//ρυθμίστε τη διεύθυνση της οθόνης LCD 0x27, 16 χαρακτήρες, 2 γραμμές Σε αυτό το άρθρο θα σας πω πώς να χρησιμοποιήσετε τη μονάδα διασύνδεσης I2C για να ελέγξετε μια οθόνη LCD (2x16 / 20x4) μεχρησιμοποιώντας Arduino

. Αυτή η μονάδα σάς επιτρέπει να μειώσετε τον αριθμό των ακίδων ελεγκτή που χρησιμοποιούνται αντί για σύνδεση 8 ή 4 bit, απαιτούνται μόνο 2 ακίδες (SDA και SCL).

Τεχνικές Παράμετροι
Υποστήριξη οθόνης: LCD 16×02 / 20×04
Προαιρετικά: ρύθμιση αντίθεσης
Τάση τροφοδοσίας. 5V
Διεπαφή: I2C

Διαστάσεις: 54mm x 19mm x 15mm

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

Τώρα λίγο για την ίδια τη μονάδα είναι χτισμένη στο τσιπ PCF8574T. Οι αντιστάσεις R8 (4,7 kOhm) και R9 (4,7 kOhm) είναι απαραίτητες για την ανύψωση των γραμμών SDA και SCL Στην ιδανική περίπτωση, όταν συνδέετε δύο ή περισσότερες συσκευές μέσω του διαύλου I2C, πρέπει να χρησιμοποιείτε ένα pull-up μόνο σε μία συσκευή, I. Θα γράψω γιατί αργότερα. Υπάρχουν τρεις βραχυκυκλωτήρες στην πλακέτα (το διάγραμμα δείχνει ότι οι γραμμές A0, A1, A2 συνδέονται στο τροφοδοτικό μέσω των αντιστάσεων R4, R5, R6), χρειάζονται για να αλλάξετε τη διεύθυνση της συσκευής, υπάρχουν συνολικά 8 επιλογές . Η αλλαγή της διευθυνσιοδότησης μας δίνει τη δυνατότητα να συνδέσουμε έως και οκτώ συσκευές μέσω του διαύλου IC2 με το τσιπ PCF8574T οι επιλογές διεύθυνσης φαίνονται στο σχήμα (η προεπιλεγμένη διεύθυνση συσκευής είναι 0x27). Η μονάδα είναι επίσης εξοπλισμένη με ποτενσιόμετρο R11, με τη βοήθειά του μπορείτε να αλλάξετε την αντίθεση της οθόνης LCD.

Υπάρχουν τρεις ομάδες επαφών στη μονάδα για σύνδεση:

Πρώτη ομάδα:
SCL: Σειριακό ρολόι
SDA: γραμμή δεδομένων (Serial Dфta)
VCC: ισχύς "+".
GND: Τροφοδοτικό "-".

Δεύτερη ομάδα:
VSS: "-" ισχύς
VDD: "+" τροφοδοτικό
VO: Καρφίτσα ελέγχου αντίθεσης
RS: Εγγραφή Επιλέξτε
RW: Ανάγνωση/Εγγραφή (λειτουργία εγγραφής όταν είναι συνδεδεμένο στη γείωση)
E: Ενεργοποίηση (πτώση στροβοσκοπίου)
DB0-DB3: Χαμηλά bit διεπαφής
DB4-DB7: High bits διεπαφής
Α: Τροφοδοτικό οπίσθιου φωτισμού "+".
K: "-" Ισχύς οπίσθιου φωτισμού

Τρίτη ομάδα: (το jumper που έχει οριστεί από προεπιλογή)
VCC:
A από LCD:

Σύνδεση στο Arduino

Απαιτούμενα ανταλλακτικά:
Arduino UNO R3 x 1 τεμ.
Οθόνη LCD 1602A (2×16, 5V, Μπλε) x 1 τεμ.
Μονάδα διασύνδεσης I2C, IIC, TWI για LCD x 1 τεμ.
Σύρμα DuPont, 2,54 mm, 20 cm, F-M (Γυναικείο - Αρσενικό) x 1 τεμ.
Καλώδιο USB 2,0 A-B x 1 τεμ.

Σύνδεση:
Πρώτα απ 'όλα, κολλήστε τη μονάδα I2C Οθόνη LCD, τότε πρέπει να συνδέσετε την οθόνη στο Arduino UNO. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε την καλωδίωση DuPont που συνδέουμε σύμφωνα με τον παρακάτω πίνακα.

Για λόγους σαφήνειας, θα δώσω ένα άλλο διάγραμμα.

Για αυτό το πείραμα, πρέπει να κάνετε λήψη και εγκατάσταση της βιβλιοθήκης "LiquidCrystal_I2C". Στη συνέχεια, αντιγράψτε και επικολλήστε αυτό το παράδειγμα κώδικα στο παράθυρο του προγράμματος Arduino IDE και φορτώστε τον στον ελεγκτή.

/* Δοκιμασμένο στις Arduino IDE 1.6.11 Ημερομηνία δοκιμής 15/09/2016 */ #include #συμπεριλαμβάνω LiquidCrystal_I2C LCD (0x27,16,2); // Ορίστε τη διεύθυνση και το μέγεθος της οθόνης void setup() ( lcd.init(); // Initialize lcd lcd.backlight(); // Ενεργοποίηση του οπίσθιου φωτισμού lcd.setCursor(0,0); // Ρύθμιση του δρομέας στην αρχή της γραμμής lcd .print("Hello, world" // Εκτύπωση του κειμένου lcd.setCursor(0,1) site"); // Εκτυπώστε το κείμενο ) void loop( ) ( )

Εάν τα κάνατε όλα σωστά, αλλά δεν υπάρχουν σύμβολα στην οθόνη, δοκιμάστε να αυξήσετε την αντίθεση με το ποτενσιόμετρο.


Εδαφος διά παιγνίδι γκολφ
Λήψη βιβλιοθήκης
Τεκμηρίωση για το τσιπ
Τεκμηρίωση για

Αγορά στο Aliexpress

Έφτασα εδώ από ένα καλό κατάστημα Chip Resistor μια άλλη συσκευή για μελέτη και χρήση χρήσιμες συσκευές. Αυτή η συσκευή αποδείχθηκε ότι σχεδιάστηκε για να ελέγχει μια οθόνη LCD που ελέγχεται από έναν ελεγκτή HD44780, σε λειτουργία 4 bit. Για το σκοπό αυτό, τοποθετείται στην πλακέτα ένα μικροκύκλωμα, το οποίο είναι μετατροπέας του διαύλου I2C σε παράλληλη θύρα 8 bit.

Η πλακέτα είναι δρομολογημένη με τέτοιο τρόπο ώστε να μπορεί να συνδεθεί αμέσως στην οθόνη LCD. Η είσοδος τροφοδοτεί γραμμές ρεύματος και I2C. Η πλακέτα είναι αμέσως εξοπλισμένη με αντιστάσεις έλξης στις γραμμές SCL και SDA, ένα ποτενσιόμετρο για τη ρύθμιση της αντίθεσης και τροφοδοτικό για την ίδια την οθόνη.

Ο βραχυκυκλωτήρας στα δεξιά ενεργοποιεί/απενεργοποιεί τον οπίσθιο φωτισμό. Στη συνέχεια, οπλισμένος με δοκιμαστή, καταρτίστηκε ο ακόλουθος πίνακας. Μετά τη μελέτη της ενότητας, αποκαλύφθηκε ότι P3ελέγχει τον οπίσθιο φωτισμό. Εάν έχει εγκατασταθεί ο βραχυκυκλωτήρας, τότε το 1 ανάβει τον οπίσθιο φωτισμό και το 0 τον απενεργοποιεί. Όταν αφαιρείται ο βραχυκυκλωτήρας, ο οπίσθιος φωτισμός είναι πάντα σβηστός. Στη συνέχεια, αποφασίστηκε να συμπληρωθεί η βιβλιοθήκη axlib με λειτουργίες για εργασία με το δίαυλο I2C (υλοποίηση λογισμικού) και λειτουργίες ελέγχου του τσιπ PCF8574. Με λίγα λόγια, πώς λειτουργεί η ενότητα. Για να εξάγετε ένα byte παράλληλα, πρέπει να στείλετε τη διεύθυνση του μικροκυκλώματος στο δίαυλο I2C (από προεπιλογή είναι 0x4E. Μπορείτε επίσης να αλλάξετε τη διεύθυνση συγκολλώντας βραχυκυκλωτήρες στην πλακέτα και αλλάζοντας την τιμή των τριών λιγότερο σημαντικών bits της διεύθυνσης), μετά τη λήψη του ACK, αποστέλλεται ένα byte δεδομένων. Αφού το τσιπ αποκριθεί με ένα ACK, το byte εμφανίζεται στην παράλληλη θύρα του τσιπ. Για να ελέγξω την οθόνη LCD, πήρα λειτουργίες από τη βιβλιοθήκη του axlib και τις τροποποίησα ελαφρώς ώστε να λειτουργούν με το δίαυλο I2C. #συμπεριλαμβάνω #συμπεριλαμβάνω #συμπεριλαμβάνω #συμπεριλαμβάνω #define ΠΡΟΣΘΗΚΗ 0x4E // Διεύθυνση τσιπ /* Τσιπ LCD RS P0 RW P1 EL P2 D4 P4 D5 P5 D6 P6 D7 P7 Υπάρχει οπίσθιος φωτισμός στο πόδι σύνδεσης P3. 1 ενεργό, 0 απενεργοποιημένο */ // Εξαγωγή δεδομένων com |= 0x04; // E ανά μονάδα pcf8574_byte_out(com, ADD); // Εξαγωγή δεδομένων com &= 0xFB; // Ε έως μηδέν pcf8574_byte_out(com, ADD); // Εξαγωγή δεδομένων) void init(void) ( _delay_ms(30); com (0x30); _delay_us(40); com (0x30); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x30); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x20); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x20); // Ρύθμιση παραμέτρων com (0x80); // Ρύθμιση παραμέτρων com (0x00); // Απενεργοποιήστε την οθόνη com (0x80); // Απενεργοποιήστε την οθόνη com (0x00); // Εκκαθάριση της οθόνης com (0x10); // Εκκαθάριση της οθόνης com (0x00); com (0x60); // Ρυθμίστε τη λειτουργία εισαγωγής δεδομένων com (0x00); com (0xC0); // Ενεργοποιήστε την οθόνη με τον επιλεγμένο δρομέα) void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Μεταφορά των πιο σημαντικών 4 bit data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Μεταφέρετε τα πιο σημαντικά 4 bit // Μεταφέρετε τα πιο σημαντικά 4 bit // Μεταφορά χαμηλών 4 bit // Μεταφορά χαμηλών 4 bit // Μεταφορά χαμηλών 4 bit) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" ) while(1) ( ) )Ακριβώς αυτό που συμβαίνει εδώ. Πρώτα συνδέουμε τις βιβλιοθήκες για το I2C και για το PCF8574. Έχω ήδη γράψει για το I2C, οπότε θα το συνεχίσω ξανά, αλλά θα σας πω τι υπάρχει στο PCF8574.h. Η βιβλιοθήκη περιλαμβάνει μόνο τρεις λειτουργίες.
BYTE pcf8574_test(BYTE add) ( BYTE ερώτηση = ACK; προσθήκη &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); επιστροφή ερώτηση; )Η πρώτη λειτουργία γράφτηκε για να ελέγξει εάν μια συσκευή βρίσκεται στο λεωφορείο. Κατ 'αρχήν, μπορεί να χρησιμοποιηθεί για την αναζήτηση οποιασδήποτε συσκευής βρίσκεται στο λεωφορείο. Η συνάρτηση παίρνει τη διεύθυνση της επιθυμητής συσκευής και αν ανταποκριθεί, επιστρέφει μηδέν. Εάν μια συσκευή με τέτοια διεύθυνση δεν βρίσκεται στο λεωφορείο, θα επιστρέψει μία.
BYTE pcf8574_byte_out(BYTE δεδομένα, BYTE προσθήκη) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); i2c_stop(); )Αυτή η λειτουργία είναι ήδη προσαρμοσμένη αποκλειστικά για αυτό το τσιπ. Ως ορίσματα, του δίνεται ένα byte που θα μεταφερθεί στον δίαυλο και στη διεύθυνση του τσιπ. Η συνάρτηση θα ρωτήσει πρώτα το τσιπ ανά διεύθυνση και μετά θα στείλει το byte. Εάν το τσιπ έλαβε ένα byte και ανταποκριθεί με ACK, τότε η συνάρτηση θα ολοκληρώσει τη δουλειά με το τσιπ και θα επιστρέψει το μηδέν ως επιτυχημένη αποστολή του byte. Και αυτή τη στιγμή το μικροκύκλωμα θα εξάγει αυτό το byte στην παράλληλη θύρα του. Διαφορετικά, θα λάβουμε NACK και θα επιστρέψουμε ένα, η μετάδοση απέτυχε.
BYTE pcf8574_str_out(BYTE *data, BYTE col, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Αυτή η συνάρτηση δημιουργήθηκε για πειραματισμό. Δέχεται έναν δείκτη σε μια σειρά δεδομένων ενός byte, τον αριθμό αυτών των byte και τη διεύθυνση του τσιπ. Στην πραγματικότητα, μια προσπάθεια μεταφοράς όλων των δεδομένων σε μία περίοδο λειτουργίας και όχι σε ένα byte ανά περίοδο λειτουργίας. Η λειτουργία λειτουργεί, αλλά δεν είναι κατάλληλη για την οθόνη LCD. Τώρα ας επιστρέψουμε στο κύριο πρόγραμμα. Αφού συνδέσουμε τις βιβλιοθήκες, γράφουμε τη διεύθυνση του μικροκυκλώματος. Στη συνέχεια, δημιουργούμε τρεις συναρτήσεις παρόμοιες με το lcd.h. Η μόνη διαφορά είναι στην αρχή της μεταφοράς δεδομένων.
void com(BYTE com) ( com |= 0x08; // P3 σε ένα, έτσι ώστε ο οπίσθιος φωτισμός να είναι αναμμένος pcf8574_byte_out(com, ADD); // Εξαγωγή δεδομένων com |= 0x04; // E ανά μονάδα pcf8574_byte_out(com, ADD); // Εξαγωγή δεδομένων com &= 0xFB; // Ε έως μηδέν pcf8574_byte_out(com, ADD); // Εξαγωγή δεδομένων } Αυτή η λειτουργία στέλνει μόνο εντολές στην οθόνη. Εδώ εμφανίστηκε η πρώτη γραμμή με τη λογική προσθήκη της εντολής από το 0x08. Αυτό το σφάλμα είναι απαραίτητο λόγω του γεγονότος ότι μεταδίδουμε το byte όχι απευθείας στη θύρα της οθόνης LCD, αλλά μέσω του επαναλήπτη μας. Δηλαδή, εάν παρέχαμε ένα byte και στη συνέχεια πρέπει να εξάγουμε μόνο ένα bit, τότε παρακαλούμε αντιστοιχίστε το απαιτούμενο bit στο προηγούμενο byte και στείλτε το ξανά στη θύρα. Αυτή είναι μια τέτοια ταλαιπωρία. Η πρόσθεση με 0x08 είναι απαραίτητη για να διατηρείται συνεχώς ένα στο τρίτο ψηφίο. Θυμάστε τον οπίσθιο φωτισμό; Αυτή η προσθήκη είναι που ενεργοποιεί τον οπίσθιο φωτισμό. Στη συνέχεια καλούμε τη συνάρτηση μεταφοράς ενός byte στο δίαυλο. Γράφεται για παραπάνω. Στη συνέχεια μεταφέρουμε το byte μέσω του διαύλου στο τσιπ. Στη συνέχεια, θα πρέπει να ορίσετε το E σε ένα, κάτι που κάνει στην πραγματικότητα η λογική προσθήκη του byte με 0x04. Μετά την επαναφορά του E. Έτσι, μπορείτε να στείλετε οποιαδήποτε εντολή στην οθόνη μόνο περνώντας την ίδια την εντολή ως όρισμα. void init(void) ( _delay_ms(30); // Παύση μετά την ενεργοποίηση com (0x30); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x30); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x30); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x20); // Μετάβαση σε λειτουργία 4-bit _delay_us(40); // Καθυστέρηση για την εκτέλεση εντολών com (0x20); // Ρύθμιση παραμέτρων com (0x80); // Ρύθμιση παραμέτρων com (0x00); // Απενεργοποιήστε την οθόνη com (0x80); // Απενεργοποιήστε την οθόνη com (0x00); // Εκκαθάριση της οθόνης com (0x10); // Εκκαθάριση της οθόνης com (0x00); // Ρυθμίστε τη λειτουργία εισαγωγής δεδομένων com (0x60); // Ρυθμίστε τη λειτουργία εισαγωγής δεδομένων com (0x00); // Ενεργοποιήστε την οθόνη με τον επιλεγμένο δρομέα com (0xC0); // Ενεργοποιήστε την οθόνη με τον επιλεγμένο δρομέα } Αυτή η λειτουργία προετοιμάζει μόνο την οθόνη. Η σειρά των εντολών λαμβάνεται από το φύλλο δεδομένων στην οθόνη LCD. void char_out(BYTE data) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Μεταφορά των πιο σημαντικών 4 bit data_h |= 0x04; pcf8574_byte_out(data_h, ADD); // Μεταφέρετε τα πιο σημαντικά 4 bit data_h &= 0xF9; // Μεταφέρετε τα πιο σημαντικά 4 bit pcf8574_byte_out(data_h, ADD); // Μεταφορά χαμηλών 4 bit pcf8574_byte_out(data_l, ADD); // Μεταφορά χαμηλών 4 bit data_l |= 0x04; // Μεταφορά χαμηλών 4 bit } pcf8574_byte_out(data_l, ADD); data_l &= 0xF9; pcf8574_byte_out(data_l, ADD);

Αυτή η λειτουργία μεταδίδει δεδομένα στην οθόνη LCD. Εκτελείται με τον ίδιο τρόπο όπως οι εντολές, με τη διαφορά ότι το byte μεταδίδεται πρώτα με το πιο σημαντικό τσιμπολόγημα και μετά με το χαμηλό byte. Και τα υπόλοιπα είναι τα ίδια.

void str_out(BYTE *str) ( while((*str) != "\0") (char_out(*str); str++; ) )

Λοιπόν, αυτή η λειτουργία είναι καθαρά για τη μετάδοση μιας συμβολοσειράς στην οθόνη. Στην πραγματικότητα, δεν έχει καμία σχέση με το θέμα μας.

Έργο για το AtmelStudio 6.2

Λόγω του κόμματος που λείπει, η οθόνη δεν θα επηρεαστεί. Αυτή η συσκευή έχει σχεδιαστεί ειδικά για οθόνες με αυτόν ή παρόμοιο ελεγκτή. Αλλά αυτό το μικροκύκλωμα είναι μια πραγματικά απλή επέκταση θύρας. Συμφωνώ για την Ε. Απαιτούνται πρόσθετες μεταβλητές. Εάν μεταβιβάσετε ένα όρισμα σε μια συνάρτηση και εκτελέσετε ορισμένες ενέργειες με λογική, ενδέχεται να προκύψουν σφάλματα. Το έχω ήδη συναντήσει αυτό. Η αρχικοποίηση πραγματοποιείται χωρίς παραβίαση των χρονισμών. Η τεκμηρίωση λέει ότι υπάρχει μια παύση 40 µs μεταξύ των εντολών. Λόγω του ότι η μεταφορά γίνεται πάνω από το λεωφορείο i2c, που με τη σειρά του είναι λογισμικό και αργό, οι περίοδοι ολοκληρώνονται με ενδιαφέρον. Αν πάλι δεν είστε πολύ τεμπέλης, τότε γράψτε την εκδοχή σας και στείλτε την σε εμένα. Θα το δημοσιεύσω. Τελικά, αυτό το site προορίζεται για ένα ερασιτεχνικό κοινό και όποιος θέλει μπορεί να εκφράσει τη γνώμη και το όραμά του για τη ζωή του ΜΚ.

Alexey 06.08.15 09:14

Προστέθηκαν χρονισμοί κατά την προετοιμασία της οθόνης όπως σημειώνεται από το σεβαστό "Literate"

Ντμίτρι 14/06/16 21:57

Γεια σου Alexey Μπορείτε να προσθέσετε μια βιβλιοθήκη στη δημιουργία κώδικα για να εργαστείτε με το PCF8574.

Alexey 14/06/16 22:32

θα σκεφτώ.))

ruslan 21.12.16 19:54
Alexey 21/12/16 21:53

Ω ναι. Ειδικά ο κωδικός στο Asma. Οι ειδικοί του Arduino θα το εκτιμήσουν στο έπακρο)))

Py.sy.
Ακόμα κι αν δεν κοιτάξετε το ASM, το πρόγραμμα εκεί είναι γραμμένο για έναν ελεγκτή PIC. Είναι αυτές οι «πολύ» χρήσιμες πληροφορίες για τους ειδικούς AVR; ειδικά για αρχάριους))) Δεν έχω τίποτα εναντίον του PIC, αλλά ακόμη και το ASM του PIC και του AVR είναι διαφορετικό. Όσο για τις λεπτομέρειες της λειτουργίας της οθόνης LCD, μπορείτε να ρίξετε μια ματιά))) Είναι αλήθεια ότι το έγραψα και κάτω από το CVAVR, αλλά όλες οι εντολές αποσυναρμολογούνται και ταξινομούνται σε ράφια. Αλλά σε κάθε περίπτωση, αποφασίστε μόνοι σας πού γράφεται πιο καθαρά))) Ο συγγραφέας γράφει, ο αναγνώστης επιλέγει.

GeK 01/04/17 12:52

"Διεύθυνση I2C του τσιπ (από προεπιλογή είναι 0x4E"

Τα πιο σημαντικά 4 bit της διεύθυνσης διορθώνονται,
Το πρόθεμα για το PCF8574 είναι 0100 και για το PCF8574A είναι 0111
Τα χαμηλότερα 3 bit εξαρτώνται από την κατάσταση των εισόδων του τσιπ A2-A0. Από προεπιλογή, και τα 3 jumpers είναι ανοιχτά, αντίστοιχα, η διεύθυνση chip παίρνει την τιμή 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

Alexey 01/04/17 14:27

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

Το 0b01001110 είναι 0x4E
Οπότε όλα είναι σωστά εδώ. Και αν πρέπει να αλλάξετε τη διεύθυνση, τότε απλά πρέπει να την αλλάξετε στο Ορισμός.

Γιούρι 14/12/17 21:26

Καλημέρα! Και μπορείτε επίσης να χρησιμοποιήσετε τον κωδικό λειτουργίας lcdgotoxy και lcdclear για να εργαστείτε με τον προσαρμογέα PCF8574.

Αλέξανδρος 20.05.18 18:14

Καλημέρα! Πώς βγάζετε ρωσικό κείμενο;

Alexey 20.05.18 23:04

Αυτή είναι μια εγχώρια οθόνη από το MELT. Το κυριλλικό αλφάβητο είναι ενσωματωμένο στη μνήμη του.

Αλέξανδρος 21/05/18 04:55

Καλημέρα! Γράφω όπως κάνετε εσείς στο Project για το AtmelStudio 6.2 "ЁPҐBET MҐP!" βγάζει κανονικά
και αν γράψεις "ΓΕΙΑ ΚΟΣΜΟ!" βγάζει κάθε λογής ανοησία. Έχω δύο
Μία από τις επιλογές εμφάνισης έχει κυριλλικό αλφάβητο. το δεύτερο είναι κινέζικο.

Alexey 21/05/18 09:22

Θα έγραφα πρώτα ένα δοκιμαστικό πρόγραμμα. Επαναλαμβάνεται σε ολόκληρη τη μνήμη και εμφανίζει σύμβολα και τις διευθύνσεις τους. Και μετά μάθετε ποιο είναι το πρόβλημα. Πιθανότατα ο πίνακας χαρακτήρων να μην ταιριάζει με τον πίνακα ascii.

Andrey 03.09.18 08:32

Καλημέρα!

Μπορείτε να δώσετε ένα διάγραμμα κυκλώματος για τον Proteus;

Andrey 09/03/18 10:22

Ή δεν έχει κάνει κανείς έλεγχος στο Proteuse;

Andrey 09/03/18 10:56

Υπολόγισε το main_init

Pavel 30/05/19 23:35

Ένα περίεργο πράγμα, η διεύθυνση οθόνης είναι 0x4E και εάν η ίδια οθόνη είναι συνδεδεμένη με το Arduino, τότε η διεύθυνση είναι 0x27

Pavel 31/05/19 11:04

Σας ευχαριστώ πολύ για τη δουλειά σας! Έψαξα ολόκληρο το Διαδίκτυο και κανένα από τα παραδείγματα που δίνονται εκτός από το δικό σας δεν λειτούργησε. Το μόνο πράγμα είναι ότι στο αρχείο του έργου οι καθυστερήσεις _delay_ δεν καθορίζονται στη συνάρτηση αρχικοποίησης της οθόνης και κατά συνέπεια δεν λειτουργεί

Alexey 06/01/19 09:52

Λοιπόν, αυτό είναι περισσότερο ένα έργο επίδειξης. Για καλό λόγο, η βιβλιοθήκη axlib πρέπει να ξαναγραφτεί, αλλά δεδομένου του γεγονότος ότι τα STM32 και STM8 κινούνται αλματωδώς, δεν υπάρχει κανένα νόημα στο AVR.

Pavel 06/05/19 12:57

Η STM δεν έχει πακέτα DIP, είναι πιο δύσκολη η κατασκευή τυπωμένων κυκλωμάτων. Για τα έργα μου, οι δυνατότητες του AVR είναι πολλές, μπορείτε να χωρέσετε πολλά σε ένα Atmega 8

Alexey 06/05/19 15:20

Ναι, αλλά πόσο κοστίζει το Atmega8 και το stm8s003)))

Ντμίτρι 06/07/19 00:41

Γεια σου, Alexey.
Πείτε μου πώς να διαβάσω την κατάσταση της θύρας από το pcf8574;
Θέλω να φτιάξω μια εξωτερική μονάδα, 8 GPIO στο δίαυλο i2c - αυτό είναι.

Ντμίτρι 06/07/19 17:56

Θα απαντήσω μόνος μου
Η συνάρτηση επιστρέφει ένα byte - την κατάσταση των θυρών μικροκυκλώματος
uint8_t pcf8574_byte_rcv(uint8_t addr)
{
uint8_t ask = ACK;
addr |= 0b01; //ΑΝΑΓΝΩΣΗ
uint8_t δεδομένα=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

Δεδομένα επιστροφής.
}

Pavel 06/07/19 20:37

Πόσο κοστίζει, 150 ρούβλια, για την τιμή ενός ρελέ γενικά) και πώς συνδέετε τις πλακέτες για STM; Το LUT είναι αναξιόπιστο, ο δρομολογητής CNC δεν είναι σίγουρος τι θα χρειαστεί (δεν το έχω δοκιμάσει)

Σε αυτό το άρθρο θα σας πω πώς να χρησιμοποιήσετε μια μονάδα διασύνδεσης I2C για να ελέγξετε μια οθόνη LCD (2x16 / 20x4) χρησιμοποιώντας το Arduino. Αυτή η μονάδα σάς επιτρέπει να μειώσετε τον αριθμό των ακίδων ελεγκτή που χρησιμοποιούνται αντί για σύνδεση 8 ή 4 bit, απαιτούνται μόνο 2 ακίδες (SDA και SCL).

. Αυτή η μονάδα σάς επιτρέπει να μειώσετε τον αριθμό των ακίδων ελεγκτή που χρησιμοποιούνται αντί για σύνδεση 8 ή 4 bit, απαιτούνται μόνο 2 ακίδες (SDA και SCL).

Τεχνικές Παράμετροι
Υποστήριξη οθόνης: LCD 16×02 / 20×04
Προαιρετικά: ρύθμιση αντίθεσης
Τάση τροφοδοσίας. 5V
Διεπαφή: I2C

Διαστάσεις: 54mm x 19mm x 15mm

Δεδομένου ότι ο αριθμός των επαφών στους ελεγκτές Arduino είναι περιορισμένος και συχνά εξαντλούνται κατά τη χρήση διαφόρων αισθητήρων και μονάδων, υπάρχει ανάγκη αποθήκευσης για αυτές τις περιπτώσεις, αυτή η μονάδα αναπτύχθηκε με τη βοήθειά της (SDA και SCL).

Τώρα λίγο για την ίδια τη μονάδα είναι χτισμένη στο τσιπ PCF8574T. Οι αντιστάσεις R8 (4,7 kOhm) και R9 (4,7 kOhm) είναι απαραίτητες για την ανύψωση των γραμμών SDA και SCL Στην ιδανική περίπτωση, όταν συνδέετε δύο ή περισσότερες συσκευές μέσω του διαύλου I2C, πρέπει να χρησιμοποιείτε ένα pull-up μόνο σε μία συσκευή, I. Θα γράψω γιατί αργότερα. Υπάρχουν τρεις βραχυκυκλωτήρες στην πλακέτα (το διάγραμμα δείχνει ότι οι γραμμές A0, A1, A2 συνδέονται στο τροφοδοτικό μέσω των αντιστάσεων R4, R5, R6), χρειάζονται για να αλλάξετε τη διεύθυνση της συσκευής, υπάρχουν συνολικά 8 επιλογές . Η αλλαγή της διευθυνσιοδότησης μας δίνει τη δυνατότητα να συνδέσουμε έως και οκτώ συσκευές μέσω του διαύλου IC2 με το τσιπ PCF8574T οι επιλογές διεύθυνσης φαίνονται στο σχήμα (η προεπιλεγμένη διεύθυνση συσκευής είναι 0x27). Η μονάδα είναι επίσης εξοπλισμένη με ποτενσιόμετρο R11, με τη βοήθειά του μπορείτε να αλλάξετε την αντίθεση της οθόνης LCD.

Υπάρχουν τρεις ομάδες επαφών στη μονάδα για σύνδεση:

Πρώτη ομάδα:
SCL: Σειριακό ρολόι
SDA: γραμμή δεδομένων (Serial Dфta)
VCC: ισχύς "+".
GND: Τροφοδοτικό "-".

Δεύτερη ομάδα:
VSS: "-" ισχύς
VDD: "+" τροφοδοτικό
VO: Καρφίτσα ελέγχου αντίθεσης
RS: Εγγραφή Επιλέξτε
RW: Ανάγνωση/Εγγραφή (λειτουργία εγγραφής όταν είναι συνδεδεμένο στη γείωση)
E: Ενεργοποίηση (πτώση στροβοσκοπίου)
DB0-DB3: Χαμηλά bit διεπαφής
DB4-DB7: High bits διεπαφής
Α: Τροφοδοτικό οπίσθιου φωτισμού "+".
K: "-" Ισχύς οπίσθιου φωτισμού

Τρίτη ομάδα: (το jumper που έχει οριστεί από προεπιλογή)
VCC:
A από LCD:

Σύνδεση στο Arduino

Απαιτούμενα ανταλλακτικά:
Arduino UNO R3 x 1 τεμ.
Οθόνη LCD 1602A (2×16, 5V, Μπλε) x 1 τεμ.
Μονάδα διασύνδεσης I2C, IIC, TWI για LCD x 1 τεμ.
Σύρμα DuPont, 2,54 mm, 20 cm, F-M (Γυναικείο - Αρσενικό) x 1 τεμ.
Καλώδιο USB 2.0 A-B x 1 τεμ.

Σύνδεση:
Πρώτα απ 'όλα, κολλάμε τη μονάδα I2C στην οθόνη LCD και, στη συνέχεια, πρέπει να συνδέσετε την οθόνη στο Arduino UNO. Για να το κάνουμε αυτό, θα χρησιμοποιήσουμε την καλωδίωση DuPont που συνδέουμε σύμφωνα με τον παρακάτω πίνακα.

Για λόγους σαφήνειας, θα δώσω ένα άλλο διάγραμμα.

Για αυτό το πείραμα, πρέπει να κάνετε λήψη και εγκατάσταση της βιβλιοθήκης "LiquidCrystal_I2C". Στη συνέχεια, αντιγράψτε και επικολλήστε αυτό το παράδειγμα κώδικα στο παράθυρο του προγράμματος Arduino IDE και φορτώστε τον στον ελεγκτή.

/* Δοκιμάστηκε σε Arduino IDE 1.6.11 Ημερομηνία δοκιμής 15/09/2016 */ #include #συμπεριλαμβάνω LiquidCrystal_I2C LCD (0x27,16,2); // Ορίστε τη διεύθυνση και το μέγεθος της οθόνης void setup() ( lcd.init(); // Initialize lcd lcd.backlight(); // Ενεργοποίηση του οπίσθιου φωτισμού lcd.setCursor(0,0); // Ρύθμιση του δρομέας στην αρχή της γραμμής lcd .print("Hello, world" // Εκτύπωση του κειμένου lcd.setCursor(0,1) robotchip.ru"); // Εκτυπώστε το κείμενο ) void loop() ( )

Κατεβάστε το πρόγραμμα

Εάν τα κάνατε όλα σωστά, αλλά δεν υπάρχουν σύμβολα στην οθόνη, δοκιμάστε να αυξήσετε την αντίθεση με το ποτενσιόμετρο.


Εδαφος διά παιγνίδι γκολφ
Κάντε λήψη της βιβλιοθήκης LiquidCrystal_I2C
Τεκμηρίωση για το τσιπ PCF8574T
Τεκμηρίωση για LCD1602A

Αγορά στο Aliexpress