Εργασία με οθόνη γραφικών 1602 στο arduino. LCD WH1602B από την Winstar. Έλεγχος οθόνης LCD μέσω διαύλου I2C

Είχε φτάσει Arduino Nano, έφτασε ένα κιτ, που περιείχε ένα breadboard και μια οθόνη LCD. Η οθόνη στον πίνακα λέει - 1602A, κάτω - QAPASS. Άρχισα να σμιλεύω την πρώτη συσκευή και φυσικά ήθελα να εμφανίζω πληροφορίες στην οθόνη και όχι να αναβοσβήνουν τα LED.

Η Google βοήθησε, μου είπε ότι πρόκειται για εμφάνιση χαρακτήρων. Εάν δεν το παραμορφώσετε, τότε πιθανότατα είναι διαθέσιμοι χαρακτήρες ASCII - αριθμοί, λατινικά, μερικοί από τους βασικούς χαρακτήρες.

Τα ακόλουθα υλικά βοήθησαν στην εκκίνηση της οθόνης: Οδήγηση LCD τύπου χαρακτήρων από θύρα εκτυπωτή υπολογιστή. Πώς να συνδέσετε το Arduino με μια οθόνη LCD χαρακτήρων; Pwm Servo Driver Motor Control PDF.

Η οθόνη είναι αρκετά συνηθισμένη και έχουν ήδη εφευρεθεί ασπίδες για αυτήν - υπάρχουν επιλογές με SPI, like και/ή με I2C και το Διαδίκτυο είναι γεμάτο συνταγές για αυτές τις περιπτώσεις. Αλλά είχα μόνο την αρχική οθόνη 16x2 και το Arduino στο οποίο ήθελα να το συνδέσω.

Η οθόνη έχει τρόπο λειτουργίας και μετάδοση δεδομένων σε nibbles, 4 bit το καθένα, ενώ τα bits χαμηλής τάξης του διαύλου δεν χρησιμοποιούνται. Η σύνδεση μόνο του μισού διαύλου δεδομένων περιγράφεται σε πολλά σημεία και δεν κατάλαβα πώς να συνδέσω την οθόνη και να εργαστώ μαζί της σε 8 γραμμές. Είμαι πολύ ευχαριστημένος με το πώς λειτουργεί.

Καλή περιγραφή των οθονών αυτού του τύπουΤο βρήκα εδώ - http://greathard.ucoz.com/44780_rus.pdf. Και εδώ (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) είναι ένα παράδειγμα καθορισμού μιας γεννήτριας χαρακτήρων.

Σύνδεση

Η οθόνη μου ήρθε με μη συγκολλημένες επαφές. Από την αρχή ήθελα να κολλήσω το καλώδιο, να κόψω 16 καλώδια με ντουπόνια και να τα καθαρίσω. Και μετά έσκαψα στη φάλαινα και βρήκα μια χτένα DuPont για συγκόλληση στην σανίδα. Από εκεί έκοψα 16 επαφές και τις κόλλησα.
Η οθόνη μου έμοιαζε κάπως έτσι (πριν κολλήσω τις επαφές):

Πρώτα συνέδεσα τον ακροδέκτη 15 (A) στο +5V, 16 (K) στη γείωση και βεβαιώθηκα ότι ο οπίσθιος φωτισμός λειτούργησε. Γενικά, είναι σωστό να συνδέσετε την κάθοδο στη γείωση μέσω μιας αντίστασης 220 Ohm, κάτι που έκανα στη συνέχεια.

Μετά συνέδεσα τη γείωση (1) και την τροφοδοσία (2). Το Arduino μπορεί να τροφοδοτηθεί από USB, από σταθεροποιημένη τάση 5 V και από μη σταθεροποιημένη τάση 6-12 V, επιλέγεται αυτόματα η υψηλότερη τάση. Τώρα το Arduino τροφοδοτείται από USB και αναρωτιόμουν πού να πάρω 5 Volt. Αποδείχθηκε ότι το 5V βρίσκεται στον ακροδέκτη Arduino, όπου είναι συνδεδεμένο εξωτερικό σταθεροποιημένο 5V. Ή μάλλον, αποδείχθηκε ότι ήταν 4,7V, αλλά αυτό ήταν αρκετό για μένα.

Αφού συνδέσετε την τροφοδοσία, εάν όλα είναι καλά, τότε η επάνω σειρά ανάβει με συμπαγή ορθογώνια εξοικείωσης.

Στη συνέχεια συνδέουμε το ποτενσιόμετρο αντίθεσης (pin 3 V0). Ρίχνουμε έναν από τους ακραίους ακροδέκτες του ποτενσιόμετρου στο έδαφος, τον δεύτερο στα +5V, τον μεσαίο στον ακροδέκτη 3 της οθόνης. Συνιστάται ένα ποτενσιόμετρο 10K. Είχα 50K από φάλαινα, το χρησιμοποίησα πρώτα. Η προσαρμογή ήταν μόνο σε μια άκρη· ήταν απαραίτητο να πιάσει την επιθυμητή αντίθεση πολύ διακριτικά. Μετά βρήκα ένα παρόμοιο στα 5Κ σε άλλη φάλαινα και το εγκατέστησα. Η ρύθμιση εκτεινόταν από τη μία άκρη έως τη μισή στροφή. Προφανώς, μπορείτε να πάρετε ένα ακόμη μικρότερο ποτενσιόμετρο. Μάλλον προτείνεται 10K για να καταναλώνει λιγότερο το κύκλωμα. Ναι, έπρεπε να κάνω μια μικρή συγκόλληση· κόλλησα καλώδια με ντουπόνια στους ακροδέκτες των ποτενσιόμετρων.

Δοκιμαστικό σκίτσο

Παίρνουμε το δοκιμαστικό σκίτσο από τα παραδείγματα από το Arduino Studio - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", απλά πρέπει να αλλάξετε τις επαφές στις δικές μας - LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);

Κατ 'αρχήν, αυτό το σκίτσο περιέχει επίσης μια περιγραφή του τι να συνδέσετε πού. Μπορείτε να το συνδέσετε όπως υποδεικνύεται εκεί, τότε δεν χρειάζεται να αλλάξετε τίποτα απολύτως.

