Η μονάδα είναι συνδεδεμένη στο Arduino ως στάνταρ για το δίαυλο I2C: ο ακροδέκτης SDA της μονάδας είναι συνδεδεμένος στο αναλογική θύρα A4, SCL pin - στην αναλογική θύρα A5 του Arduino. Η μονάδα τροφοδοτείται με +5 V από το Arduino. Η ίδια η μονάδα συνδέεται με τις ακίδες 1…16 στις αντίστοιχες ακίδες 1…16 στην οθόνη LCD.
Τώρα χρειαζόμαστε μια βιβλιοθήκη για να δουλεύουμε με LCD μέσω της διεπαφής I2C. Μπορείτε να χρησιμοποιήσετε, για παράδειγμα, αυτό (σύνδεσμος στη γραμμή "Λήψη δείγματος κώδικα και βιβλιοθήκης").
Λήψη αρχείου LiquidCrystal_I2Cv1-1.rarαποσυμπιέστε σε ένα φάκελο \βιβλιοθήκες\, που βρίσκεται στον κατάλογο Arduino IDE.
Η βιβλιοθήκη υποστηρίζει την πληκτρολόγηση τυπικά χαρακτηριστικάγια οθόνες LCD:
Λειτουργία | Σκοπός |
---|---|
LiquidCrystal() | δημιουργεί μεταβλητή τύπου LiquidCrystal και δέχεται παραμέτρους σύνδεσης οθόνης (αριθμοί ακίδων). |
αρχίζω() | αρχικοποίηση της οθόνης LCD, ρύθμιση παραμέτρων (αριθμός γραμμών και χαρακτήρων). |
σαφής() | εκκαθάριση της οθόνης και επαναφορά του δρομέα στην αρχική θέση. |
σπίτι() | επιστρέψτε τον κέρσορα στην αρχική θέση. |
setCursor() | ρύθμιση του δρομέα σε μια δεδομένη θέση. |
γράφω() | εμφανίζει το σύμβολο στην οθόνη LCD. |
αποτύπωμα() | εμφανίζει κείμενο στην οθόνη LCD. |
δρομέας() | δείχνει τον κέρσορα, δηλ. υπογράμμιση κάτω από τη θέση του επόμενου χαρακτήρα. |
noCursor() | κρύβει τον κέρσορα. |
αναβοσβήνω() | ο κέρσορας αναβοσβήνει. |
noBlink() | Ακύρωση αναβοσβήνει? |
noDisplay() | απενεργοποίηση της οθόνης κατά την αποθήκευση όλων των εμφανιζόμενων πληροφοριών. |
επίδειξη() | ενεργοποίηση της οθόνης κατά την αποθήκευση όλων των εμφανιζόμενων πληροφοριών. |
scrollDisplayLeft() | κυλήστε τα περιεχόμενα της οθόνης 1 θέση προς τα αριστερά. |
scrollDisplayRight() | κύλιση των περιεχομένων της οθόνης 1 θέση προς τα δεξιά. |
autoscroll() | ενεργοποίηση αυτόματης κύλισης. |
noAutoscroll() | Απενεργοποίηση αυτόματης κύλισης. |
αριστερά προς τα δεξιά() | ορίζει την κατεύθυνση του κειμένου από αριστερά προς τα δεξιά. |
rightToLeft() | κατεύθυνση κειμένου από δεξιά προς τα αριστερά. |
createChar() | δημιουργεί έναν προσαρμοσμένο χαρακτήρα για την οθόνη LCD. |
Ας ανοίξουμε το δείγμα: Δείγματα αρχείων LiquidCrystal_I2C CustomCharsκαι θα το αλλάξουμε λίγο. Θα εμφανίσουμε ένα μήνυμα στο τέλος του οποίου θα αναβοσβήνει ένα σύμβολο. Τα σχόλια στον κώδικα σχολιάζουν όλες τις αποχρώσεις του σκίτσου.
#συμπεριλαμβάνω
καθυστέρηση (500); lcd.setCursor(13, 1); // μετακινήστε τον κέρσορα στη γραμμή 2, χαρακτήρας 1 lcd.print(" ");καθυστέρηση (500);
, παραμένουν στη μνήμη της οθόνης ακόμη και μετά την απενεργοποίηση του ρεύματος, επειδή γραμμένο για εμφάνιση ROM 1602. Δημιουργήστε τα δικά σας σύμβολαγια οθόνη LCD {00000, 01010, 11111, 11111, 01110, 00100, 00000} Ας δούμε λίγο πιο προσεκτικά το θέμα της δημιουργίας των δικών σας συμβόλων για οθόνες LCD. Κάθε χαρακτήρας στην οθόνη αποτελείται από 35 κουκκίδες: 5 πλάτος και 7 ύψος (+1 δεσμευτική γραμμή για υπογράμμιση). Στη γραμμή 6 του παραπάνω σκίτσου ορίζουμε έναν πίνακα 7 αριθμών:
. Αυτοί οι αριθμοί δεν είναι τίποτα άλλο από μάσκες bit για καθεμία από τις 7 γραμμές του συμβόλου, όπου το "0" υποδηλώνει ένα φωτεινό σημείο και το "1" ένα σκοτεινό σημείο. Για παράδειγμα, ένα σύμβολο καρδιάς που καθορίζεται ως bitmask θα εμφανιστεί στην οθόνη όπως φαίνεται στο σχήμα.
Ως μπόνους, ας δούμε το διάγραμμα χρονισμού για την εμφάνιση των λατινικών χαρακτήρων "A", "B" και "C" στην οθόνη LCD. Αυτοί οι χαρακτήρες αποθηκεύονται στην οθόνη ROM και εμφανίζονται στην οθόνη απλώς μεταδίδοντας τις διευθύνσεις τους στην οθόνη. Το διάγραμμα λαμβάνεται από τις ακίδες RS, RW, E, D4, D5, D6 και D7 της οθόνης, δηλ. ήδη μετά τον μετατροπέα FC-113 “I2C parallel bus”. Μπορούμε να πούμε ότι βουτάμε λίγο πιο βαθιά στο υλικό.
Το διάγραμμα δείχνει ότι οι χαρακτήρες που βρίσκονται στην οθόνη ROM (βλ. σελ. 11 του φύλλου δεδομένων, σύνδεσμος παρακάτω) μεταδίδονται σε δύο τσιμπήματα, η πρώτη από τις οποίες καθορίζει τον αριθμό της στήλης του πίνακα και η δεύτερη - τον αριθμό της σειράς. Σε αυτή την περίπτωση, τα δεδομένα "μανδαλώνονται" στην άκρη του σήματος στη γραμμή μι(Ενεργοποίηση) και η γραμμή R.S.(Επιλογή εγγραφής) βρίσκεται σε μια λογική κατάσταση, που σημαίνει ότι τα δεδομένα μεταφέρονται. Μια χαμηλή κατάσταση στη γραμμή RS σημαίνει ότι αποστέλλονται οδηγίες, κάτι που βλέπουμε πριν από τη μετάδοση κάθε χαρακτήρα. Σε αυτήν την περίπτωση, ο κωδικός οδηγιών επιστροφής μεταφοράς μεταδίδεται στη θέση (0, 0) της οθόνης LCD, την οποία μπορείτε επίσης να βρείτε μελετώντας τεχνική περιγραφήεπίδειξη.
Και ένα ακόμη παράδειγμα. Αυτό το διάγραμμα χρονισμού δείχνει την έξοδο του συμβόλου Heart στην οθόνη LCD.
Και πάλι, οι δύο πρώτες παρορμήσεις Καθιστώ ικανόσυμμορφωθείτε με τις οδηγίες Σπίτι()(0000 0010 2) - επαναφέρετε το φορείο στη θέση (0; 0) και το δεύτερο δύο - έξοδος στην οθόνη LCD που είναι αποθηκευμένη στο κελί μνήμης 3 10 (0000 0011 2) το σύμβολο "Καρδιά" (οδηγία lcd.createChar(3, heart);σκίτσο).
Σε αυτό το άρθρο θα σας πω πώς να χρησιμοποιήσετε τη μονάδα διασύνδεσης I2C για Έλεγχος LCDοθόνη (2×16 / 20x4) με χρησιμοποιώντας Arduino. Αυτή η μονάδα σάς επιτρέπει να μειώσετε τον αριθμό των ακίδων ελεγκτή που χρησιμοποιούνται αντί για σύνδεση 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 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
Τεκμηρίωση για το τσιπ PCF8574T
Τεκμηρίωση για LCD1602A
Αγορά στο Aliexpress
Ίσως μια από τις πιο δημοφιλείς οθόνες της αγοράς. Κατασκευασμένο στο δημοφιλές χειριστήριο 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 που ελέγχεται από έναν ελεγκτή HD44780, σε λειτουργία 4 bit. Για το σκοπό αυτό, τοποθετείται στην πλακέτα ένα μικροκύκλωμα, το οποίο είναι μετατροπέας του διαύλου I2C σε παράλληλη θύρα 8 bit.
Η πλακέτα δρομολογείται με τέτοιο τρόπο ώστε να μπορεί να συνδεθεί αμέσως στην οθόνη LCD. Η είσοδος τροφοδοτεί γραμμές ρεύματος και I2C. Η πλακέτα είναι αμέσως εξοπλισμένη με αντιστάσεις έλξης στις γραμμές SCL και SDA, ένα ποτενσιόμετρο για τη ρύθμιση της αντίθεσης και τροφοδοτικό για την ίδια την οθόνη. Ο βραχυκυκλωτήρας στα δεξιά ενεργοποιεί/απενεργοποιεί τον οπίσθιο φωτισμό. Στη συνέχεια, οπλισμένος με δοκιμαστή, καταρτίστηκε ο ακόλουθος πίνακας. Μετά τη μελέτη της ενότητας, αποκαλύφθηκε ότιελέγχει τον οπίσθιο φωτισμό. Εάν έχει εγκατασταθεί ο βραχυκυκλωτήρας, τότε το 1 ανάβει τον οπίσθιο φωτισμό και το 0 τον απενεργοποιεί. Όταν αφαιρείται ο βραχυκυκλωτήρας, ο οπίσθιος φωτισμός είναι πάντα σβηστός. Στη συνέχεια, αποφασίστηκε να συμπληρωθεί η βιβλιοθήκη axlib με λειτουργίες για εργασία με το δίαυλο I2C (υλοποίηση λογισμικού) και λειτουργίες ελέγχου του τσιπ PCF8574. Με λίγα λόγια, πώς λειτουργεί η ενότητα. Για να εξάγετε ένα byte παράλληλα, πρέπει να στείλετε τη διεύθυνση του μικροκυκλώματος στο δίαυλο I2C (από προεπιλογή είναι 0x4E. Μπορείτε επίσης να αλλάξετε τη διεύθυνση συγκολλώντας βραχυκυκλωτήρες στην πλακέτα και αλλάζοντας την τιμή των τριών λιγότερο σημαντικών bits της διεύθυνσης), μετά τη λήψη του ACK, αποστέλλεται ένα byte δεδομένων. Αφού το τσιπ αποκριθεί με ένα ACK, το byte εμφανίζεται στην παράλληλη θύρα του τσιπ. Για να ελέγξω την οθόνη LCD, πήρα λειτουργίες από τη βιβλιοθήκη του axlib και τις τροποποίησα ελαφρώς ώστε να λειτουργούν με το δίαυλο I2C. #συμπεριλαμβάνω
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
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. Και τα υπόλοιπα είναι τα ίδια.
Λοιπόν, αυτή η λειτουργία είναι καθαρά για τη μετάδοση μιας συμβολοσειράς στην οθόνη. Στην πραγματικότητα, δεν έχει καμία σχέση με το θέμα μας.
Αρμόδια 01.08.15 17:11
Alexey 02.08.15 19:11
Alexey 06.08.15 09:14
Ντμίτρι 14/06/16 21:57
Ω ναι. Ειδικά ο κωδικός στο ASMA. Οι ειδικοί του Arduino θα το εκτιμήσουν στο έπακρο)))
Py.sy.
Ακόμα κι αν δεν κοιτάξετε το ASM, το πρόγραμμα εκεί είναι γραμμένο για έναν ελεγκτή PIC. Είναι αυτές οι «πολύ» χρήσιμες πληροφορίες για τους ειδικούς AVR; ειδικά για αρχάριους))) Δεν έχω τίποτα εναντίον του PIC, αλλά ακόμη και το ASM του PIC και του AVR είναι διαφορετικό. Όσο για τις λεπτομέρειες της λειτουργίας της οθόνης LCD, μπορείτε να ρίξετε μια ματιά))) Είναι αλήθεια ότι το έγραψα και κάτω από το CVAVR, αλλά όλες οι εντολές αποσυναρμολογούνται και ταξινομούνται σε ράφια. Αλλά σε κάθε περίπτωση, αποφασίστε μόνοι σας πού γράφεται πιο καθαρά))) Ο συγγραφέας γράφει, ο αναγνώστης επιλέγει.
"Διεύθυνση 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
Κάτι έχεις μπερδέψει.
Απόσπασμα από την τεκμηρίωση για το μικροκύκλωμα
Το 0b01001110 είναι 0x4E
Οπότε όλα είναι σωστά εδώ. Και αν πρέπει να αλλάξετε τη διεύθυνση, τότε απλά πρέπει να την αλλάξετε στο Ορισμός.
Καλημέρα! Και μπορείτε επίσης να χρησιμοποιήσετε τον κωδικό λειτουργίας lcdgotoxy και lcdclear για να εργαστείτε με τον προσαρμογέα για PCF8574.
Καλημέρα! Πώς βγάζετε ρωσικό κείμενο;
Αυτή είναι μια εγχώρια οθόνη από το MELT. Το κυριλλικό αλφάβητο είναι ενσωματωμένο στη μνήμη του.
Καλημέρα! Γράφω όπως κάνετε εσείς στο Project για το AtmelStudio 6.2 "ЁPҐBET MҐP!" βγάζει κανονικά
και αν γράψεις "ΓΕΙΑ ΚΟΣΜΟ!" βγάζει κάθε λογής ανοησία. Έχω δύο
Μία από τις επιλογές εμφάνισης έχει κυριλλικό αλφάβητο. το δεύτερο είναι κινέζικο.
Θα έγραφα πρώτα ένα δοκιμαστικό πρόγραμμα. Επαναλαμβάνεται σε ολόκληρη τη μνήμη και εμφανίζει σύμβολα και τις διευθύνσεις τους. Και μετά καταλάβετε ποιο είναι το πρόβλημα. Πιθανότατα ο πίνακας χαρακτήρων να μην ταιριάζει με τον πίνακα ascii.
Καλημέρα!
Μπορείτε να δώσετε ένα διάγραμμα κυκλώματος για τον Proteus;
Ή δεν έχει κάνει κανείς έλεγχος στο Proteuse;
Υπολόγισε το main_init
Ένα περίεργο πράγμα, η διεύθυνση οθόνης είναι 0x4E και εάν η ίδια οθόνη είναι συνδεδεμένη με το Arduino, τότε η διεύθυνση είναι 0x27
Σας ευχαριστώ πολύ για τη δουλειά σας! Έψαξα ολόκληρο το Διαδίκτυο και κανένα από τα παραδείγματα που δίνονται εκτός από το δικό σας δεν λειτούργησε. Το μόνο πράγμα είναι ότι στο αρχείο του έργου οι καθυστερήσεις _delay_ δεν καθορίζονται στη συνάρτηση αρχικοποίησης της οθόνης και κατά συνέπεια δεν λειτουργεί
Λοιπόν, αυτό είναι περισσότερο ένα έργο επίδειξης. Για καλό λόγο, η βιβλιοθήκη axlib πρέπει να ξαναγραφτεί, αλλά δεδομένου του γεγονότος ότι τα STM32 και STM8 κινούνται αλματωδώς, δεν υπάρχει κανένα νόημα στο AVR.
Η STM δεν έχει πακέτα DIP, είναι πιο δύσκολη η κατασκευή τυπωμένων κυκλωμάτων. Για τα έργα μου, οι δυνατότητες του AVR είναι πολλές, μπορείτε να χωρέσετε πολλά σε ένα Atmega 8
Ναι, αλλά πόσο κοστίζει το Atmega8 και το stm8s003)))
Γεια σου, Alexey.
Πείτε μου πώς να διαβάσω την κατάσταση της θύρας από το pcf8574;
Θέλω να φτιάξω μια εξωτερική μονάδα, 8 GPIO στο δίαυλο i2c - αυτό είναι.
Θα απαντήσω μόνος μου
Η συνάρτηση επιστρέφει ένα 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();
Δεδομένα επιστροφής.
}
Πόσο κοστίζει, 150 ρούβλια, για την τιμή ενός ρελέ γενικά) και πώς συνδέετε τις πλακέτες για STM; Το LUT είναι αναξιόπιστο, ο δρομολογητής CNC δεν είναι σίγουρος τι θα χρειαστεί (δεν το έχω δοκιμάσει)
Η μονάδα συνδέεται με το Arduino με έναν τυπικό τρόπο για το δίαυλο I2C: ο ακροδέκτης SDA της μονάδας συνδέεται στην αναλογική θύρα A4, ο ακροδέκτης SCL συνδέεται στην αναλογική θύρα A5 του Arduino. Η μονάδα τροφοδοτείται με +5 V από το Arduino. Η ίδια η μονάδα συνδέεται με τις ακίδες 1…16 στις αντίστοιχες ακίδες 1…16 στην οθόνη LCD.
Τώρα χρειαζόμαστε μια βιβλιοθήκη για να δουλεύουμε με LCD μέσω της διεπαφής I2C. Μπορείτε να χρησιμοποιήσετε, για παράδειγμα, αυτό (σύνδεσμος στη γραμμή "Λήψη δείγματος κώδικα και βιβλιοθήκης").
Λήψη αρχείου LiquidCrystal_I2Cv1-1.rarαποσυμπιέστε σε ένα φάκελο \βιβλιοθήκες\, το οποίο βρίσκεται στον κατάλογο Arduino IDE.
Η βιβλιοθήκη υποστηρίζει ένα σύνολο τυπικών λειτουργιών για οθόνες LCD:
Λειτουργία | Σκοπός |
---|---|
LiquidCrystal() | δημιουργεί μια μεταβλητή τύπου LiquidCrystal και δέχεται παραμέτρους σύνδεσης οθόνης (αριθμοί ακίδων). |
αρχίζω() | αρχικοποίηση της οθόνης LCD, ρύθμιση παραμέτρων (αριθμός γραμμών και χαρακτήρων). |
σαφής() | εκκαθάριση της οθόνης και επαναφορά του δρομέα στην αρχική θέση. |
σπίτι() | επιστρέψτε τον κέρσορα στην αρχική θέση. |
setCursor() | ρύθμιση του δρομέα σε μια δεδομένη θέση. |
γράφω() | εμφανίζει το σύμβολο στην οθόνη LCD. |
αποτύπωμα() | εμφανίζει κείμενο στην οθόνη LCD. |
δρομέας() | δείχνει τον κέρσορα, δηλ. υπογράμμιση κάτω από τη θέση του επόμενου χαρακτήρα. |
noCursor() | κρύβει τον κέρσορα. |
αναβοσβήνω() | ο κέρσορας αναβοσβήνει. |
noBlink() | Ακύρωση αναβοσβήνει? |
noDisplay() | απενεργοποίηση της οθόνης κατά την αποθήκευση όλων των εμφανιζόμενων πληροφοριών. |
επίδειξη() | ενεργοποίηση της οθόνης κατά την αποθήκευση όλων των εμφανιζόμενων πληροφοριών. |
scrollDisplayLeft() | κυλήστε τα περιεχόμενα της οθόνης 1 θέση προς τα αριστερά. |
scrollDisplayRight() | κύλιση των περιεχομένων της οθόνης 1 θέση προς τα δεξιά. |
autoscroll() | ενεργοποίηση αυτόματης κύλισης. |
noAutoscroll() | Απενεργοποίηση αυτόματης κύλισης. |
αριστερά προς τα δεξιά() | ορίζει την κατεύθυνση του κειμένου από αριστερά προς τα δεξιά. |
rightToLeft() | κατεύθυνση κειμένου από δεξιά προς τα αριστερά. |
createChar() | δημιουργεί έναν προσαρμοσμένο χαρακτήρα για την οθόνη LCD. |
Ας ανοίξουμε το δείγμα: Δείγματα αρχείων LiquidCrystal_I2C CustomCharsκαι θα το αλλάξουμε λίγο. Θα εμφανίσουμε ένα μήνυμα στο τέλος του οποίου θα αναβοσβήνει ένα σύμβολο. Τα σχόλια στον κώδικα σχολιάζουν όλες τις αποχρώσεις του σκίτσου.
#συμπεριλαμβάνω
καθυστέρηση (500); lcd.setCursor(13, 1); // μετακινήστε τον κέρσορα στη γραμμή 2, χαρακτήρας 1 lcd.print(" ");καθυστέρηση (500);
, παραμένουν στη μνήμη της οθόνης ακόμη και μετά την απενεργοποίηση του ρεύματος, επειδή γραμμένο για εμφάνιση ROM 1602. Δημιουργήστε τα δικά σας σύμβολαγια οθόνη LCD {00000, 01010, 11111, 11111, 01110, 00100, 00000} Ας δούμε λίγο πιο προσεκτικά το θέμα της δημιουργίας των δικών σας συμβόλων για οθόνες LCD. Κάθε χαρακτήρας στην οθόνη αποτελείται από 35 κουκκίδες: 5 πλάτος και 7 ύψος (+1 δεσμευτική γραμμή για υπογράμμιση). Στη γραμμή 6 του παραπάνω σκίτσου ορίζουμε έναν πίνακα 7 αριθμών:
. Αυτοί οι αριθμοί δεν είναι τίποτα άλλο από μάσκες bit για καθεμία από τις 7 γραμμές του συμβόλου, όπου το "0" υποδηλώνει ένα φωτεινό σημείο και το "1" ένα σκοτεινό σημείο. Για παράδειγμα, ένα σύμβολο καρδιάς που καθορίζεται ως bitmask θα εμφανιστεί στην οθόνη όπως φαίνεται στο σχήμα.
Ως μπόνους, ας δούμε το διάγραμμα χρονισμού για την εμφάνιση των λατινικών χαρακτήρων "A", "B" και "C" στην οθόνη LCD. Αυτοί οι χαρακτήρες αποθηκεύονται στην οθόνη ROM και εμφανίζονται στην οθόνη απλώς μεταδίδοντας τις διευθύνσεις τους στην οθόνη. Το διάγραμμα λαμβάνεται από τις ακίδες RS, RW, E, D4, D5, D6 και D7 της οθόνης, δηλ. ήδη μετά τον μετατροπέα FC-113 “I2C parallel bus”. Μπορούμε να πούμε ότι βουτάμε λίγο πιο βαθιά στο υλικό.
Το διάγραμμα δείχνει ότι οι χαρακτήρες που βρίσκονται στην οθόνη ROM (βλ. σελ. 11 του φύλλου δεδομένων, σύνδεσμος παρακάτω) μεταδίδονται σε δύο τσιμπήματα, η πρώτη από τις οποίες καθορίζει τον αριθμό της στήλης του πίνακα και η δεύτερη - τον αριθμό της σειράς. Σε αυτή την περίπτωση, τα δεδομένα "μανδαλώνονται" στην άκρη του σήματος στη γραμμή μι(Ενεργοποίηση) και η γραμμή R.S.(Επιλογή εγγραφής) βρίσκεται σε μια λογική κατάσταση, που σημαίνει ότι τα δεδομένα μεταφέρονται. Μια χαμηλή κατάσταση στη γραμμή RS σημαίνει ότι αποστέλλονται οδηγίες, κάτι που βλέπουμε πριν από τη μετάδοση κάθε χαρακτήρα. Σε αυτήν την περίπτωση, μεταδίδεται ο κωδικός οδηγιών για την επιστροφή στη θέση (0, 0) της οθόνης LCD, τον οποίο μπορείτε επίσης να βρείτε μελετώντας την τεχνική περιγραφή της οθόνης.
Και ένα ακόμη παράδειγμα. Αυτό το διάγραμμα χρονισμού δείχνει την έξοδο του συμβόλου Heart στην οθόνη LCD.
Και πάλι, οι δύο πρώτες παρορμήσεις Καθιστώ ικανόσυμμορφωθείτε με τις οδηγίες Σπίτι()(0000 0010 2) - επαναφέρετε το φορείο στη θέση (0; 0) και το δεύτερο δύο - έξοδος στην οθόνη LCD που είναι αποθηκευμένη στο κελί μνήμης 3 10 (0000 0011 2) το σύμβολο "Καρδιά" (οδηγία lcd.createChar(3, heart);σκίτσο).