Οθόνη LED 64 Pixel RGB - Ένας άλλος κλώνος Arduino: 12 βήματα (με εικόνες)
Οθόνη LED 64 Pixel RGB - Ένας άλλος κλώνος Arduino: 12 βήματα (με εικόνες)
Anonim

Αυτή η οθόνη βασίζεται σε μια μήτρα LED 8x8 RGB. Για σκοπούς δοκιμής, συνδέθηκε με μια τυπική πλακέτα Arduino (Diecimila) χρησιμοποιώντας 4 καταχωρητές βάρδιας. Αφού το έβαλα σε λειτουργία, το περμάτωσα σε ένα πλακιδωτό PCB. Οι καταχωρητές shift έχουν πλάτος 8-bit και διασυνδέονται εύκολα με το πρωτόκολλο SPI. Η διαμόρφωση πλάτους παλμού χρησιμοποιείται για την ανάμειξη των χρωμάτων, περισσότερο αργότερα. Μέρος της μνήμης RAM του MCU χρησιμοποιείται ως διακόπτης καρέ για τη διατήρηση της εικόνας. Η μνήμη RAM βίντεο αναλύεται από μια ρουτίνα διακοπής στο παρασκήνιο, έτσι ώστε ο χρήστης να μπορεί να κάνει άλλα χρήσιμα πράγματα, όπως να μιλάει με υπολογιστή, κουμπιά ανάγνωσης και ποτενσιόμετρα. Περισσότερες πληροφορίες σχετικά με το "Arduino": www.arduino.cc

Βήμα 1: Διαμόρφωση πλάτους παλμού για ανάμειξη χρωμάτων

Ρύθμιση πλάτους παλμού - ΤΙ; Η διαμόρφωση πλάτους παλμού ουσιαστικά ενεργοποιεί και απενεργοποιεί την τροφοδοσία ισχύος σε μια ηλεκτρική συσκευή αρκετά γρήγορα. Η χρησιμοποιούμενη ισχύς προκύπτει από τον μαθηματικό μέσο όρο της συνάρτησης τετραγωνικού κύματος που λαμβάνεται στο διάστημα μιας περιόδου. Όσο περισσότερο η λειτουργία παραμένει στη θέση ON, τόσο περισσότερη ισχύ παίρνετε. Το PWM έχει την ίδια επίδραση στη φωτεινότητα των LED με έναν ρυθμιστή φωτισμού εναλλασσόμενου ρεύματος. Το επόμενο καθήκον είναι να ελέγξουμε ατομικά τη φωτεινότητα των 64 RGB LEDS (= 192 μονές λυχνίες LED!) Με φθηνό και εύκολο τρόπο, ώστε να μπορεί κανείς να πάρει το σύνολο φάσμα χρωμάτων. Κατά προτίμηση δεν πρέπει να υπάρχει τρεμόπαιγμα ή άλλα ενοχλητικά αποτελέσματα. Η μη γραμμική αντίληψη της φωτεινότητας που εμφανίζεται από το ανθρώπινο μάτι δεν θα ληφθεί υπόψη εδώ (π.χ. η διαφορά μεταξύ της φωτεινότητας 10% και 20% φαίνεται "μεγαλύτερη" από ότι μεταξύ 90% και 100%). Η εικόνα (1) απεικονίζει την αρχή λειτουργίας του τον αλγόριθμο PWM. Ας πούμε ότι ο κωδικός έχει τιμή 7 για τη φωτεινότητα της λυχνίας LED (0, 0). Επιπλέον, γνωρίζει ότι υπάρχει μέγιστο αριθμό βημάτων στη φωτεινότητα. Ο κώδικας εκτελεί N βρόχους για όλα τα πιθανά επίπεδα φωτεινότητας και όλους τους απαραίτητους βρόχους για την εξυπηρέτηση κάθε LED σε όλες τις σειρές. Σε περίπτωση που ο μετρητής βρόχου x στον βρόχο φωτεινότητας είναι μικρότερος από 7, το LED ανάβει. Εάν είναι μεγαλύτερο από 7, η λυχνία LED σβήνει. Κάνοντας αυτό πολύ γρήγορα για όλα τα LED, τα επίπεδα φωτεινότητας και τα βασικά χρώματα (RGB), κάθε LED μπορεί να προσαρμοστεί ξεχωριστά για να εμφανίσει το επιθυμητό χρώμα. Οι μετρήσεις με έναν παλμογράφο δείχνουν ότι ο κωδικός ανανέωσης της οθόνης διαρκεί περίπου 50% χρόνο CPU. Τα υπόλοιπα μπορούν να χρησιμοποιηθούν για σειριακή επικοινωνία με υπολογιστή, ανάγνωση κουμπιών, συνομιλία με αναγνώστη RFID, αποστολή Ι2C δεδομένα σε άλλες ενότητες…