// συμπεριλάβετε τον κωδικό της βιβλιοθήκης: #include // αρχικοποίηση της βιβλιοθήκης με τους αριθμούς των ακίδων διασύνδεσης LiquidCrystal lcd(7, 6, 5, 4, 3, 2); void setup() ( // ρυθμίστε τον αριθμό στηλών και γραμμών της οθόνης LCD: lcd.begin(16, 2); // Εκτυπώστε ένα μήνυμα στην οθόνη LCD. lcd.print("γεια σας, κόσμος!"); ) void loop() ( // ορίστε τον κέρσορα στη στήλη 0, γραμμή 1 // (σημείωση: η γραμμή 1 είναι η δεύτερη σειρά, αφού η μέτρηση ξεκινά με 0): lcd.setCursor(0, 1); // εκτυπώστε τον αριθμό των δευτερόλεπτα από την επαναφορά: lcd.print(millis() / 1000); )

Αποδεικνύεται κάτι σαν αυτό:

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

1602A Εμφάνιση επαφών

# Επικοινωνία Ονομα Πώς να συνδεθείτε
1 VSS GND
2 VDD +5V
3 V0 Αντίθεση - στο μεσαίο τερματικό του ποτενσιόμετρου
4 RS (Εγγραφή επιλέξτε) D7 Arduino
5 R/W (Διαβάστε ή γράψτε) GND
6 E (Σήμα ενεργοποίησης) D6 Arduino
7-14 D0-D7 D0-D3 - δεν είναι συνδεδεμένο. D4-D7 - συνδέεται με τις ακίδες D5-D2 του Arduino
15 ΕΝΑ Άνοδος οπίσθιου φωτισμού, συνδεδεμένη με +5V
16 κ Κάθοδος οπίσθιου φωτισμού, συνδεδεμένη με τη γείωση μέσω αντίστασης 220 Ohm

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

Οθόνες LCD 1602 μεγεθών, που δημιουργήθηκαν με βάση τον ελεγκτή HD44780, εξακολουθούν να παραμένουν σήμερα μία από τις πιο προσιτές, απλές και περιζήτητες για την ανάπτυξη κάθε είδους ηλεκτρονικών συσκευών.

Δεν προκαλεί έκπληξη το γεγονός ότι μπορούν να φανούν τόσο σε απλές μονάδες συναρμολογημένες κυριολεκτικά στο γόνατο όσο και σε πιο σοβαρές βιομηχανικές, για παράδειγμα, μηχανές καφέ. Με αυτήν την οθόνη συναρμολογούνται οι πιο δημοφιλείς μονάδες και ασπίδες που σχετίζονται με το Arduino, για παράδειγμα η μονάδα LCD I2C και η ασπίδα πληκτρολογίου LCD.

Στα παρακάτω βήματα θα σας πούμε αναλυτικά με εικόνες πώς να συνδέσετε την LCD με το Arduino και να εμφανίσετε τις απαραίτητες πληροφορίες στην οθόνη.

Βήμα 2. LCD 1602 για Arduino

Οι οθόνες 1602 διατίθενται σε δύο διαφορετικά σχέδια:

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

Το μέγεθος των οθονών στον ελεγκτή HD44780 ποικίλλει πολύ, αλλά ελέγχονται με τον ίδιο τρόπο. Οι πιο συνηθισμένες διαστάσεις είναι 16 επί 02 (δηλαδή 16 χαρακτήρες σε δύο γραμμές) ή 20 επί 04. Οι ίδιοι οι χαρακτήρες έχουν ανάλυση 5 επί 8 pixel.

Οι περισσότερες οθόνες δεν υποστηρίζουν κυριλλικό (με εξαίρεση τις οθόνες με σήμανση CTK). Αλλά αυτό το πρόβλημα είναι εν μέρει επιλύσιμο και το άρθρο περιγράφει περαιτέρω λεπτομερώς πώς να το κάνετε αυτό.

Η οθόνη διαθέτει υποδοχή 16 PIN για σύνδεση. Οι καρφίτσες σημειώνονται στο πίσω μέρος του πίνακα, έχει ως εξής:

  • 1 (VSS) – αρνητικό τροφοδοτικό για τον ελεγκτή.
  • 2 (VDD) – θετική παροχή ρεύματος για τον ελεγκτή.
  • 3 (VO) – ρυθμίσεις ελέγχου αντίθεσης.
  • 4 (RS) – επιλογή εγγραφής.
  • 5 (R/W) – ανάγνωση και γραφή, ειδικότερα, γραφή όταν είναι συνδεδεμένο στη γείωση.
  • 6 (E) – ενεργοποίηση (ενεργοποίηση).
  • 7–10 (DB0-DB3) – bit χαμηλής τάξης από τη διεπαφή οκτώ bit.
  • 11–14 (DB4-DB7) – τα πιο σημαντικά bits από τη διεπαφή
  • 15 (A) – θετική άνοδος για τροφοδοσία οπίσθιου φωτισμού.
  • 16 (K) – αρνητική κάθοδος για τροφοδοσία οπίσθιου φωτισμού.

Βήμα 3. Συνδέστε την οθόνη LCD

Πριν συνδέσετε την οθόνη και μεταφέρετε πληροφορίες σε αυτήν, αξίζει να ελέγξετε τη λειτουργικότητά της. Πρώτα, εφαρμόστε τάση στον ελεγκτή VSS και VDD, ενεργοποιήστε τον οπίσθιο φωτισμό (A, K) και μετά προσαρμόστε την αντίθεση.

Για τέτοιες ρυθμίσεις, είναι κατάλληλο ένα ποτενσιόμετρο 10 kOhm, το σχήμα του δεν είναι σημαντικό. Τα +5V και το GND παρέχονται στα εξωτερικά πόδια και το πόδι στο κέντρο συνδέεται με τον ακροδέκτη VO.

Όταν παρέχεται ρεύμα στο κύκλωμα, πρέπει να επιτύχετε την απαραίτητη αντίθεση· εάν ρυθμιστεί εσφαλμένα, τότε η εικόνα στην οθόνη δεν θα είναι ορατή. Για να ρυθμίσετε την αντίθεση, πρέπει να "παίξετε" με το ποτενσιόμετρο. Όταν το κύκλωμα συναρμολογηθεί σωστά και η αντίθεση ρυθμιστεί σωστά, η επάνω γραμμή στην οθόνη θα πρέπει να γεμίσει με ορθογώνια.

Για να λειτουργήσει η οθόνη, χρησιμοποιείται μια ειδική βιβλιοθήκη ενσωματωμένη στο περιβάλλον Arduino IDE, η LiquidCrystal.h, για την οποία θα γράψω παρακάτω. Μπορεί να λειτουργήσει σε λειτουργία 8-bit και 4-bit. Στην πρώτη επιλογή, χρησιμοποιούνται μόνο τα λιγότερο σημαντικά και τα πιο σημαντικά bit ( BB0-DB7), στο δεύτερο – μόνο οι νεότεροι ( BB4-DB7).

