Για να δημιουργηθεί μια καλή επικοινωνία μεταξύ του ανθρώπινου κόσμου και του κόσμου των μηχανών, οι μονάδες οθόνης παίζουν σημαντικό ρόλο. Και έτσι είναι ένα σημαντικό μέρος των ενσωματωμένων συστημάτων. Οι μονάδες οθόνης - μεγάλες ή μικρές, λειτουργούν με την ίδια βασική αρχή. Εκτός από πολύπλοκες μονάδες οθόνης, όπως γραφικές οθόνες και τρισδιάστατες αναμεταδόσεις, πρέπει κανείς να γνωρίζει ότι λειτουργεί με απλές οθόνες όπως μονάδες 16x1 και 16x2. Η μονάδα οθόνης 16x1 θα έχει 16 χαρακτήρες και είναι σε μία γραμμή. Η 16x2 LCD θα έχει 32 χαρακτήρες συνολικά 16in 1 ης γραμμής και ένα άλλο 16 σε 2 ndγραμμή. Εδώ πρέπει να καταλάβουμε ότι σε κάθε χαρακτήρα υπάρχουν 5x10 = 50 pixel, οπότε για να εμφανιστεί ένας χαρακτήρας και τα 50 pixel πρέπει να λειτουργούν μαζί. Αλλά δεν χρειάζεται να ανησυχούμε για αυτό, επειδή υπάρχει ένας άλλος ελεγκτής (HD44780) στη μονάδα οθόνης που κάνει τη δουλειά του ελέγχου των pixel. (μπορείτε να το δείτε στη μονάδα LCD, είναι το μαύρο μάτι στο πίσω μέρος).
Απαιτούμενα στοιχεία
Σκεύη, εξαρτήματα:
Μικροελεγκτής ATmega32
Τροφοδοσία (5v)
Προγραμματιστής AVR-ISP
JHD_162ALCD (16x2 LCD)
Πυκνωτής 100uF.
Λογισμικό:
Atmel studio 6.1
Progisp ή flash μαγεία
Διάγραμμα κυκλώματος και επεξήγηση
Όπως φαίνεται στη διασύνδεση LCD με κύκλωμα ATmega32, μπορείτε να δείτε ότι το PORTA του ATMEGA32 συνδέεται με τη θύρα δεδομένων LCD. Εδώ πρέπει να θυμόμαστε να απενεργοποιήσουμε την επικοινωνία JTAG στο PORTC του ATMEGA αλλάζοντας τα bytes ασφάλειας, εάν κάποιος θέλει να χρησιμοποιήσει το PORTC ως κανονική θύρα επικοινωνίας. Σε LCD 16x2 υπάρχουν 16 ακίδες συνολικά, εάν υπάρχει οπίσθιο φως, εάν δεν υπάρχει οπίσθιος φωτισμός, θα υπάρχουν 14 ακίδες. Κάποιος μπορεί να τροφοδοτήσει ή να αφήσει τις πίσω ακίδες. Τώρα στις 14 ακίδες υπάρχουν 8 καρφίτσες δεδομένων (7-14 ή D0-D7), 2 καρφίτσες τροφοδοσίας (1 & 2 ή VSS & VDD ή gnd & + 5v), 3ος ακροδέκτης για έλεγχο αντίθεσης (VEE-ελέγχει πόσο παχύ πρέπει να είναι οι χαρακτήρες φαίνεται), 3 ακίδες ελέγχου (RS & RW & E)
Στο παραπάνω κύκλωμα για διασύνδεση LCD 16x2 με μικροελεγκτή AVR, μπορείτε να παρατηρήσετε ότι έχω πάρει μόνο δύο ακίδες ελέγχου. Αυτό δίνει την ευελιξία της καλύτερης κατανόησης. Το bit αντίθεσης και το READ / WRITE δεν χρησιμοποιούνται συχνά, ώστε να μπορούν να βραχυκυκλωθούν στη γείωση. Αυτό θέτει την οθόνη LCD σε υψηλότερη αντίθεση και λειτουργία ανάγνωσης. Πρέπει απλώς να ελέγξουμε ENABLE και RS καρφίτσες για να στείλουμε ανάλογα χαρακτήρες και δεδομένα.
Οι συνδέσεις μεταξύ μικροελεγκτή ATmega32 και LCD 16x2 δίνονται παρακάτω:
PIN1 ή VSS - γείωση
PIN2 ή VDD ή VCC - Ισχύς + 5v
PIN3 ή VEE - γείωση (δίνει τη μέγιστη αντίθεση καλύτερα για έναν αρχάριο)
PIN4 ή RS (Επιλογή μητρώου) - PD6 του μικροελεγκτή
PIN5 ή RW (Ανάγνωση / Εγγραφή) - γείωση (θέτει την οθόνη LCD σε λειτουργία ανάγνωσης διευκολύνει την επικοινωνία για τον χρήστη)
PIN6 ή E (Ενεργοποίηση) - PD5 του μικροελεγκτή
PIN7 ή D0 - PA0 του μικροελεγκτή
PIN8 ή D1 - PA1
PIN9 ή D2 - PA2
PIN10 ή D3 - PA3
PIN11 ή D4 - PA4
PIN12 ή D5 - PA5
PIN13 ή D6 - PA6
PIN14 ή D7 - PA7
Στο κύκλωμα μπορείτε να δείτε ότι χρησιμοποιήσαμε την επικοινωνία 8bit (D0-D7), ωστόσο αυτό δεν είναι υποχρεωτικό και μπορούμε επίσης να χρησιμοποιήσουμε την επικοινωνία 4bit (D4-D7), αλλά με το πρόγραμμα επικοινωνίας 4 bit γίνεται λίγο περίπλοκο για αρχάριους, έτσι απλά πήγαμε με Επικοινωνία 8 bit.
Έτσι από απλή παρατήρηση από τον παραπάνω πίνακα συνδέουμε 10 ακίδες LCD με ελεγκτή, όπου 8 ακίδες είναι καρφίτσες δεδομένων και 2 ακίδες για έλεγχο.
Εργαζόμενος
Τώρα για να ξεκινήσετε πρέπει να γνωρίζετε τις λειτουργίες των 10 ακίδων LCD 16x2 (8 καρφίτσες δεδομένων + 2 ακίδες ελέγχου). Οι 8 ακίδες δεδομένων προορίζονται για αποστολή δεδομένων ή εντολών σε LCD. Σε δύο ακίδες ελέγχου:
1. Ο ακροδέκτης RS (επιλογή επιλογής) είναι να πείτε στην οθόνη LCD εάν στέλνουμε δεδομένα σε αυτήν ή εντολή σε αυτήν.
Για παράδειγμα:
Στον παραπάνω πίνακα ένα για μια τιμή θύρας δεδομένων (D7-D0) "0b0010 1000 ή 0x28" λέει στην οθόνη LCD να εμφανίσει το σύμβολο "(". Στον πίνακα δύο η ίδια τιμή 0x28 λέει στην οθόνη LCD "είστε LCD 5x7 κουκκίδων και συμπεριφέρεστε σαν ένα », οπότε για την ίδια αξία ο χρήστης μπορεί να ορίσει δύο πράγματα, τώρα αυτή η κατάσταση εξουδετερώνεται από τον ακροδέκτη επιλογής εγγραφής, εάν ο ακροδέκτης RS έχει οριστεί χαμηλός τότε η LCD κατανοεί ότι στέλνουμε εντολή. Εάν θέσουμε τον ακροδέκτη RS σε υψηλό τότε Η LCD κατανοεί ότι στέλνουμε τα δεδομένα. Και έτσι και στις δύο περιπτώσεις η LCD σέβεται την τιμή της θύρας δεδομένων σύμφωνα με την τιμή της ακίδας RS.
2. Ο ακροδέκτης E (Ενεργοποίηση) είναι απλώς να πει «LED ένδειξης ισχύος ενός υπολογιστή», αυτός ο ακροδέκτης έχει ρυθμιστεί στο υψηλό για να πει στην LCD «να λαμβάνει τη θύρα δεδομένων φόρμας δεδομένων του ελεγκτή». Μόλις αυτή η καρφίτσα πέσει χαμηλά μετά την υψηλή, η οθόνη LCD επεξεργάζεται τα ληφθέντα δεδομένα και εμφανίζει το αντίστοιχο αποτέλεσμα. Επομένως, αυτός ο πείρος έχει οριστεί σε υψηλό πριν από την αποστολή δεδομένων και τραβιέται προς τα κάτω μετά την αποστολή δεδομένων.
Τώρα μετά τη σύνδεση του υλικού, ξεκινήστε το Atmel studio και ξεκινήστε ένα νέο έργο για τη σύνταξη του προγράμματος, ανοίξτε τώρα την οθόνη προγραμματισμού και ξεκινήστε το πρόγραμμα wring. Το πρόγραμμα πρέπει να ακολουθήσει όπως φαίνεται παρακάτω.
Αρχικά λέμε στον ελεγκτή ποιες θύρες χρησιμοποιούμε για δεδομένα και έλεγχο της οθόνης LCD. Στη συνέχεια, πείτε στον ελεγκτή πότε να στείλετε δεδομένα ή μια εντολή ανάλογα παίζοντας με καρφίτσες RS και E.
Σύντομη επεξήγηση των εννοιών που χρησιμοποιούνται στο πρόγραμμα:
1. Το E έχει υψηλή τιμή (λέει στην LCD να λαμβάνει δεδομένα) και το RS είναι χαμηλό (λέγοντας στην LCD ότι δίνουμε εντολή)
2. Δίνοντας τιμή 0x01 στη θύρα δεδομένων ως εντολή για εκκαθάριση οθόνης
3. Το E έχει υψηλή τιμή (λέει στην LCD να λαμβάνει δεδομένα) και το RS έχει υψηλή τιμή (λέγοντας στην LCD ότι δίνουμε δεδομένα)
4. Λήψη μιας σειράς χαρακτήρων που στέλνουν κάθε χαρακτήρα σε μια σειρά μία προς μία.
5. Το E είναι χαμηλό (λέγοντας στην LCD ότι έχουμε τελειώσει την αποστολή δεδομένων)
6. Μετά την τελευταία εντολή, η οθόνη LCD τερματίζει την επικοινωνία και επεξεργάζεται τα δεδομένα και εμφανίζει τη σειρά χαρακτήρων στην οθόνη.
Σε αυτό το σενάριο πρόκειται να στείλουμε τους χαρακτήρες ο ένας μετά τον άλλο. Οι χαρακτήρες δίνονται στην οθόνη LCD με κωδικούς ASCII (αμερικανικός τυποποιημένος κώδικας για ανταλλαγή πληροφοριών).
Ο πίνακας των κωδικών ASCII φαίνεται παραπάνω. Εδώ για να δείξει η LCD έναν χαρακτήρα "@" πρέπει να στείλουμε έναν δεκαεξαδικό κωδικό "64". Εάν στείλουμε "0x62" στην οθόνη LCD θα εμφανιστεί το σύμβολο ">". Έτσι θα στείλουμε τους κατάλληλους κωδικούς στην οθόνη LCD για να εμφανίσουμε ένα όνομα.
Ο τρόπος επικοινωνίας μεταξύ μικροελεγκτή LCD και ATmega32 AVR εξηγείται καλύτερα στο βήμα προς βήμα του κώδικα C παρακάτω,