Βήμα 2: Μιλώντας με Shift Registers και LED

Ο καταχωρητής αλλαγής είναι μια συσκευή που επιτρέπει τη σειριακή φόρτωση δεδομένων και μια παράλληλη έξοδο. Η αντίθετη λειτουργία είναι επίσης δυνατή με το κατάλληλο τσιπ. Υπάρχει ένα καλό σεμινάριο σχετικά με τους καταχωρητές βάρδιας στον ιστότοπο arduino. Τα LED οδηγούνται από καταχωρητές βάρδιας 8-bit του τύπου 74HC595. Κάθε θύρα μπορεί να προμηθευτεί ή να βυθίσει περίπου 25mA ρεύματος. Το συνολικό ρεύμα ανά τσιπ που βυθίζεται ή προέρχεται δεν πρέπει να υπερβαίνει τα 70mA. Αυτά τα τσιπ είναι εξαιρετικά φθηνά, οπότε μην πληρώνετε περισσότερα από περίπου 40 σεντς ανά τεμάχιο. Καθώς οι λυχνίες LED έχουν εκθετικό χαρακτηριστικό ρεύματος / τάσης, πρέπει να υπάρχουν αντιστάσεις περιορισμού ρεύματος. Χρησιμοποιώντας τον νόμο του Ohm: R = (V - Vf) / IR = περιοριστική αντίσταση, V = 5V, Vf = τάση εμπρός LED, I = επιθυμητό ρεύμα Κόκκινες λυχνίες LED έχουν τάση προς τα εμπρός περίπου 1,8V, μπλε και πράσινο εύρος από 2,5V έως 3,5V. Χρησιμοποιήστε ένα απλό πολύμετρο για να το προσδιορίσετε. Για σωστή αναπαραγωγή χρώματος θα πρέπει να λάβετε υπόψη μερικά πράγματα: φασματική ευαισθησία του ανθρώπινου ματιού (κόκκινο/μπλε: κακό, πράσινο: καλό), απόδοση της λυχνίας LED σε συγκεκριμένο μήκος κύματος και ρεύμα. Στην πράξη κάποιος παίρνει απλά 3 ποτενσιόμετρα και τα ρυθμίζει μέχρι το LED να δείξει το σωστό λευκό φως. Φυσικά το μέγιστο ρεύμα LED δεν πρέπει να ξεπεραστεί. Αυτό που είναι επίσης σημαντικό εδώ είναι ότι ο καταχωρητής αλλαγής που οδηγεί τις σειρές πρέπει να παρέχει ρεύμα σε 3x8 LED, οπότε καλύτερα να μην πιέζετε το ρεύμα πολύ ψηλά. Wasμουν επιτυχής με τον περιορισμό των αντιστάσεων των 270 Ohm για όλες τις λυχνίες LED, αλλά αυτό εξαρτάται φυσικά από τη μορφή της μήτρας LED. Οι καταχωρητές βάρδιας διασυνδέονται με σειριακό SPI. SPI = Serial Peripheral Interface (Εικόνα (1)). Σε αντίθεση με τις σειριακές θύρες στους υπολογιστές (ασύγχρονες, χωρίς σήμα ρολογιού), το SPI χρειάζεται μια γραμμή ρολογιού (SRCLK). Στη συνέχεια, υπάρχει μια γραμμή σήματος που λέει στη συσκευή πότε είναι έγκυρα τα δεδομένα (chip select / latch / RCLK). Τέλος, υπάρχουν δύο γραμμές δεδομένων, η μία ονομάζεται MOSI (master out slave in), η άλλη ονομάζεται MISO (master in slave out). Το SPI χρησιμοποιείται για τη διασύνδεση ολοκληρωμένων κυκλωμάτων, όπως και εγώ2Γ. Αυτό το έργο χρειάζεται MOSI, SRCLK και RCLK. Επιπλέον, χρησιμοποιείται και η γραμμή ενεργοποίησης (G). Ένας κύκλος SPI ξεκινά τραβώντας τη γραμμή RCLK στο LOW (Εικόνα (2)). Το MCU στέλνει τα δεδομένα του στη γραμμή MOSI. Η λογική κατάστασή της λαμβάνεται ως δείγμα από τον καταχωρητή αλλαγής στην ανερχόμενη άκρη της γραμμής SRCLK. Ο κύκλος τερματίζεται τραβώντας τη γραμμή RCLK πίσω στο HIGH. Τώρα τα δεδομένα είναι διαθέσιμα στις εξόδους.

Βήμα 3: Σχηματικό

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