Αλλά η χρήση της λειτουργίας 8-bit σε αυτήν την οθόνη είναι λάθος απόφαση· δεν υπάρχει σχεδόν κανένα πλεονέκτημα ταχύτητας, καθώς ο ρυθμός ανανέωσής της είναι πάντα μικρότερος από 10 φορές ανά δευτερόλεπτο. Για να εμφανίσετε κείμενο, πρέπει να συνδέσετε τις ακίδες DB7, DB6, DB5, DB4, E και RS στις ακίδες του ελεγκτή. Μπορούν να συνδεθούν με οποιεσδήποτε ακίδες Arduino, το κύριο πράγμα είναι να ορίσετε τη σωστή σειρά στον κώδικα.

Εάν το απαιτούμενο σύμβολο δεν βρίσκεται ακόμη στη μνήμη του ελεγκτή, μπορείτε να το ορίσετε χειροκίνητα (έως επτά σύμβολα συνολικά). Το κελί στις οθόνες που εξετάζουμε έχει επέκταση πέντε επί οκτώ pixel. Ο στόχος της δημιουργίας ενός συμβόλου είναι να γράψετε μια μάσκα bit και να τοποθετήσετε ένα σε μέρη όπου πρέπει να ανάβουν οι τελείες και μηδενικά όπου δεν πρέπει. Το διάγραμμα σύνδεσης που συζητήθηκε παραπάνω δεν είναι πάντα καλό, καθώς χρησιμοποιούνται τουλάχιστον έξι ψηφιακές έξοδοι στο Arduino.

Βήμα 4. Σχέδιο παράκαμψης

Ας εξερευνήσουμε μια επιλογή για να το ξεπεράσουμε και να τα βγάλουμε πέρα ​​με μόνο δύο. Χρειαζόμαστε μια πρόσθετη μονάδα μετατροπέα για LCD σε IIC/I2C. Πώς συγκολλάται στην οθόνη και συνδέεται με το Arduino μπορείτε να δείτε στις παρακάτω εικόνες.

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

Βήμα 4: Βιβλιοθήκη LiquidCrystal.h

Μπορείτε να κατεβάσετε τη βιβλιοθήκη LiquidCrystal.h από την ενότητα Βιβλιοθήκες του ιστότοπού μας σε αυτήν τη σελίδα ή από τον επίσημο πόρο arduino.cc. Μπορείτε όμως να κάνετε λήψη και από τους παρακάτω συνδέσμους:

Βήμα 5. Σκίτσο (κωδικός προγράμματος)

Αφού κατεβάσετε το αρχείο, αντικαταστήστε το φάκελο LiquidCrystal στο φάκελο βιβλιοθήκες του καταλόγου εγκατάστασης του Arduino.

Μπορείτε να δείτε ένα δείγμα σκίτσου στο:

Αρχείο -> Παραδείγματα -> LiquidCrystal -> HelloWorld_SPI

Ή, εάν έχετε ένα μενού στα Αγγλικά:

Αρχείο -> Παραδείγματα -> LiquidCrystal -> HelloWorld_SPI

Αυτό ολοκληρώνει το επόμενο μάθημά μας. Σας ευχόμαστε ποιοτικά έργα!

οθόνη LCD– συχνός επισκέπτης σε έργα Arduino. Αλλά σε πολύπλοκα κυκλώματα, μπορεί να έχουμε το πρόβλημα της έλλειψης θυρών Arduino λόγω της ανάγκης σύνδεσης μιας ασπίδας που έχει πολλές, πάρα πολλές ακίδες. Η λύση σε αυτή την κατάσταση θα μπορούσε να είναι I2C/IICένας προσαρμογέας που συνδέει μια σχεδόν τυπική ασπίδα Arduino 1602 σε πλακέτες Uno, Nano ή Mega χρησιμοποιώντας μόνο 4 ακίδες. Σε αυτό το άρθρο θα εξετάσουμε πώς μπορείτε να συνδέσετε μια οθόνη LCD με μια διεπαφή I2C, ποιες βιβλιοθήκες μπορείτε να χρησιμοποιήσετε, να γράψετε ένα σύντομο παράδειγμα σκίτσου και να εξετάσουμε κοινά σφάλματα.

Οθόνη υγρών κρυστάλλων LCD 1602είναι καλή επιλογήγια την παραγωγή συμβολοσειρών χαρακτήρων σε διάφορα έργα. Είναι φθηνό, υπάρχουν διάφορες τροποποιήσεις με διαφορετικά χρώματα οπίσθιου φωτισμού, μπορείτε εύκολα να κατεβάσετε έτοιμες βιβλιοθήκες για σκίτσα Arduino. Αλλά το κύριο μειονέκτημα αυτής της οθόνης είναι το γεγονός ότι η οθόνη διαθέτει 16 ψηφιακές ακίδες, από τις οποίες απαιτούνται τουλάχιστον 6. Επομένως, η χρήση αυτής της οθόνης LCD χωρίς i2c προσθέτει σοβαρούς περιορισμούς για τις πλακέτες Arduino Uno ή Nano. Εάν δεν υπάρχουν αρκετές επαφές, τότε θα πρέπει να αγοράσετε μια πλακέτα Arduino Mega ή να αποθηκεύσετε επαφές, μεταξύ άλλων συνδέοντας την οθόνη μέσω i2c.

Σύντομη περιγραφή των ακίδων LCD 1602

Ας ρίξουμε μια πιο προσεκτική ματιά στις ακίδες LCD1602:

Κάθε ένα από τα pin έχει το δικό του σκοπό:

  1. Επίγειο GND;
  2. Τροφοδοτικό 5 V;
  3. Ρύθμιση αντίθεσης οθόνης.
  4. Εντολή, δεδομένα;
  5. Γράψιμο και ανάγνωση δεδομένων.
  6. Επιτρέπω;

7-14. Γραμμές δεδομένων;

  1. Συν οπίσθιος φωτισμός?
  2. Μείον τον οπίσθιο φωτισμό.

