ΕΡΓΑΣΤΗΡΙΟ 6 ΟΔΗΓΗΣΗ ΑΠΕΙΚΟΝΙΣΕΩΝ SSD ΚΑΙ LCD Σκοπός του εργαστηρίου: Οι φοιτητές εξοικειώνονται με βασικές απεικονίσεις αριθμητικών ψηφίων και χαρακτήρων, καθώς και με τη βασική οδήγηση τέτοιων απεικονίσεων, μέσω μικροελεγκτή. Εστιάζουμε στις απεικονίσεις επτά τομέων κοινής ανόδου και κοινής καθόδου, καθώς και σε οθόνες υγρών κρυστάλλων LCD. Γίνεται χρήση της βιβλιοθήκης LiquidCrystal.h 6.1 Θεωρητικό μέρος 6.1.1 Οδήγηση απεικονίσεων επτά τομέων (SSD) Οι απεικονίσεις επτά τομέων (Seven-Segment Displays) αποτελούν τον πιο διαδεδομένο και εύκολο τρόπο απεικόνισης δεκαδικών ψηφίων, προκειμένου να προβάλλουμε αριθμητικά αποτελέσματα σε δεκαδική μορφή. Αποτελούνται από τομείς LED κατάλληλα διευθετημένους στην επιφάνεια της απεικόνισης, σε σχήμα "οκτώ". Διακρίνονται σε απεικονίσεις κοινής ανόδου και κοινής καθόδου. Στις απεικονίσεις κοινής ανόδου, η άνοδος των LED είναι κοινή και οδηγείται στα 5 V. Το κύκλωμα οδήγησης της απεικόνισης οδηγεί τις καθόδους, οπότε το αντίστοιχο LED ανάβει με λογικό 0 στην κάθοδο. Αντίθετα, στις απεικονίσεις κοινής καθόδου, η κοινή κάθοδος οδηγείται στη γη (GND) και τα LEDs ανάβουν με λογικό 1, καθώς οδηγούμε τις ανόδους τους. Οι επτά τομείς χαρακτηρίζονται με γράμματα a, b, c, d, e, f, g, όπου g είναι το μεσαίο τμήμα. Ας σημειωθεί ότι στο κύκλωμα οδήγησης βάζουμε πάντα μια αντίσταση σε σειρά με τα LEDs, ώστε να περιορίζεται το ρεύμα που στέλνει ή απάγει το κύκλωμα οδήγησης. Η αντίσταση μπορεί να μπει απλά σε σειρά με την άνοδο, προς το Vcc (σε απεικονίσεις κοινής ανόδου) ή σε σειρά με την κάθοδο, προς τη γη, σε απεικονίσεις κοινής καθόδου. Στο παρόν εργαστήριο θα οδηγήσουμε την απεικόνιση επτά τομέων μέσω του μικροελεγκτή Arduino. Σχήμα 6.1 Απεικονίσεις επτά τομέων (SSD) κοινής καθόδου και κοινής ανόδου.
6.1.2 Οδήγηση οθόνης υγρών κρυστάλλων Οι απλές Lcd οθόνες, που χρησιμοποιούμε σε συνεργασία με μικροελεγκτές είναι οθόνες δύο γραμμών και 16 χαρακτήρων. Βρίσκουν μεγάλο εύρος εφαρμογών, καθώς είναι οικονομικές και οδηγούνται σχετικά εύκολα. Επιπλέον, μπορούν να απεικονίσουν απλά γραφικά. Σχήμα 6.2. Η οθόνη υγρών κρυστάλλων 16x2. Η βιβλιοθήκη LiquidCrystal.h παρέχει τις ακόλουθες βασικές συναρτήσεις: LiquidCrystal lcd() Σύνταξη: LiquidCrystal lcd(rs, en, d4, d5, d6, d7); Συνάρτηση constructor που δημιουργεί ένα αντικείμενο με όνομα lcd και το αρχικοποιεί ορίζοντας τα pin του Arduino που θα συνδεθούν στα pin του LCD. Η παραπάνω σύνταξη είναι απλοποιημένη και ορίζει επικοινωνία με το LCD των 4-bit. Η πλήρης σύνταξη της εντολής είναι: LiquidCrystal lcd(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); begin() Σύνταξη: lcd.begin( columns, rows ); Αρχικοποιεί την οθόνη και ορίζει το πλήθος των στηλών και των γραμμών. Π.χ. lcd.begin( 16, 2 ); clear() Σύνταξη: lcd.clear(); Καθαρίζει την οθόνη και τοποθετεί τον κέρσορα στην επάνω αριστερά γωνία. home() Σύνταξη: lcd.home(); Τοποθετεί τον κέρσορα στην επάνω αριστερά γωνία. setcursor() Σύνταξη: lcd.setcursor(col,row) Τοποθετεί τον κέρσορα στην στήλη και γραμμή που δίνονται σαν παράμετροι. Π.χ. lcd.setcursor(0,1) τοποθετεί τον κέρσορα στην αρχή της 2ης γραμμής. write()
Σύνταξη: lcd.write(char) Εμφανίζει έναν χαρακτήρα στην οθόνη, στην τρέχουσα θέση του κέρσορα. Π.χ. lcd.write( A ); print() Σύνταξη: lcd.print(data) Εμφανίζει στην οθόνη τα δεδομένα που δίνονται σαν παράμετρος. Τα δεδομένα data μπορεί να είναι τύπου char, byte, int, long, ή string. Π.χ. lcd.print( My Real Time Class! ) cursor() Σύνταξη: lcd.cursor() ; Εμφανίζει στην οθόνη τον κέρσορα ως κάτω παύλα (underscore) στο σημείο που θα εμφανιστεί ο επόμενος προς εμφάνιση χαρακτήρας. nocursor() Σύνταξη: lcd.nocursor(); Εξαφανίζει από την οθόνη τον κέρσορα. blink() Σύνταξη: lcd.blink(); Εμφανίζει στην οθόνη έναν κέρσορα που αναβοσβήνει. noblink() Σύνταξη: lcd.noblink(); Εξαφανίζει από την οθόνη τον κέρσορα που αναβοσβήνει. display() Σύνταξη: lcd.display(); Ενεργοποιεί την οθόνη εμφανίζοντας τους χαρακτήρες που βρίσκονται σε αυτήν καθώς και τον κέρσορα. nodisplay() Σύνταξη: lcd.nodisplay(); Απενεργοποιεί την οθόνη. 6.2 Εργαστηριακό Μέρος 6.2.1 Οδήγηση της απεικόνισης επτά τομέων Δημιουργήστε τις παρακάτω συνδέσεις ανάμεσα στο SSD και στους ακροδέκτες ψηφιακής Εισόδου/Εξόδου του Arduino. Λάβετε υπόψη το διάγραμμα ακροδεκτών για το SSD κοινής ανόδου: Pin Arduino SSD 2 a 3 b 4 c 5 d 6 e 7 f 8 g Vcc (5V) Στην Κοινή Άνοδο, μέσω αντίστασης
Δημιουργήστε ένα νέο sketch για τον Arduino. Μελετείστε και πληκτρολογείστε με προσοχή το παρακάτω πρόγραμμα: int my_num[10][7]={ {0,0,0,0,0,0,1, {1,0,0,1,1,1,1, {0,0,1,0,0,1,0, {0,0,0,0,1,1,0, {1,0,0,1,1,0,0, {0,1,0,0,1,0,0, {0,1,0,0,0,0,0, {0,0,0,1,1,1,1, {0,0,0,0,0,0,0, {0,0,0,0,1,0,0, ;//2D array of all digits and leds void setup() { pinmode(2, OUTPUT); pinmode(3, OUTPUT); pinmode(4, OUTPUT); pinmode(5, OUTPUT); pinmode(6, OUTPUT); pinmode(7, OUTPUT); pinmode(8, OUTPUT); Serial.begin(9600); void loop() { int my_digit=0; for(my_digit=0; my_digit<10; my_digit++){ //Scan all decimal digits from 0 to 9 Serial.println(my_digit); //Show digit on serial monitor disp(my_digit); delay(500); void disp(int number){ int my_pin=2;
int my_index=-1; for(my_pin=2; my_pin<9; my_pin++) //loops over all leds { my_index++; digitalwrite(my_pin, my_num[number][my_index]); Serial.print(my_num[number][my_index]); //Show led matrix on serial monitor Serial.println(' '); //Change line 6.2.2 Οδήγηση της οθόνης υγρών κρυστάλλων Δημιουργούμε τις παρακάτω συνδέσεις ανάμεσα στον Arduino και στους ακροδέκτες της οθόνης LCD: ΠΙΝΑΚΑΣ 6.2 Ακροδέκτης Arduino Ακροδέκτης LCD GND Vss (1) 5V Vcc (2) Στο GND μέσω αντίστασης 1Κ V0 (3) 12 RS (4) GND RW (5) 11 E (6) 5 D4 (11) 4 D5 (12) 3 D6 (13) 2 D7 (14) 5V (μέσω αντίστασης 220) A (15) GND K (16) Μπορείτε να λάβετε υπόψη και το παρακάτω κύκλωμα, όπου φαίνονται οι συνδέσεις του Πίνακα 6.2. Στη θέση του τρίμερ, είναι δυνατό να συνδέσουμε αντίσταση 1Κ, από το V0 (3) της LCD στη γη.
Σχήμα 6.3 Σύνδεση Arduino με οθόνη υγρών κρυστάλλων
// Πρόγραμμα οδήγησης LCD οθόνης και εμφάνισης μηνυμάτων // Ενσωμάτωση της βιβλιοθήκης οδήγησης LCD #include <LiquidCrystal.h> // Αρχικοποίηση της βιβλιοθήκης LiquidCrystal με τον ορισμό των pin που χρησιμοποιούνται // για την διασύνδεση του Arduino με την LCD οθόνη // Ορισμός των μεταβλητών const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2; // Πέρασμα των τιμών στην βιβλιοθήκη LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Η συνάρτηση setup εκτελείται μία φορά κατά την έναρξη του προγράμματος void setup() { // Αρχικοποίηση του αριθμού των στηλών και των γραμμών lcd.begin(16, 2); // Εμφάνιση μηνύματος στην οθόνη LCD (στην πρώτη γραμμή) lcd.print("real Time Class!"); // Η συνάρτηση loop εκτελείται συνέχεια ως ατέρμων βρόχος void loop() { // Μετακίνηση του κέρσορα στην στήλη 0 και στην γραμμή 1 lcd.setcursor(0,1); // Εμφάνιση των δευτερολέπτων από το τελευταίο reset του Arduino lcd.print(millis()/1000);