Η εικόνα (2) δείχνει το υπόλοιπο σχήμα με το MCU, συνδετήρες, χαλαζία … Το συνημμένο αρχείο PDF περιέχει ολόκληρα τα έργα, καλύτερα για εκτύπωση.

Βήμα 4: Πηγαίος κώδικας C ++

Στο C/C ++ συνήθως κάποιος πρέπει να κάνει πρωτότυπες λειτουργίες πριν τις κωδικοποιήσει. } Το Arduino IDE δεν απαιτεί αυτό το βήμα, καθώς τα πρωτότυπα λειτουργιών δημιουργούνται αυτόματα. Επομένως, τα πρωτότυπα της λειτουργίας δεν θα εμφανίζονται στον κώδικα που εμφανίζεται εδώ. Εικόνα (1): setup () λειτουργία Εικόνα (2): συνάρτηση spi_transfer () με χρήση SPI υλικού του τσιπ ATmega168 (τρέχει γρηγορότερα) Εικόνα (3): κώδικας framebuffer χρησιμοποιώντας διακοπή υπερχείλισης χρονοδιακόπτη. Κομμάτια κώδικα που έχουν μια ελαφρώς κρυπτική εμφάνιση για αρχάριους, π.χ. ενώ (! (SPSR & (1 << SPIF))) {} χρησιμοποιήστε απευθείας τους καταχωρητές MCU. Αυτό το παράδειγμα με λόγια: "ενώ το SPIF-bit στο μητρώο SPSR δεν έχει οριστεί δεν κάνει τίποτα". Θέλω μόνο να τονίσω ότι για τυπικά έργα δεν είναι πραγματικά απαραίτητο να ασχοληθούμε με αυτά τα πράγματα τόσο στενά συνδεδεμένα με το υλικό. Οι αρχάριοι δεν πρέπει να φοβούνται αυτό.

Βήμα 5: Τελειωμένο gadget

Αφού έλυσα όλα τα προβλήματα και έβαλα σε λειτουργία τον κώδικα, απλώς έπρεπε να δημιουργήσω μια διάταξη PCB και να την στείλω σε ένα υπέροχο σπίτι. Φαίνεται πολύ πιο καθαρό:-) Εικόνα (1): πλήρως κατοικημένη πλακέτα ελεγκτή Εικόνα (2): μπροστινή πλευρά του γυμνού PCBImage (2): πίσω πλευρά Υπάρχουν σύνδεσμοι που σπάνε PORTC και PORTD του τσιπ ATmega168/328 και 5V/GND Το Αυτές οι θύρες περιέχουν τις σειριακές γραμμές RX, TX, το I2Γραμμές C, ψηφιακές γραμμές I/O και 7 γραμμές ADC. Αυτό προορίζεται για στοίβαξη ασπίδων στο πίσω μέρος της σανίδας. Η απόσταση είναι κατάλληλη για χρήση σανίδων (0,1 ιντσών). Ο φορτωτής εκκίνησης μπορεί να αναβοσβήνει χρησιμοποιώντας την κεφαλίδα ICSP (λειτουργεί με το USBtinyISP του adafruit). Μόλις γίνει αυτό, χρησιμοποιήστε έναν τυπικό σειριακό προσαρμογέα FTDI USB/TTL ή παρόμοιο. Έχω προσθέσει επίσης έναν βραχυκυκλωτήρα αυτόματης επαναφοράς-απενεργοποίησης. Έχω επίσης μαγειρέψει ένα μικρό σενάριο Perl (δείτε το ιστολόγιό μου), το οποίο επιτρέπει την αυτόματη επαναφορά με καλώδια FTDI, τα οποία συνήθως δεν λειτουργούν έξω (RTS έναντι γραμμής DTR). Αυτό λειτουργεί σε Linux, ίσως σε MAC. Εκτυπωμένες πλακέτες κυκλωμάτων και μερικά DIY KIT είναι διαθέσιμα στο ιστολόγιό μου. Απαιτείται συγκόλληση SMD! Δείτε τα αρχεία PDF για οδηγίες κατασκευής και πηγές για πίνακες LED.

Βήμα 6: Εφαρμογή: CPU Load Monitor για Linux χρησιμοποιώντας Perl

Αυτή είναι μια πολύ βασική συσκευή παρακολούθησης φορτίου με πλοκή ιστορικού. Βασίζεται σε ένα σενάριο Perl που συγκεντρώνει το "μέσο όρο φόρτωσης" του συστήματος κάθε 1 δευτερόλεπτο χρησιμοποιώντας το iostat. Τα δεδομένα αποθηκεύονται σε έναν πίνακα ο οποίος μετατοπίζεται σε κάθε ενημέρωση. Νέα δεδομένα προστίθενται στην κορυφή της λίστας, η παλαιότερη καταχώρηση διαγράφεται. Περισσότερες λεπτομερείς πληροφορίες και λήψεις (κωδικός…) είναι διαθέσιμες στο ιστολόγιό μου.