Προδιαγραφές οθόνης:

  • Τύπος εμφάνισης χαρακτήρων, είναι δυνατή η φόρτωση συμβόλων.
  • Φώτα LED?
  • Ελεγκτής HD44780;
  • Τάση τροφοδοσίας 5V;
  • Μορφοποίηση 16x2 χαρακτήρων.
  • Εύρος θερμοκρασίας λειτουργίας από -20C έως +70C, περιοχή θερμοκρασίας αποθήκευσης από -30C έως +80C.
  • Γωνία θέασης 180 μοίρες.

Διάγραμμα σύνδεσης LCD στην πλακέτα Arduino χωρίς i2C

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

Λόγω του μεγάλου αριθμού συνδεδεμένων επαφών, ενδέχεται να μην υπάρχει αρκετός χώρος για τη σύνδεση των απαραίτητων στοιχείων. Η χρήση του I2C μειώνει τον αριθμό των καλωδίων σε 4 και τις κατειλημμένες ακίδες σε 2.

Πού να αγοράσετε οθόνες LCD και ασπίδες για το Arduino

Η οθόνη LCD 1602 (και έκδοση 2004) είναι αρκετά δημοφιλής, επομένως μπορείτε να τη βρείτε εύκολα τόσο σε εγχώρια ηλεκτρονικά καταστήματα όσο και σε ξένους ιστότοπους. Ακολουθούν ορισμένοι σύνδεσμοι προς τις πιο διαθέσιμες επιλογές:

Μονάδα μπλε οθόνης LCD1602+I2C, συμβατή με Arduino Μια απλή οθόνη LCD1602 (πράσινος οπίσθιος φωτισμός) φθηνότερη από 80 ρούβλια Μεγάλη οθόνη LCD2004 με I2C HD44780 για Arduino (μπλε και πράσινος οπίσθιος φωτισμός)
Οθόνη 1602 με προσαρμογέα IIC και μπλε οπίσθιο φωτισμό Μια άλλη έκδοση του LCD1602 με συγκολλημένη μονάδα I2C Μονάδα προσαρμογέα Port IIC/I2C/TWI/SPI για 1602 shield, συμβατή με Arduino
Οθόνη με οπίσθιο φωτισμό RGB! LCD 16×2 + πληκτρολόγιο + Buzzer Shield για Arduino Ασπίδα για Arduino με κουμπιά και οθόνη LCD1602 LCD 1602 Οθόνη LCD για 3D εκτυπωτή (Smart Controller για RAMPS 1.4, Text LCD 20×4), μονάδα ανάγνωσης καρτών SD και MicroSD

Περιγραφή του πρωτοκόλλου I2C

Πριν συζητήσουμε τη σύνδεση της οθόνης στο Arduino μέσω ενός προσαρμογέα i2c, ας μιλήσουμε εν συντομία για το ίδιο το πρωτόκολλο i2C.

I2C/IIC(Inter-Integrated Circuit) είναι ένα πρωτόκολλο που δημιουργήθηκε αρχικά για επικοινωνία ολοκληρωμένα κυκλώματαμέσα ηλεκτρονική συσκευή. Η ανάπτυξη ανήκει στη Philips. Το πρωτόκολλο i2c βασίζεται στη χρήση ενός διαύλου 8-bit, που απαιτείται για την επικοινωνία μπλοκ στα ηλεκτρονικά ελέγχου, και ενός συστήματος διευθύνσεων, χάρη στο οποίο μπορείτε να επικοινωνείτε μέσω των ίδιων καλωδίων με πολλές συσκευές. Απλώς μεταφέρουμε δεδομένα σε μια ή την άλλη συσκευή, προσθέτοντας το αναγνωριστικό του επιθυμητού στοιχείου στα πακέτα δεδομένων.

Το περισσότερο απλό κύκλωμαΤο I2C μπορεί να περιέχει μια κύρια συσκευή (τις περισσότερες φορές έναν μικροελεγκτή Arduino) και πολλές υποτελείς συσκευές (για παράδειγμα, μια οθόνη LCD). Κάθε συσκευή έχει μια διεύθυνση στην περιοχή από 7 έως 127. Δεν πρέπει να υπάρχουν δύο συσκευές με την ίδια διεύθυνση στο ίδιο κύκλωμα.

Η πλακέτα Arduino υποστηρίζει το i2c σε υλικό. Μπορείτε να χρησιμοποιήσετε τις ακίδες A4 και A5 για να συνδέσετε συσκευές χρησιμοποιώντας αυτό το πρωτόκολλο.

Υπάρχουν πολλά πλεονεκτήματα στη λειτουργία I2C:

  • Η λειτουργία απαιτεί μόνο 2 γραμμές - SDA (γραμμή δεδομένων) και SCL (γραμμή συγχρονισμού).
  • Σύνδεση μεγάλου αριθμού κορυφαίων συσκευών.
  • Μειωμένος χρόνος ανάπτυξης.
  • Απαιτείται μόνο ένας μικροελεγκτής για τον έλεγχο ολόκληρου του σετ συσκευών.
  • Ο πιθανός αριθμός μικροκυκλωμάτων που συνδέονται σε ένα δίαυλο περιορίζεται μόνο από τη μέγιστη χωρητικότητα.
  • Υψηλός βαθμός ασφάλειας δεδομένων χάρη στο ειδικό φίλτρο καταστολής υπερτάσεων που είναι ενσωματωμένο στα κυκλώματα.
  • Μια απλή διαδικασία για τη διάγνωση των αναδυόμενων αστοχιών και τον γρήγορο εντοπισμό σφαλμάτων.
  • Ο δίαυλος είναι ήδη ενσωματωμένος στο ίδιο το Arduino, επομένως δεν χρειάζεται να αναπτυχθεί μια πρόσθετη διεπαφή διαύλου.

Ελαττώματα:

  • Υπάρχει ένα όριο χωρητικότητας στη γραμμή - 400 pF.
  • Είναι δύσκολο να προγραμματίσετε έναν ελεγκτή I2C εάν υπάρχουν πολλές διαφορετικές συσκευές στο δίαυλο.
  • Με μεγάλο αριθμό συσκευών, καθίσταται δύσκολο να απομονωθεί ένα σφάλμα εάν μία από αυτές πέσει λανθασμένα.

Μονάδα i2c για LCD 1602 Arduino

Ο πιο γρήγορος και βολικός τρόπος για να χρησιμοποιήσετε μια οθόνη i2c στο Arduino είναι να αγοράσετε μια έτοιμη οθόνη με ενσωματωμένη υποστήριξη πρωτοκόλλου. Αλλά δεν υπάρχουν πολλές από αυτές τις οθόνες και δεν είναι φθηνές. Αλλά ένας τεράστιος αριθμός διαφορετικών τυπικών οθονών έχει ήδη παραχθεί. Επομένως, η πιο προσιτή και δημοφιλής επιλογή σήμερα είναι να αγοράσετε και να χρησιμοποιήσετε μια ξεχωριστή μονάδα I2C - έναν προσαρμογέα, που μοιάζει με αυτό:

Στη μία πλευρά της μονάδας βλέπουμε i2c pins - γείωση, τροφοδοσία και 2 για μεταφορά δεδομένων. Στον άλλο προσαρμογέα βλέπουμε εξωτερικούς συνδέσμους τροφοδοσίας. Και, φυσικά, η πλακέτα έχει πολλές ακίδες με τις οποίες η μονάδα είναι συγκολλημένη στις τυπικές ακίδες οθόνης.


Οι έξοδοι i2c χρησιμοποιούνται για σύνδεση στην πλακέτα Arduino. Εάν είναι απαραίτητο, συνδέουμε εξωτερική τροφοδοσία για οπίσθιο φωτισμό. Με το ενσωματωμένο τρίμερ μπορούμε να ορίσουμε προσαρμοσμένες τιμές αντίθεσης J

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

Σύνδεση της οθόνης LCD στο Arduino μέσω I2C

Για να συνδεθείτε, χρειάζεστε την ίδια την πλακέτα Arduino, μια οθόνη, ένα breadboard, καλώδια σύνδεσης και ένα ποτενσιόμετρο.

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


Μια οθόνη LCD με υποστήριξη i2c συνδέεται στην πλακέτα χρησιμοποιώντας τέσσερα καλώδια - δύο καλώδια για δεδομένα, δύο καλώδια για τροφοδοσία.

  • Ο ακροδέκτης GND συνδέεται στο GND στην πλακέτα.
  • Ο ακροδέκτης VCC είναι στα 5V.
  • Το SCL συνδέεται με τον ακροδέκτη A5.
  • Το SDA συνδέεται με τον ακροδέκτη Α.

Και είναι όλο! Χωρίς πλέγματα καλωδίων, τα οποία είναι πολύ εύκολο να μπλέξουν. Ταυτόχρονα, μπορούμε απλά να εμπιστευτούμε όλη την πολυπλοκότητα της υλοποίησης του πρωτοκόλλου i2C στις βιβλιοθήκες.

Βιβλιοθήκες για εργασία με οθόνη LCD i2c

Για να αλληλεπιδράσετε με το Arduino και το LCD 1602 μέσω του διαύλου I2C, θα χρειαστείτε τουλάχιστον δύο βιβλιοθήκες:

  • Η βιβλιοθήκη Wire.h για εργασία με το I2C περιλαμβάνεται ήδη στο πρότυπο Το πρόγραμμα arduino IDE.
  • Η βιβλιοθήκη LiquidCrystal_I2C.h, η οποία περιλαμβάνει μια μεγάλη ποικιλία εντολών για τον έλεγχο της οθόνης μέσω του διαύλου I2C και σας επιτρέπει να κάνετε το σκίτσο πιο απλό και πιο σύντομο. Πρέπει να εγκαταστήσετε επιπλέον τη βιβλιοθήκη Αφού συνδέσετε την οθόνη, πρέπει να εγκαταστήσετε επιπλέον τη βιβλιοθήκη LiquidCrystal_I2C.h

Αφού συνδέσουμε όλες τις απαραίτητες βιβλιοθήκες στο σκίτσο, δημιουργούμε ένα αντικείμενο και μπορούμε να χρησιμοποιήσουμε όλες τις λειτουργίες του. Για δοκιμή, ας φορτώσουμε το ακόλουθο τυπικό παράδειγμα σκίτσου.

#περιλαμβάνω #περιλαμβάνω // Συμπεριλαμβανομένης της βιβλιοθήκης //#include // Σύνδεση εναλλακτικής βιβλιοθήκης LiquidCrystal_I2C lcd(0x27,16,2); // Καθορίστε τη διεύθυνση I2C (η πιο κοινή τιμή), καθώς και τις παραμέτρους οθόνης (στην περίπτωση της LCD 1602 - 2 γραμμές των 16 χαρακτήρων η καθεμία //LiquidCrystal_PCF8574 lcd(0x27); // Επιλογή για τη ρύθμιση κενού βιβλιοθήκης PCF8574( ) ( lcd.init (); // Εκκίνηση της οθόνης lcd.backlight(); // Σύνδεση του οπίσθιου φωτισμού lcd.setCursor(0,0); // Ρύθμιση του δρομέα στην αρχή της πρώτης γραμμής lcd.print(" Γεια σας"); // Πληκτρολογήστε κείμενο στην πρώτη γραμμή lcd.setCursor(0,1); // Ρυθμίστε τον κέρσορα στην αρχή της δεύτερης γραμμής lcd.print("ArduinoMaster"); // Πληκτρολογήστε κείμενο στη δεύτερη γραμμή ) void loop() ( )

Περιγραφή λειτουργιών και μεθόδων της βιβλιοθήκης LiquidCrystal_I2C:

  • home() και clear() - η πρώτη λειτουργία σάς επιτρέπει να επιστρέψετε τον κέρσορα στην αρχή της οθόνης, η δεύτερη κάνει το ίδιο, αλλά ταυτόχρονα διαγράφει ό,τι υπήρχε στην οθόνη πριν.
  • write(ch) – σας επιτρέπει να εκτυπώσετε έναν μόνο χαρακτήρα ch στην οθόνη.
  • cursor() και noCursor() – εμφανίζει/αποκρύπτει τον κέρσορα στην οθόνη.
  • blink() και noBlink() – ο δρομέας αναβοσβήνει/δεν αναβοσβήνει (αν η εμφάνισή του ήταν ενεργοποιημένη πριν).
  • display() και noDisplay() – σας επιτρέπει να συνδέσετε/απενεργοποιήσετε την οθόνη.
  • scrollDisplayLeft() και scrollDisplayRight() – κάνει κύλιση στην οθόνη κατά έναν χαρακτήρα αριστερά/δεξιά.
  • autoscroll() και noAutoscroll() – σας επιτρέπει να ενεργοποιήσετε/απενεργοποιήσετε τη λειτουργία αυτόματης κύλισης. Σε αυτήν τη λειτουργία, κάθε νέος χαρακτήρας γράφεται στο ίδιο σημείο, μετατοπίζοντας ό,τι γράφτηκε προηγουμένως στην οθόνη.
  • leftToRight() και rightToLeft() – Ρύθμιση της κατεύθυνσης του εμφανιζόμενου κειμένου – από αριστερά προς τα δεξιά ή από δεξιά προς τα αριστερά.
  • createChar(ch, bitmap) – δημιουργεί έναν χαρακτήρα με κωδικό ch (0 – 7), χρησιμοποιώντας μια σειρά από bitmap bitmap για τη δημιουργία ασπρόμαυρων σημείων.