Βήμα 7: Εφαρμογή: Μιλώντας σε άλλες ενότητες χρησιμοποιώντας το I²C

Αυτό είναι απλώς μια απόδειξη αρχής και όχι μακράν η απλούστερη λύση για αυτήν τη δουλειά. Χρησιμοποιώντας το I2Το C επιτρέπει την απευθείας αντιμετώπιση έως και 127 "slave" σανίδων. Εδώ ο πίνακας στη δεξιά πλευρά του βίντεο είναι ο "κύριος" (που ξεκινά όλες τις μεταφορές), ο αριστερός πίνακας είναι ο υποτελής (περιμένει δεδομένα). Εγώ2Το C χρειάζεται 2 γραμμές σήματος και τις συνηθισμένες γραμμές τροφοδοσίας (+, -, SDA, SCL). Καθώς είναι ένας δίαυλος, όλες οι συσκευές συνδέονται παράλληλα με αυτό.

Βήμα 8: Εφαρμογή: "Game Cube":-)

Απλώς μια φρικτή σκέψη. Αυτό ταιριάζει επίσης σε ξύλινο περίβλημα που εμφανίζεται στη σελίδα εισαγωγής. Έχει 5 κουμπιά στο πίσω μέρος του, τα οποία μπορεί να χρησιμοποιηθούν για να παίξετε ένα απλό παιχνίδι. ΤΕΛΟΣ;

Βήμα 9: Εμφάνιση εικόνων / κινούμενων εικόνων στη μήτρα - Quick Hack

Έτσι, έχει μόνο 8x8 pixel και μερικά διαθέσιμα χρώματα. Πρώτα χρησιμοποιήστε κάτι σαν το Gimp για να μειώσετε την αγαπημένη σας εικόνα σε ακριβώς 8x8 pixel και να την αποθηκεύσετε ως ακατέργαστη μορφή ".ppm" (όχι ASCII). Το PPM διαβάζεται και επεξεργάζεται εύκολα σε σενάριο Perl. Η χρήση του ImageMagick και το εργαλείο γραμμής εντολών "μετατροπή" δεν θα λειτουργήσει σωστά. Ανεβάστε τον νέο κώδικα arduino και, στη συνέχεια, χρησιμοποιήστε το σενάριο Perl για μεταφόρτωση στον ελεγκτή. Το τρεμόπαιγμα είναι απλώς μια αναντιστοιχία ανανέωσης LED και ο ρυθμός καρέ της κάμεράς μου. Αφού ενημερώσετε λίγο τον κώδικα, τρέχει αρκετά zippy. Όλες οι εικόνες μεταφέρονται ζωντανά σε σειριακή σειρά όπως τις βλέπετε. Μεγαλύτερες κινούμενες εικόνες θα μπορούσαν να αποθηκευτούν σε εξωτερικό EEPROM, όπως γίνεται σε διάφορους πίνακες ακτινοβολίας pov.

Βήμα 10: Διαδραστικός έλεγχος αποθηκευμένων κινούμενων εικόνων

Γιατί να αφήσετε τον μικροελεγκτή να διασκεδάσει; Η λατρεία του Arduino έχει να κάνει με τον φυσικό υπολογισμό και την αλληλεπίδραση, οπότε απλά προσθέστε ένα ποτενσιόμετρο και αναλάβετε τον έλεγχο! Η χρήση μιας από τις 8 εισόδους αναλογικού σε ψηφιακό μετατροπέα το καθιστά πολύ απλό.

Βήμα 11: Προβολή ζωντανού βίντεο

Η χρήση ενός σεναρίου Perl και μερικών ενοτήτων διευκολύνει την προβολή οιονεί ζωντανού βίντεο σε συστήματα X11. Wasταν κωδικοποιημένο στο linux και μπορεί να λειτουργήσει και σε MAC. Λειτουργεί ως εξής:- πάρτε τη θέση του δρομέα του ποντικιού- καταγράψτε ένα κουτί pixel NxN στο κέντρο του δρομέα- κλίμακα της εικόνας σε 8x8 pixel- αποστολή της στον πίνακα LED- επαναλαμβάνω

Βήμα 12: Περισσότερο φως σχεδόν δωρεάν

Με μόλις δύο βήματα η φωτεινότητα μπορεί να αυξηθεί αρκετά. Αντικαταστήστε τις αντιστάσεις 270Ω με αυτές των 169Ω και στείλτε ξανά έναν καταχωρητή αλλαγής 74HC595 στο IC5.