Εναλλακτική βιβλιοθήκη για εργασία με οθόνη i2c

Σε ορισμένες περιπτώσεις, ενδέχεται να προκύψουν σφάλματα κατά τη χρήση της καθορισμένης βιβλιοθήκης με συσκευές εξοπλισμένες με ελεγκτές PCF8574. Σε αυτήν την περίπτωση, η βιβλιοθήκη LiquidCrystal_PCF8574.h μπορεί να προταθεί ως εναλλακτική. Επεκτείνει το LiquidCrystal_I2C, επομένως δεν θα υπάρχουν προβλήματα με τη χρήση του.

Προβλήματα με τη σύνδεση της οθόνης i2c lcd

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

Αρχικά, μπορείτε να αυξήσετε ή να μειώσετε την αντίθεση της οθόνης. Συχνά οι χαρακτήρες απλώς δεν είναι ορατοί λόγω της λειτουργίας αντίθεσης και οπίσθιου φωτισμού.

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

Ένας άλλος συνηθισμένος λόγος για τον οποίο λείπει κείμενο στην οθόνη μπορεί να είναι μια λανθασμένη διεύθυνση i2c. Πρώτα δοκιμάστε να αλλάξετε τη διεύθυνση της συσκευής στο σκίτσο από 0x27 0x20 ή σε 0x3F. Διαφορετικοί κατασκευαστές μπορεί να έχουν προγραμματισμένες διαφορετικές προεπιλεγμένες διευθύνσεις. Εάν αυτό δεν βοηθήσει, μπορείτε να εκτελέσετε το σκίτσο του σαρωτή i2c, το οποίο σαρώνει όλες τις συνδεδεμένες συσκευές και προσδιορίζει τη διεύθυνσή τους χρησιμοποιώντας ωμή βία. Ένα παράδειγμα σκίτσου σαρωτή i2c.

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

συμπέρασμα

Σε αυτό το άρθρο, εξετάσαμε τα κύρια ζητήματα της χρήσης μιας οθόνης LCD σε πολύπλοκα έργα Arduino, όταν πρέπει να αποθηκεύσουμε δωρεάν καρφίτσες στην πλακέτα. Ένας απλός και φθηνός προσαρμογέας i2c θα σας επιτρέψει να συνδέσετε μια οθόνη LCD 1602, καταλαμβάνοντας μόνο 2 αναλογικές ακίδες. Σε πολλές περιπτώσεις αυτό μπορεί να είναι πολύ σημαντικό. Η τιμή για ευκολία είναι η ανάγκη χρήσης μιας πρόσθετης μονάδας - μετατροπέα και βιβλιοθήκη. Κατά τη γνώμη μας, αυτό δεν είναι υψηλό τίμημα για ευκολία και συνιστούμε ανεπιφύλακτα τη χρήση αυτής της δυνατότητας σε έργα.

Τι είναι αναπόσπαστο μέρος ενός μεγάλου αριθμού ηλεκτρονικών συσκευών; Φυσικά, μέσα ένδειξης και γραφική έξοδος δεδομένων. Είναι πάντα πιο βολικό και ευχάριστο για τον χρήστη όταν το αποτέλεσμα του «έξυπνου κουτιού» μπορεί να δει οπτικά. Επομένως, σήμερα θα συνδέσουμε μια οθόνη στο STM32 για την εμφάνιση κειμένου και αριθμών. Ο ήρωας των πειραμάτων μας θα είναι μια αρκετά δημοφιλής οθόνη από το Winstar. Παρεμπιπτόντως, μια σημαντική διευκρίνιση εμφανίστηκε στα σχόλια ότι η μεθοδολογία είναι βασικά η ίδια για όλες τις οθόνες με βάση HD44780.Ευχαριστώ τον JekaKey για τη σημαντική προσθήκη)

Αρχικά, η οθόνη πρέπει να συνδεθεί στον ελεγκτή. Κατεβάστε το φύλλο δεδομένων και αναζητήστε το pinout WH1602. Κοιτάξτε εδώ:

Οπως ξέρεις, οθόνη WH1602έχει 16 καρφίτσες. Ας δούμε το καθένα ξεχωριστά...

Οι ακίδες Vss, Vdd και K πρέπει να συνδεθούν στη γείωση και στην τροφοδοσία, δηλαδή, ακριβώς όπως υποδεικνύεται στον πίνακα, δεν υπάρχουν εκπλήξεις και δεν υπάρχει τίποτα για συζήτηση)

Η ακίδα νούμερο 3 χρησιμοποιείται για τη ρύθμιση της αντίθεσης - αν εφαρμόσουμε +5V εκεί, δεν θα δούμε απολύτως τίποτα και αν βραχυκυκλώσουμε την ακίδα στη γείωση, θα θαυμάσουμε δύο σειρές μαύρων τετραγώνων 😉 Φυσικά, αυτό δεν μας ταιριάζει , οπότε πρέπει να κρεμάσουμε εκεί ένα ποτενσιόμετρο (αντίσταση) με μεταβλητή αντίσταση) για να ρυθμίσουμε την αντίθεση. Η καλύτερη ορατότητα των χαρακτήρων παρέχεται από μια τάση 0,5-0,7 V σε αυτήν την ακίδα οθόνης.

Ο ακροδέκτης RS είναι ήδη ένας ακροδέκτης που εμείς οι ίδιοι θα ελέγξουμε χρησιμοποιώντας έναν μικροελεγκτή. Ένα χαμηλό επίπεδο τάσης (0) σε αυτόν τον ακροδέκτη σημαίνει ότι θα ακολουθήσει τώρα μια εντολή, ένα υψηλό επίπεδο (1) σημαίνει ότι θα υπάρχουν πλέον δεδομένα που θα εγγραφούν στη μνήμη της οθόνης.

Καρφίτσα R/W - είναι σαφές εδώ, είτε διαβάζουμε τα δεδομένα (εμφάνιση σημαία απασχολημένου, για παράδειγμα), σε αυτήν την περίπτωση υπάρχει 1 σε αυτήν την καρφίτσα ή γράφουμε την εντολή/δεδομένα στην οθόνη, τότε έχουμε 0 εδώ.

DB7 – DB0 – δίαυλος δεδομένων, και αυτό τα λέει όλα)

Το pin E είναι το λεγόμενο σήμα Enable. Αυτός είναι που χρειάζεται. Για να δουλέψουμε με την οθόνη - να καταγράψουμε δεδομένα ή να εκδώσουμε μια εντολή - πρέπει να εκδώσουμε έναν θετικό παλμό σε αυτόν τον ακροδέκτη. Δηλαδή, η διαδικασία θα μοιάζει με αυτό:

  1. Στις ακίδες RS, R/W, DB7 - DB0 - τα απαραίτητα σήματα που αντιστοιχούν στην εντολή μας.
  2. Παρέχουμε ένα στην καρφίτσα Ε.
  3. Zhdems (σύμφωνα με το φύλλο δεδομένων – τουλάχιστον 150 ns)
  4. Εφαρμόζουμε ένα χαμηλό επίπεδο (0) στο pin E.

Πρέπει να βάλετε 4,2 V στο πόδι A/Vee για να ενεργοποιήσετε τον οπίσθιο φωτισμό της οθόνης.

Έτσι γίνεται η επικοινωνία με την οθόνη WH1602.

Έχουμε καταλάβει τη σύνδεση του WH1602, αλλά προτού προχωρήσουμε στο παράδειγμα, ας δούμε ποιες εντολές κατανοεί γενικά η οθόνη μας. Για να το κάνουμε αυτό, πηγαίνουμε στο φύλλο δεδομένων και βρίσκουμε έναν ενδιαφέροντα πίνακα:

Όλες οι εντολές και τα σήματα που πρέπει να υπάρχουν στις αντίστοιχες ακίδες του WH1602 για κάθε συγκεκριμένη εντολή περιγράφονται εδώ. Για παράδειγμα, θέλουμε να καθαρίσουμε την οθόνη, κοιτάμε τον πίνακα και εδώ είναι η εντολή που χρειαζόμαστε! Καθαρή οθόνη!

Εφαρμόζουμε μηδενικά στις ακίδες RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 και ένα στην καρφίτσα DB0. Τελείωσε! Τι ακολουθεί; Αυτό είναι σωστό, ένα στην ακίδα Ε, μετά περιμένετε λίγο και χαμηλώστε ξανά το E στο μηδέν. Αυτό είναι όλο, η οθόνη καθαρίζεται 😉 Λίγο πριν εκτελέσετε την επόμενη εντολή πρέπει να κάνετε παύση, που υποδεικνύεται στο φύλλο δεδομένων για κάθε εντολή. Θα ήταν πιο αποτελεσματικό να ψηφίσετε τη σημαία απασχολημένου· μόλις επαναφερθεί στο 0, μπορείτε να συνεχίσετε να εργάζεστε. Υπάρχει επίσης μια ειδική εντολή για την ανάγνωση αυτής της σημαίας, οπότε όλα είναι ξεκάθαρα με αυτό) Ας προχωρήσουμε...

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

Έχουμε στη διάθεσή μας 2 αρχεία, τα MT_WH1602.c και MT_WH1602.h. Σχίζουμε το δεύτερο, εδώ πρέπει να επιλέξουμε τις ακίδες και τον ελεγκτή που χρησιμοποιείται.

Παρεμπιπτόντως, η οθόνη μου συνδέεται ως εξής:

RS-PC2
R/W – PB10
E–PB14
DB7–PD2
DB6–PC12
DB5–PA8
DB4–PA10
DB3–PA15
DB2–PD11
DB1–PA3
DB0–PA5

Ανοίξτε το αρχείο MT_WH1602.h:

#define PLATFORM (STM32F10x)

Στη συνέχεια, επιλέξτε τις ακίδες του μικροελεγκτή στις οποίες είναι συνδεδεμένη η οθόνη. Απλά πρώτα ας ορίσουμε ποιες θύρες χρησιμοποιούμε. Όταν συνδέομαι, χρησιμοποιώ GPIOA, GPIOB, GPIOC και GPIOD, γράφουμε:

Ομοίως για άλλα πόδια μικροελεγκτή.

Τελειώσαμε με τη ρύθμιση, ας συνεχίσουμε) Για να καλέσετε τις εντολές που δίνονται στην αρχή του άρθρου, το αρχείο MT_WH1602.c περιέχει τις ακόλουθες λειτουργίες (ονομάζονται από τα ονόματα των εντολών, οπότε νομίζω ότι όλα είναι ξεκάθαρα) :

void MT_WH1602_ClearDisplay(void ) ; void MT_WH1602_ReturnHome(void ) ; void MT_WH1602_EntryModeSet (διεύθυνση ID bool, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; void MT_WH1602_SetCGRAMaddress (διεύθυνση uint8_t) ; void MT_WH1602_SetDDRAMaddress (διεύθυνση uint8_t) ; bool MT_WH1602_ReadBusy(void ) ; void MT_WH1602_WriteData(uint8_t data) ;

Για ορισμένες εντολές πρέπει να περάσουμε παραμέτρους στη συνάρτηση, για παράδειγμα:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Ας δούμε τον πίνακα εντολών:

Βλέπουμε ότι η εντολή Display ON/OFF όχι μόνο ενεργοποιεί/απενεργοποιεί την οθόνη, αλλά επίσης ενεργοποιεί/απενεργοποιεί τον δρομέα και τον κέρσορα που αναβοσβήνουν. Στο φύλλο δεδομένων, αυτά τα bit εντολών ορίζονται ως D, C και B και τα μεταβιβάζουμε ως παραμέτρους στη συνάρτηση. Εάν πρέπει να ενεργοποιήσουμε την οθόνη και τον κέρσορα, αλλά να απενεργοποιήσουμε το δρομέα που αναβοσβήνει, καλούμε την εντολή ως εξής:

MT_WH1602_DisplayOnOff(1, 1, 0);

Σε γενικές γραμμές, όλα είναι απλά 😉

Με λίγα λόγια, δημιουργούμε νέο έργο, προσθέστε μια βιβλιοθήκη για εργασία με την οθόνη WH1602, δημιουργήστε ένα κενό αρχείο .c και ξεκινήστε να το γεμίζετε με κώδικα:

// Συμπεριλάβετε το αρχείο της βιβλιοθήκης#include "MT_WH1602.h" /*******************************************************************/ int main(void) ( // Καλέστε τη συνάρτηση αρχικοποίησης, δεν μπορούμε χωρίς αυτήν =)() ; // Τώρα πρέπει να κάνουμε την αρχική διαμόρφωση οθόνης // Η τεκμηρίωση και το Διαδίκτυο συνιστούν να το κάνετε αυτό ;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Delay(1000) ; MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Delay(1000) ; MT_WH1602_ClearDisplay() ; MT_WH1602_Delay(2000) ; // Για παράδειγμα, πήρα τις πρώτες τιμές καθυστέρησης που μου ήρθαν στο μυαλό) // Γενικά, πρέπει να ελέγξετε τη σημαία κατειλημμένης οθόνης // Ας εμφανίσουμε τώρα κάτι, όπως το όνομα του ιστότοπού μας MT_WH1602_WriteData(0x6D) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Delay(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Delay(100) ; ενώ (1 ) ( __NOP() ; ) ) /*******************************************************************/

Έγινε, ας ελέγξουμε)


Όπως μπορείτε να δείτε, όλα λειτουργούν σωστά)

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

Έτσι, για να προσδιορίσετε ποια τιμή θα γράψετε στη μνήμη της οθόνης, πρέπει να πάρετε τους αριθμούς που είναι γραμμένοι στην κορυφή και αριστερά σε αυτόν τον πίνακα για ένα συγκεκριμένο σύμβολο. Για παράδειγμα, το σύμβολο "A". Ας δούμε - αυτό το σύμβολο αντιστοιχεί στη στήλη 0100 (0x4) και τη γραμμή 0001 (0x1). Αποδεικνύεται ότι για να εμφανίσετε το σύμβολο "A" πρέπει να γράψετε την τιμή 0x41 στην οθόνη.

Αυτό είναι τώρα =) Τακτοποιήσαμε τη σύνδεση και τη λειτουργία της οθόνης WH1602, οπότε τα λέμε σύντομα!

ΥΣΤΕΡΟΓΡΑΦΟ. Όταν εργάζομαι με τη βιβλιοθήκη, δεν δοκίμασα τη λειτουργία ανάγνωσης της σημαίας απασχολημένου, οπότε αν ξαφνικά κάτι δεν λειτουργεί όπως θα έπρεπε, γράψτε, θα το καταλάβουμε)

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

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

Στο παράδειγμα, θα δούμε την οθόνη Winstar wh1602l1, μια από τις πιο κοινές οθόνες στον ελεγκτή hd44780. Επιπλέον, μπορείτε να συνδέσετε LCD 2004 και άλλες παρόμοιες.
Τα δύο πρώτα ψηφία υποδεικνύουν τον αριθμό των χαρακτήρων ανά γραμμή και το δεύτερο τον αριθμό των γραμμών, επομένως η επιλεγμένη οθόνη έχει 2 γραμμές των 16 χαρακτήρων.
Αυτή η μέθοδος σύνδεσης περιλαμβάνει την κατάληψη τουλάχιστον 6 θυρών του μικροελεγκτή Arduino. Εάν είναι απαραίτητο, μπορείτε να συνδέσετε την οθόνη κειμένου 1602 μέσω της διεπαφής I2C (2 θύρες).

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

Οι ακίδες 15 και 16 στην οθόνη είναι υπεύθυνες για τον οπίσθιο φωτισμό· μπορεί να απενεργοποιηθεί ή να ρυθμιστεί αυτόματα η φωτεινότητα όταν συνδέετε μια φωτοαντίσταση στο Arduino ως αισθητήρα φωτεινότητας.

Στο παράδειγμά μας, θα διαβάσουμε δεδομένα από τη σειριακή θύρα και θα τα εμφανίσουμε στην οθόνη:

#περιλαμβάνω // Συνδέστε τη βιβλιοθήκη για εργασία με οθόνες χαρακτήρων LiquidCrystal lcd(13, 11, 5, 4, 3, 2); // (RS, E, D4, D5, D6, D7) συνδέστε τις εξόδους της οθόνης σύμφωνα με τη σειρά, R/W – GND, αφού θα γράψουμε δεδομένα στην οθόνη και δεν θα διαβάσουμε void setup() ( lcd.begin( 16, 2); // Initialize LCD 1602 // lcd.begin(20, 4); // Initialize LCD 2004 Serial.begin(9600); // Εκκίνηση της σειριακής θύρας ) void loop() ( if (Serial.available ()) // Εάν τα δεδομένα προέρχονται από τη θύρα, τότε... ( καθυστέρηση(100); lcd.clear(); // Καθαρίστε πλήρως την οθόνη ενώ (Serial.available() > 0) // Εάν τα δεδομένα προέρχονται από η θύρα είναι μεγαλύτερη από 0, τότε ... ( lcd.write(Serial.read()); // Διαβάστε τις τιμές από τη σειριακή θύρα και εμφανίστε τις στην οθόνη ) )

Μπορείτε να περιπλέκετε τον κώδικα και να εξάγετε το ρολόι πραγματικού χρόνου DS1307 στο Arduino στην LCD1602 σας.

Τώρα ας ρίξουμε μια πιο προσεκτική ματιά σε όλες τις λειτουργίες της βιβλιοθήκης LiquidCrystal:

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

lcd.print();- το απλούστερο και πιο συχνά χρησιμοποιούμενο, που χρησιμοποιείται για την εμφάνιση πληροφοριών.

οθόνη υγρού κρυστάλλου. Σαφή(); - χρησιμοποιείται για τον καθαρισμό της οθόνης.

lcd.setCursor(Χ, y); - τοποθετεί τον κέρσορα σε μια συγκεκριμένη θέση.

X – αλλαγή θέσης στη γραμμή

Y – αλλαγή γραμμής

Για παράδειγμα, lcd.setCursor(0, 0); αυτό είναι το επάνω αριστερό κελί.

lcd.home(); -τοποθετεί τον κέρσορα στη θέση 0, 0

lcd.home(); = lcd.setCursor(0, 0);

οθόνη υγρού κρυστάλλου. scrollDisplayLeft(); - μετατόπιση αριστερά

οθόνη υγρού κρυστάλλου. scrollDisplayRight(); - μετατόπιση δεξιά

LCD.createChar(Ονομα, πίνακας); - δημιουργώντας το δικό σας σημάδι.

Για παράδειγμα, το σύμβολο βαθμού μοιάζει με αυτό:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000);




Μπλουζα