Ένδειξη επτά τμημάτων. Ένδειξη LED 4 ψηφίων Arduino και τεσσάρων ψηφίων Seven Segment

20.07.2023

Ας συνδέσουμε ένα επτά τμήμα Ένδειξη LEDστον πίνακα Arduino και μάθετε πώς να τον ελέγχετε χρησιμοποιώντας τη βιβλιοθήκη Led4Digits.h.

Το προηγούμενο μάθημα περιέγραψε λεπτομερώς τους μικροελεγκτές. Ας συνδέσουμε μια τέτοια ένδειξη στην πλακέτα Arduino.

Το διάγραμμα για τη σύνδεση της ένδειξης στην πλακέτα Arduino μοιάζει με αυτό.

Το συναρμολόγησα σε μια πλακέτα κυκλώματος.

Για τη διαχείριση των δεικτών, έγραψα τη βιβλιοθήκη Led4Digits.h:

Και πληρώστε.

Η βιβλιοθήκη σάς επιτρέπει να διαχειρίζεστε δείκτες επτά τμημάτων:

  • έως τέσσερα ψηφία σε μέγεθος.
  • με οποιεσδήποτε παραλλαγές πολικών παλμών ελέγχου (όλες).
  • λειτουργεί σε παράλληλη διαδικασία.
  • σας επιτρέπει να εμφανίσετε στην ένδειξη:
    • τμήματα κάθε κατηγορίας·
    • το ψηφίο κάθε ψηφίου·
    • ακέραιος 0 ... 9999;
  • Για την έξοδο ενός ακέραιου αριθμού, μπορεί να καθοριστεί ο αριθμός των ψηφίων.
  • Υπάρχει μια λειτουργία για την καταστολή ασήμαντων ψηφίων.

Μπορείτε να κατεβάσετε τη βιβλιοθήκη Led4Digits.h από αυτόν τον σύνδεσμο:

Και πληρώστε. Μόνο 25 τρίψιμο. ανά μήνα για πρόσβαση σε όλους τους πόρους του ιστότοπου!

Ο τρόπος εγκατάστασης είναι γραμμένος στο .

Δεν θα παράσχω τα κείμενα πηγής. Μπορείτε να τα αναζητήσετε στα αρχεία της βιβλιοθήκης. Όπως πάντα, υπάρχουν πολλά σχόλια εκεί. Θα περιγράψω αναλυτικά, με παραδείγματα, τον τρόπο χρήσης της βιβλιοθήκης.

Βιβλιοθήκη ελέγχου LED για Arduino Led4Digits.

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

κατηγορία Led4Digits (
κοινό:
ψηφίο byte? // Κώδικες ελέγχου τμήματος bit
void regen(); // αναγέννηση, η μέθοδος πρέπει να καλείται τακτικά
void tetradToSegCod(byte dig, byte tetrad); // μετατροπή κωδικών tetrad σε τμήμα
boolean print (ανυπόγραφη τιμή int, byte digitNum, byte κενό); // ακέραιος έξοδος



} ;

Κατασκευαστής.

Led4Digits (τύπος byteLed, byte ψηφίοPin0, byte ψηφίοPin1, byte ψηφίοPin2, byte ψηφίοPin3,
byte segPinA, byte segPinB, byte segPinC, byte segPinD,
byte segPinE, byte segPinF, byte segPinG, byte segPinH);

τυπογραφημένοΡυθμίζει τις πολικότητες παλμών ελέγχου για σήματα επιλογής bit και τμήματος. Υποστηρίζει οποιαδήποτε σχήματα σύνδεσης ().

τυπογραφημένο Επιλογή κατηγορίας Επιλογή τμήματος Τύπος κυκλώματος
0 -_- -_- Κοινή άνοδος με πλήκτρα επιλογής εκφόρτισης
1 _-_ -_- Κοινή άνοδος
2 -_- _-_ Κοινή κάθοδος
3 _-_ _-_ Κοινή κάθοδος με πλήκτρα επιλογής εκφόρτισης

ψηφίοPin0...digitPin3– έξοδοι για επιλογή ψηφίων. Εάν ψηφίοPin = 255, τότε το ψηφίο είναι απενεργοποιημένο. Αυτό σας επιτρέπει να συνδέσετε δείκτες με λιγότερα ψηφία. digitPin0 – χαμηλό (δεξιό) ψηφίο.

segPinA...segPinH– Έξοδοι ελέγχου τμημάτων.

Για παράδειγμα,

σημαίνει: δείκτης τύπου 1; έξοδοι εκφόρτισης 5,4,3,2; έξοδοι τμημάτων 6,7,8,9,10,11,12,13.

void regen() μέθοδος

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

Για παράδειγμα,

// χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Πίνακας ψηφίων byte

Περιέχει την κατάσταση των τμημάτων. Το ψηφίο είναι το λιγότερο σημαντικό bit, το λιγότερο σημαντικό bit του ψηφίου είναι το τμήμα "A" του λιγότερο σημαντικό bit. Μια κατάσταση bit 1 σημαίνει ότι το τμήμα είναι αναμμένο.

Για παράδειγμα,

ψηφίο = B0000101;

σημαίνει ότι στο δεύτερο ψηφίο, τα τμήματα "A" και "C" είναι αναμμένα.

Ένα παράδειγμα προγράμματος που φωτίζει διαδοχικά όλα τα τμήματα κάθε ψηφίου.

// τρέχοντα τμήματα
#συμπεριλαμβάνω
#συμπεριλαμβάνω

//
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
διακοπή χρονοδιακόπτη 2 ms
MsTimer2::start(); // ενεργοποίηση διακοπής
}

void loop() (
για (int i = 0; i< 32; i++) {
αν (i == 0) disp.digit= 1;
αλλιώς εάν (i == 8) disp.digit= 1;
αλλιώς αν (i == 16) disp.digit= 1;
αλλιώς αν (i == 24) disp.digit= 1;
αλλού(
disp.digit = disp.ψηφίο<< 1;
disp.digit = disp.ψηφίο<< 1;
disp.digit = disp.ψηφίο<< 1;
disp.digit = disp.ψηφίο<< 1;
}
καθυστέρηση (250);
}
}

//χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Στον πίνακα ψηφίων, το 1 μετατοπίζεται και οι ενδείξεις το εμφανίζουν.

Μέθοδος void tetradToSegCod (byte dig, byte tetrad)

Η μέθοδος σάς επιτρέπει να εμφανίζετε αριθμούς και γράμματα δεκαεξαδικού κώδικα σε μεμονωμένα ψηφία. Έχει επιχειρήματα:

  • dig – ψηφίος αριθμός 0 ... 3;
  • τετράδος – δεκαδικός κωδικός χαρακτήρων. Ο κωδικός 0 θα εμφανίσει τον αριθμό "0", τον κωδικό 1 - τον αριθμό "1", τον κωδικό 14 - το γράμμα "E".

Για παράδειγμα,

tetrad(2, 7);

θα εμφανίσει τον αριθμό "7" στο τρίτο ψηφίο.

Ένα παράδειγμα προγράμματος που αλλάζει χαρακτήρες σε κάθε ψηφίο με τη σειρά.

// αριθμοί ένας προς έναν
#συμπεριλαμβάνω
#συμπεριλαμβάνω

// δείκτης τύπου 1; έξοδοι εκφόρτισης 5,4,3,2; έξοδοι τμήματος 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // διακοπή χρονοδιακόπτη 2 ms
MsTimer2::start(); // ενεργοποίηση διακοπής
}

void loop() (
για (int i = 0; i< 64; i++) {
disp.tetradToSegCod(i>>4, i);
καθυστέρηση (250);
}
}

// χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Μέθοδος boolean print (ανυπόγραφη τιμή int, ψηφίο byteNum, byte κενό)

Η μέθοδος εμφανίζει έναν ακέραιο αριθμό στους δείκτες. Μετατρέπει τον δυαδικό αριθμό σε BCD για κάθε ψηφίο. Έχει επιχειρήματα:

  • τιμή – ο αριθμός που εμφανίζεται στην ένδειξη.
  • digitNum – αριθμός ψηφίων για τον αριθμό. Αυτό δεν πρέπει να συγχέεται με τον αριθμό των ενδεικτικών ψηφίων. Μπορεί να θέλετε να εμφανίσετε έναν αριθμό σε 2 ψηφία και να εμφανίσετε χαρακτήρες στα άλλα δύο χρησιμοποιώντας ψηφίο.
  • κενό - ένα σημάδι απόσβεσης ασήμαντων ψηφίων. blank=0 σημαίνει ότι ο αριθμός πρέπει να εμφανίζεται με όλα τα μηδενικά. Ο αριθμός "7" θα μοιάζει με "0007". Εάν το κενό είναι διαφορετικό από το 0, τα ασήμαντα μηδενικά θα αποσιωπηθούν.

Εάν η τιμή του αριθμού υπερβαίνει τον επιτρεπόμενο αριθμό για τον επιλεγμένο αριθμό ψηφίων (digitNum), τότε η συνάρτηση θα εμφανίσει "---" στην ένδειξη και θα επιστρέψει το false.

Ένα παράδειγμα προγράμματος εξόδου αριθμών.

// αριθμός εξόδου
#συμπεριλαμβάνω
#συμπεριλαμβάνω

// δείκτης τύπου 1; έξοδοι εκφόρτισης 5,4,3,2; έξοδοι τμήματος 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // διακοπή χρονοδιακόπτη 2 ms
MsTimer2::start(); // ενεργοποίηση διακοπής
}

void loop() (
για (int i = 0; i< 12000; i++) {
disp.print(i, 4, 1);
καθυστέρηση(50);
}
}

// χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Οι δύο τελευταίες μέθοδοι δεν αλλάζουν την κατάσταση του τμήματος "H" - την υποδιαστολή. Για να αλλάξετε την κατάσταση ενός σημείου μπορείτε να χρησιμοποιήσετε τις εντολές:

ψηφίο |= 0x80; // ανάψτε την υποδιαστολή
ψηφίο &= 0x7f; // σβήστε την υποδιαστολή

Έξοδος σε δείκτες αρνητικών αριθμών (int).

Οι αρνητικοί αριθμοί μπορούν να εξάγονται ως εξής:

  • Ελέγξτε το σύμβολο του αριθμού.
  • Εάν ο αριθμός είναι αρνητικός, τότε εκτυπώστε ένα σύμβολο μείον στο πιο σημαντικό ψηφίο και αλλάξτε το πρόσημο του αριθμού σε θετικό στη συνάρτηση print().
  • Εάν ο αριθμός είναι θετικός, τότε απενεργοποιήστε το bit πρόσημο και εκτυπώστε τον αριθμό χρησιμοποιώντας τη συνάρτηση print().

Εδώ είναι ένα πρόγραμμα που επιδεικνύει αυτή τη μέθοδο. Βγάζει αριθμούς από -999 έως 999.

// εξαγωγή αρνητικών αριθμών
#συμπεριλαμβάνω
#συμπεριλαμβάνω

// δείκτης τύπου 1; έξοδοι εκφόρτισης 5,4,3,2; έξοδοι τμήματος 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // διακοπή χρονοδιακόπτη 2 ms
MsTimer2::start(); // ενεργοποίηση διακοπής
}

void loop() (

για (int i = -999; i< 1000; i++) {

αν (i< 0) {
// ο αριθμός είναι αρνητικός
disp.digit= B01000000; // σημάδι -
disp.print(i * -1, 3, 1);
}
αλλού(
disp.digit= B00000000; // καθαρίστε το σημάδι
disp.print(i, 3, 1);
}

καθυστέρηση(50);
}
}

// χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Έξοδος σε δείκτες κλασματικών αριθμών, μορφή float.

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

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

  • Ο αριθμός κινητής υποδιαστολής πολλαπλασιάζεται επί 10 στην ισχύ που αντιστοιχεί στον απαιτούμενο αριθμό δεκαδικών ψηφίων. Εάν πρέπει να εμφανίσετε 1 δεκαδικό ψηφίο στους δείκτες, πολλαπλασιάστε με 10, εάν 2, στη συνέχεια πολλαπλασιάστε με 100, 3 δεκαδικά ψηφία με 1000.
  • Στη συνέχεια, ο αριθμός κινητής υποδιαστολής μετατρέπεται ρητά σε ακέραιο (int) και εμφανίζεται στους δείκτες χρησιμοποιώντας τη συνάρτηση print().
  • Στο απαιτούμενο ψηφίο τοποθετείται μια τελεία.

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

float x = 2,12345;

disp.digit |= 0x80; //

Πολλαπλασιάζουμε τον αριθμό με το 100 και βάζοντας μια τελεία στο τρίτο ψηφίο, διαιρούμε το αποτέλεσμα με το 100.

Εδώ είναι ένα πρόγραμμα που εμφανίζει αριθμούς κινητής υποδιαστολής από 0,00 έως 99,99 στις ενδείξεις.

// έξοδο κινητής υποδιαστολής
#συμπεριλαμβάνω
#συμπεριλαμβάνω

// δείκτης τύπου 1; έξοδοι εκφόρτισης 5,4,3,2; έξοδοι τμήματος 6,7,8,9,10,11,12,13
Led4Digits disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13);

void setup() (
MsTimer2::set(2, timerInterrupt); // διακοπή χρονοδιακόπτη 2 ms
MsTimer2::start(); // ενεργοποίηση διακοπής
}

void loop() (
float x = 0;

για (int i = 0; i< 10000; i++) {
x += 0,01;

disp.print((int)(x * 100.), 4, 1);
disp.digit |= 0x80; // ανάβει το σημείο τρίτου επιπέδου

καθυστέρηση(50);
}
}

//χειριστής διακοπής 2 ms
void timerInterrupt() (
disp.regen(); // αναγέννηση δείκτη
}

Όπως μπορείτε να δείτε, η βιβλιοθήκη Led4Digits.h απλοποιεί σημαντικά την εργασία με ενδείξεις διόδου εκπομπής φωτός (LED) επτά τμημάτων που συνδέονται με την πλακέτα Arduino. Δεν έχω βρει ανάλογο τέτοιας βιβλιοθήκης.

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

Σε αντίθεση με τα ανάλογα της, η βιβλιοθήκη Led4Digits.h:

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

Στο επόμενο μάθημα, θα συνδέσουμε ταυτόχρονα μια ένδειξη LED και μια μήτρα κουμπιών στην πλακέτα Arduino. Ας γράψουμε μια βιβλιοθήκη για ένα τέτοιο σχέδιο.

Κατηγορία: . Μπορείτε να το προσθέσετε σελιδοδείκτη.


Διάγραμμα σύνδεσης για μονοψήφιο δείκτη επτά τμημάτων
Διάγραμμα σύνδεσης για πολυψήφιο δείκτη επτά τμημάτων

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

Όπως λέει και το όνομά του, αποτελείται από επτά στοιχεία οθόνης (τμήματα) που ανάβουν και σβήνουν ξεχωριστά. Με τη συμπερίληψή τους σε διαφορετικούς συνδυασμούς, μπορούν να χρησιμοποιηθούν για τη δημιουργία απλοποιημένων εικόνων αραβικών αριθμών.
Τα τμήματα χαρακτηρίζονται από τα γράμματα A έως G. όγδοο τμήμα - υποδιαστολή (δεκαδικό σημείο, DP), σχεδιασμένο για την εμφάνιση κλασματικών αριθμών.
Περιστασιακά, εμφανίζονται γράμματα στην ένδειξη επτά τμημάτων.

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

Επίσης, η ένδειξη LED μπορεί να είναι μονοψήφια (όπως στο παραπάνω σχήμα) ή πολυψήφιο. Βασικά, χρησιμοποιούνται στην πράξη δείκτες LED ενός, δύο, τριών και τετραψήφιων:

Εκτός από δέκα ψηφία, οι δείκτες επτά τμημάτων μπορούν να εμφανίζουν γράμματα. Αλλά λίγα γράμματα έχουν μια διαισθητική αναπαράσταση επτά τμημάτων.
Στα λατινικά: κεφαλαία A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, πεζά a, b, c, d, e, g , h, i, n, o, q, r, t, u.
Στα κυριλλικά: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (δύο ψηφία), b, E/Z.
Επομένως, οι δείκτες επτά τμημάτων χρησιμοποιούνται μόνο για την εμφάνιση απλών μηνυμάτων.

Συνολικά, η ένδειξη LED επτά τμημάτων μπορεί να εμφανίσει 128 χαρακτήρες:

Ένας τυπικός δείκτης LED έχει εννέα απαγωγές: ο ένας πηγαίνει στις κάθοδοι όλων των τμημάτων και οι άλλοι οκτώ πηγαίνουν στην άνοδο κάθε τμήματος. Αυτό το σχήμα ονομάζεται "κοινό κύκλωμα καθόδου", υπάρχουν και σχήματα με κοινή άνοδο(τότε είναι το αντίστροφο). Συχνά, όχι ένας, αλλά δύο κοινοί ακροδέκτες κατασκευάζονται σε διαφορετικά άκρα της βάσης - αυτό απλοποιεί την καλωδίωση χωρίς να αυξάνει τις διαστάσεις. Υπάρχουν και τα λεγόμενα «καθολικά», αλλά προσωπικά δεν έχω συναντήσει τέτοια. Επιπλέον, υπάρχουν δείκτες με ενσωματωμένο καταχωρητή μετατόπισης, ο οποίος μειώνει σημαντικά τον αριθμό των ακροδεκτών της θύρας μικροελεγκτή, αλλά είναι πολύ πιο ακριβοί και σπάνια χρησιμοποιούνται στην πράξη. Και επειδή η απεραντοσύνη δεν μπορεί να γίνει αντιληπτή, δεν θα εξετάσουμε προς το παρόν τέτοιους δείκτες (αλλά υπάρχουν και δείκτες με πολύ μεγαλύτερο αριθμό τμημάτων, μήτρα).

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

Σύνδεση μιας μονοψήφιας ένδειξης επτά τμημάτων σε έναν μικροελεγκτή

Το παρακάτω διάγραμμα δείχνει πώς έχει συνδεθεί μια μονοψήφια ένδειξη επτά τμημάτωνστον μικροελεγκτή.
Θα πρέπει να ληφθεί υπόψη ότι εάν ο δείκτης με ΚΟΙΝΗ ΚΑΘΟΔΟΣ, τότε συνδέεται η κοινή του έξοδος "γη", και τα τμήματα αναφλέγονται με τροφοδοσία λογική μονάδαστην έξοδο της θύρας.
Εάν ο δείκτης είναι ΚΟΙΝΗ ΑΝΩΔΙΑ, τότε τροφοδοτείται στο κοινό σύρμα του "συν"τάση, και τα τμήματα αναφλέγονται μεταβαίνοντας την έξοδο της θύρας στην κατάσταση λογικό μηδέν.

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

Αντιστάσεις περιορισμού ρεύματοςμπορεί να υπάρχει ή να μην υπάρχει στο διάγραμμα. Όλα εξαρτώνται από την τάση τροφοδοσίας που παρέχεται στον δείκτη και τα τεχνικά χαρακτηριστικά των δεικτών. Εάν, για παράδειγμα, η τάση που παρέχεται στα τμήματα είναι 5 βολτ και είναι σχεδιασμένα για τάση λειτουργίας 2 βολτ, τότε πρέπει να εγκατασταθούν αντιστάσεις περιορισμού ρεύματος (για να περιοριστεί το ρεύμα μέσω αυτών για αυξημένη τάση τροφοδοσίας και να μην καούν όχι μόνο η ένδειξη, αλλά και η θύρα του μικροελεγκτή).
Είναι πολύ εύκολο να υπολογίσετε την τιμή των αντιστάσεων περιορισμού ρεύματος, χρησιμοποιώντας τον τύπο του παππού Ωμ.
Για παράδειγμα, τα χαρακτηριστικά του δείκτη είναι τα εξής (λαμβανόμενα από το φύλλο δεδομένων):
— τάση λειτουργίας — 2 βολτ
— ρεύμα λειτουργίας — 10 mA (=0,01 A)
— Τάση τροφοδοσίας 5 βολτ
Τύπος υπολογισμού:
R= U/I (όλες οι τιμές σε αυτόν τον τύπο πρέπει να είναι σε Ohms, Volt και Amps)
R= (τάση τροφοδοσίας - τάση λειτουργίας)/ρεύμα λειτουργίας
R= (5-2)/0,01 = 300 Ohm

Διάγραμμα σύνδεσης για πολυψήφιο δείκτη LED επτά τμημάτωνΒασικά το ίδιο όπως όταν συνδέετε έναν μονοψήφιο δείκτη. Το μόνο πράγμα είναι ότι τα τρανζίστορ ελέγχου προστίθενται στις κάθοδοι (άνοδοι) των δεικτών:

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

Η ένδειξη με εκκενώσεις πραγματοποιείται δυναμικά:
— ο δυαδικός κωδικός του αντίστοιχου ψηφίου ορίζεται στις εξόδους της θύρας PB για το 1ο ψηφίο και, στη συνέχεια, το λογικό επίπεδο εφαρμόζεται στο τρανζίστορ ελέγχου του πρώτου ψηφίου
— ο δυαδικός κωδικός του αντίστοιχου ψηφίου ορίζεται στις εξόδους της θύρας PB για το 2ο ψηφίο και, στη συνέχεια, το λογικό επίπεδο εφαρμόζεται στο τρανζίστορ ελέγχου του δεύτερου ψηφίου
— ο δυαδικός κωδικός του αντίστοιχου ψηφίου ορίζεται στις εξόδους της θύρας PB για το 3ο ψηφίο και, στη συνέχεια, το λογικό επίπεδο εφαρμόζεται στο τρανζίστορ ελέγχου του τρίτου ψηφίου
- έτσι σε κύκλο
Σε αυτή την περίπτωση, είναι απαραίτητο να ληφθούν υπόψη:
— για δείκτες με ΕΝΤΑΞΕΙχρησιμοποιείται δομή τρανζίστορ ελέγχου NPN(ελέγχεται από λογική μονάδα)
- για ένδειξη με ΟΑ- τρανζίστορ δομής PNP(ελέγχεται από το λογικό μηδέν)

Σίγουρα έχετε ήδη δει τους δείκτες «οκτώ». Πρόκειται για μια ένδειξη LED επτά τμημάτων, η οποία χρησιμεύει για την εμφάνιση αριθμών από το 0 έως το 9, καθώς και την υποδιαστολή ( Δ.Π.- Δεκαδικό σημείο) ή κόμμα.

Δομικά, αυτό το προϊόν είναι ένα συγκρότημα LED. Κάθε LED στο συγκρότημα φωτίζει το δικό του τμήμα πινακίδας.

Ανάλογα με το μοντέλο, το συγκρότημα μπορεί να αποτελείται από 1 - 4 ομάδες επτά τμημάτων. Για παράδειγμα, η ένδειξη ALS333B1 αποτελείται από μια ομάδα επτά τμημάτων, η οποία μπορεί να εμφανίζει μόνο ένα ψηφίο από το 0 έως το 9.

Αλλά η ένδειξη LED KEM-5162AS έχει ήδη δύο ομάδες επτά τμημάτων. Είναι διψήφιο. Η παρακάτω φωτογραφία δείχνει διαφορετικές ενδείξεις LED επτά τμημάτων.

Υπάρχουν επίσης δείκτες με 4 ομάδες επτά τμημάτων - τετραψήφιο (εικόνα - FYQ-5641BSR-11). Μπορούν να χρησιμοποιηθούν σε σπιτικά ηλεκτρονικά ρολόγια.

Πώς υποδεικνύονται οι δείκτες επτά τμημάτων στα διαγράμματα;

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

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

Χαρακτηριστικά δεικτών επτά τμημάτων.

Παρά τη φαινομενική απλότητα αυτού του τμήματος, έχει επίσης τις δικές του ιδιαιτερότητες.

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

Εδώ, για παράδειγμα, είναι το pinout του τετραψήφιου δείκτη που είναι ήδη γνωστό σε εμάς FYQ-5641BSR-11.

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

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

Για να αυξήσετε το μέγεθος των αριθμών στην οθόνη και ταυτόχρονα να διατηρήσετε επαρκή φωτεινότητα κάθε τμήματος, χρησιμοποιούνται πολλά LED, συνδεδεμένα σε σειρά. Εδώ είναι ένα παράδειγμα ενός τέτοιου δείκτη - ταιριάζει στην παλάμη του χεριού σας. Αυτό FYS-23011-BUB-21.

Το ένα τμήμα του αποτελείται από 4 LED συνδεδεμένα σε σειρά.

Για να φωτίσετε ένα από τα τμήματα (A, B, C, D, E, F ή G), πρέπει να εφαρμόσετε μια τάση 11,2 βολτ σε αυτό (2,8 V για κάθε LED). Μπορείτε να κάνετε λιγότερα, για παράδειγμα, 10 V, αλλά η φωτεινότητα θα μειωθεί επίσης. Η εξαίρεση είναι η υποδιαστολή (DP), το τμήμα του αποτελείται από δύο LED. Χρειάζεται μόνο 5 - 5,6 βολτ.

Δίχρωμοι δείκτες βρίσκονται και στη φύση. Για παράδειγμα, είναι ενσωματωμένα κόκκινα και πράσινα LED. Αποδεικνύεται ότι υπάρχουν, όπως ήταν, δύο δείκτες ενσωματωμένοι στη θήκη, αλλά με LED διαφορετικών χρωμάτων. Εάν εφαρμόσετε τάση και στα δύο κυκλώματα LED, μπορείτε να πάρετε μια κίτρινη λάμψη από τα τμήματα. Ακολουθεί ένα διάγραμμα καλωδίωσης για έναν από αυτούς τους δίχρωμους δείκτες (SBA-15-11EGWA).

Εάν συνδέσετε τις ακίδες 1 ( ΚΟΚΚΙΝΟΣ) και 5 ( ΠΡΑΣΙΝΟΣ) στην τροφοδοσία «+» μέσω τρανζίστορ κλειδιών, μπορείτε να αλλάξετε το χρώμα των εμφανιζόμενων αριθμών από κόκκινο σε πράσινο. Και αν συνδέσετε τις ακίδες 1 και 5 ταυτόχρονα, το χρώμα λάμψης θα είναι πορτοκαλί. Έτσι μπορείτε να παίξετε με τους δείκτες.

Διαχείριση δεικτών επτά τμημάτων.

Για τον έλεγχο των δεικτών επτά τμημάτων σε ψηφιακές συσκευές, χρησιμοποιούνται καταχωρητές μετατόπισης και αποκωδικοποιητές. Για παράδειγμα, ένας ευρέως χρησιμοποιούμενος αποκωδικοποιητής για τον έλεγχο των δεικτών των σειρών ALS333 και ALS324 είναι ένα μικροκύκλωμα K514ID2ή K176ID2. Εδώ είναι ένα παράδειγμα.

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

Για τον έλεγχο μεγάλων ενδείξεων επτά τμημάτων, όπως το FYS-23011-BUB-21, χρησιμοποιούνται εξειδικευμένα προγράμματα οδήγησης, για παράδειγμα, ένα μικροκύκλωμα MBI5026.

Τι υπάρχει μέσα στον δείκτη επτά τμημάτων;

Λοιπόν, κάτι νόστιμο. Οποιοσδήποτε μηχανικός ηλεκτρονικών δεν θα ήταν τέτοιος εάν δεν τον ενδιέφεραν τα «μέσα» των εξαρτημάτων του ραδιοφώνου. Αυτό είναι μέσα στην ένδειξη ALS324B1.

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

Στο σημερινό άρθρο θα μιλήσουμε για δείκτες 7 τμημάτων και πώς να "κάνετε φίλους" με το Arduino. Υπάρχουν πολλές επιλογές. Το πιο εύκολο, φυσικά, είναι να πάτε και αγοράστε έναν έτοιμο δείκτη με ενσωματωμένη ασπίδα (έτσι λέγεται η κάρτα που ταιριάζει), αλλά δεν ψάχνουμε εύκολους τρόπους, οπότε θα πάρουμε λίγο πιο δύσκολο δρόμο. Αρχάριοι - μην ανησυχείτε, αυτό το άρθρο, όπως και τα προηγούμενα άρθρα μου (Και ) μόνο για σένα. Αφήστε τους γκουρού να γράφουν για τους ίδιους έμπειρους γκουρού, και εγώ είμαι αρχάριος - γράφω για αρχάριους.

Γιατί ένας δείκτης 7 τμημάτων; Άλλωστε, υπάρχουν τόσες πολλές διαφορετικές οθόνες, με μεγάλο αριθμό χαρακτήρων, γραμμές, διάφορες διαγώνιες και αναλύσεις, ασπρόμαυρες και έγχρωμες, η πιο προσιτή από τις οποίες κοστίζει δυο δολάρια... Και εδώ: η «παλιά» ένα, εξωφρενικά απλό, αλλά απαιτεί έναν τεράστιο αριθμό ακίδων ένδειξη 7-τμημάτων, αλλά και πάλι αυτός ο «γέρος» έχει επίσης ένα πλεονέκτημα. Το γεγονός είναι ότι χρησιμοποιώντας τα σκίτσα που δίνονται εδώ μπορείτε να αναβιώσετε όχι μόνο έναν δείκτη με ύψος ψηφίου 14 mm, αλλά και πιο σοβαρά (αν και σπιτικά) έργα και τα ψηφία του μετρητή σε αυτή την περίπτωση απέχουν πολύ από το όριο. Αυτό μπορεί να μην είναι τόσο ενδιαφέρον για τους κατοίκους των πρωτευουσών, αλλά ο πληθυσμός της Novokatsapetovka ή της Nizhnyaya Kedrovka θα είναι πολύ χαρούμενος αν εμφανιστεί ένα ρολόι σε μια λέσχη ή ένα συμβούλιο χωριού που μπορεί επίσης να εμφανίσει την ημερομηνία και τη θερμοκρασία και θα μιλήσουν για τον δημιουργό αυτού του ρολογιού για πολύ μεγάλο χρονικό διάστημα. Αλλά τέτοια ρολόγια είναι το θέμα ενός ξεχωριστού άρθρου: οι επισκέπτες θα θέλουν - Θα γράψω. Όλα όσα γράφτηκαν παραπάνω μπορούν να θεωρηθούν ως εισαγωγή. Όπως και το τελευταίο μου άρθρο, αυτό το άρθρο θα αποτελείται από μέρη, αυτή τη φορά σε δύο. Στο πρώτο μέρος θα «διαχειριστούμε» απλώς τον δείκτη και στο δεύτερο θα προσπαθήσουμε να τον προσαρμόσουμε για κάτι τουλάχιστον λίγο χρήσιμο. Ας συνεχίσουμε λοιπόν:

Μέρος πρώτο. Πειραματικό – εκπαιδευτικό

Η βάση για αυτό το έργο είναι το ARDUINO UNO, το οποίο μας είναι ήδη πολύ γνωστό από προηγούμενα άρθρα. Να σας υπενθυμίσω ότι ο πιο εύκολος τρόπος να το αγοράσετε είναι εδώ:ή εδώ: , επιπλέον, θα χρειαστείτε έναν 4ψήφιο δείκτη 7 τμημάτων. Έχω, συγκεκριμένα, το GNQ-5641BG-11. Γιατί αυτό; Ναι, απλά επειδή πριν από 5 χρόνια το αγόρασα κατά λάθος, τεμπελιάστηκα να πάω να το αλλάξω, οπότε ήταν ξαπλωμένο όλο αυτό το διάστημα και περίμενε στα φτερά. Νομίζω ότι οποιοσδήποτε με κοινή άνοδο θα κάνει (και με κοινή κάθοδο είναι δυνατό, αλλά θα πρέπει να αντιστρέψετε τα δεδομένα του πίνακα και άλλες τιμές θύρας - δηλαδή να τις αλλάξετε στις αντίθετες), αρκεί να δεν είναι πολύ δυνατό για να μην κάψει το Arduino. Επιπλέον, 4 αντιστάσεις περιορισμού ρεύματος, περίπου 100 Ohm η καθεμία, και ένα κομμάτι καλωδίου (10 cm ήταν αρκετό για μένα) για 12 ακίδες (πυρήνες) μπορούν να «ξεκοπούν» από την ευρύτερη, κάτι που έκανα. Ή μπορείτε ακόμη και να τα κολλήσετε με ξεχωριστά καλώδια, δεν θα υπάρχουν προβλήματα. Θα χρειαστείτε και καρφίτσες για τη σανίδα (11 τεμάχια), αν και αν είστε προσεκτικοί μπορείτε και χωρίς αυτές. Ένα σκίτσο του δείκτη φαίνεται στο Σχήμα 1 και το διάγραμμα του στο Σχήμα 2. Θα σημειώσω επίσης ότι είναι καλύτερο να τροφοδοτείτε όχι περισσότερο από 2,1 V σε κάθε τμήμα αυτού του δείκτη (περιορίζεται από αντιστάσεις 100 Ohm) και σε αυτή την περίπτωση δεν θα καταναλώνει περισσότερο από 20 mA. Αν ανάψει ο αριθμός «8», η κατανάλωση δεν θα ξεπεράσει τα 7x20=140 mA, κάτι που είναι αρκετά αποδεκτό για τις εξόδους Arduino. Ένας περίεργος αναγνώστης θα κάνει την ερώτηση: "Αλλά 4 εκφορτίσεις των 140 mA η καθεμία είναι ήδη 4x140 = 560 mA, και αυτό είναι ήδη πάρα πολύ!" Θα απαντήσω - θα μείνουν 140 Πώς; Διαβάστε παρακάτω! Η θέση των ακίδων στον δείκτη φαίνεται στο Σχήμα 3. Και κάνουμε τη σύνδεση σύμφωνα με τον Πίνακα 1.


Ρύζι. 1 - Σκίτσο ένδειξης


Ρύζι. 2 - Κύκλωμα ένδειξης


Ρύζι. 3 - Καρφίτσα τοποθεσία

Πίνακας 1

Pin Arduino Uno

Πείρο ένδειξης

Σημείωμα

Το τμήμα G

Τμήμα ΣΤ

Τμήμα Ε

Τμήμα Δ

Τμήμα Γ

Τμήμα Β

Τμήμα Α

Η κοινή άνοδος του τμήματος Νο. 1, συνδέεται μέσω μιας αντίστασης 100 Ohm.

Η κοινή άνοδος του τμήματος Νο. 2, συνδέεται μέσω μιας αντίστασης 100 Ohm.

Η κοινή άνοδος του τμήματος Νο. 3, συνδέεται μέσω μιας αντίστασης 100 Ohm.

Η κοινή άνοδος του τμήματος Νο. 6, συνδέεται μέσω μιας αντίστασης 100 Ohm.



Συμπληρώνουμε ένα απλό σκίτσο, το οποίο είναι ένας απλός «πίνακας μέτρησης» από το 0 έως το 9:


Τώρα για μια διευκρίνιση. Το DDRD είναι ένας καταχωρητής της θύρας D (DDRB - αντίστοιχα, θύρα Β) πίσω από την "τρομακτική" λέξη "register" υπάρχει απλώς μια "κρυφή" συνάρτηση που υποδεικνύει εάν η θύρα θα διαβάσει κάτι με την καρφίτσα της (λήψη πληροφοριών) ή αντίστροφη αντίστροφα θα είναι δυνατό να γίνει κάτι εκεί μετά γράψε (δώσε πληροφορίες). Σε αυτήν την περίπτωση, η γραμμή DDRD=B11111111; υποδεικνύει ότι όλες οι ακίδες της θύρας D εξέρχονται, δηλ. πληροφορίες θα βγουν από αυτά. Το γράμμα "B" σημαίνει ότι ένας δυαδικός αριθμός είναι γραμμένος στο μητρώο. Ένας ανυπόμονος αναγνώστης θα ρωτήσει αμέσως: "Είναι δυνατή η δεκαδική!;!" Σπεύδω να σας διαβεβαιώσω ότι είναι δυνατό, αλλά περισσότερα για αυτό λίγο αργότερα. Αν θέλαμε να χρησιμοποιήσουμε τη μισή θύρα για είσοδο και τη μισή για έξοδο, θα μπορούσαμε να την ορίσουμε ως εξής: DDRD=B11110000; Οι μονάδες δείχνουν εκείνες τις καρφίτσες που θα δώσουν πληροφορίες και οι μηδενικές δείχνουν αυτές που θα λάβουν αυτές τις πληροφορίες. Η κύρια ευκολία του μητρώου έγκειται επίσης στο γεγονός ότι δεν χρειάζεται να καταχωρήσετε όλα τα pin 8 φορές, δηλ. αποθηκεύουμε 7 γραμμές στο πρόγραμμα. Ας δούμε τώρα την παρακάτω γραμμή:

PORTB=B001000; // ορίστε την ακίδα 11 της θύρας Β ψηλά

Το PORTB είναι ο καταχωρητής δεδομένων της θύρας Β, δηλ. Γράφοντας έναν αριθμό σε αυτό, υποδεικνύουμε ποια ακίδα της θύρας θα έχει ένα και ποια θα έχει μηδέν. Εκτός από το σχόλιο, θα πω ότι αν πάρετε το Arduino Uno με τέτοιο τρόπο ώστε να βλέπετε τον ελεγκτή και τα ψηφιακά pins να είναι από πάνω, η είσοδος στο μητρώο θα είναι σαφής, δηλ. ποιο «μηδέν» (ή «ένα») αντιστοιχεί σε ποιο pin, δηλ. Το δεξί μηδέν της θύρας Β είναι υπεύθυνο για την 8η ακίδα και το πιο αριστερό είναι για την 13η (η οποία έχει ενσωματωμένο LED). Για τη θύρα D, αντίστοιχα, η δεξιά είναι για την ακίδα 0, η αριστερή είναι για την ακίδα 7.
Ελπίζω μετά από τέτοιες λεπτομερείς εξηγήσεις όλα να είναι ξεκάθαρα, αλλά επειδή είναι ξεκάθαρα, προτείνω να επιστρέψουμε στο δεκαδικό σύστημα αριθμών που είναι γνωστό σε εμάς και αγαπημένο από την παιδική ηλικία. Και κάτι ακόμα - ένα σκίτσο 25 γραμμών μπορεί να φαίνεται μικρό, αλλά για έναν αρχάριο εξακολουθεί να είναι κάπως δυσκίνητο. Θα το μειώσουμε.

Ας συμπληρώσουμε ένα ακόμα πιο απλό σκίτσο, τον ίδιο «πίνακα μέτρησης»:


Βίντεο 1.
Μόνο 11 γραμμές! Αυτός είναι ο δικός μας τρόπος, ο «νέος τρόπος»! Λάβετε υπόψη ότι αντί για δυαδικούς αριθμούς, στα μητρώα γράφονται δεκαδικοί αριθμοί. Φυσικά, για τους δεκαδικούς αριθμούς δεν χρειάζονται γράμματα μπροστά. Νομίζω ότι δεν θα ήταν κακό να βάλουμε όλους τους αριθμούς σε πίνακες.

Πίνακας 2. Αντιστοιχία του εμφανιζόμενου χαρακτήρα με τα δεδομένα θύρας

Κοινή άνοδος

Κοινή κάθοδος

Δυαδικό σύστημα

Μετρικό σύστημα

Δυαδικό σύστημα

Μετρικό σύστημα

Πίνακας 3. Αντιστοιχία του εμφανιζόμενου ψηφίου με τα δεδομένα θύρας

Κοινή άνοδος

Κοινή κάθοδος

Δυαδικό σύστημα

Μετρικό σύστημα

Δυαδικό σύστημα

Μετρικό σύστημα



Προσοχή! Τα δεδομένα στους πίνακες 2 και 3 ισχύουν μόνο όταν είναι ενσύρματα σύμφωνα με τον πίνακα 1.
Τώρα ας ανεβάσουμε ένα σκίτσο με έναν "πίνακα μέτρησης" από το 0 έως το 9999:




Ρύζι. 4 - Πίνακας μέτρησης

Μπορείτε να δείτε το σκίτσο σε δράση στοΒίντεο 2.

Υπάρχουν περισσότερα σχόλια σε αυτό το σκίτσο παρά ο ίδιος ο κώδικας. Δεν πρέπει να υπάρχουν ερωτήσεις... Εκτός από ένα πράγμα, τι είδους «κύκλος τρεμοπαίζει» είναι αυτός, τι, αυστηρά μιλώντας, τρεμοπαίζει εκεί και γιατί; Και υπάρχει επίσης κάποιο είδος μεταβλητής για αυτό...
Και το όλο θέμα είναι ότι τα τμήματα με το ίδιο όνομα και των τεσσάρων κατηγοριών συνδέονται σε ένα σημείο. Τα Α1, Α2, Α3 και Α4 έχουν κοινή κάθοδο. A1, B1,…..G1 κοινή άνοδος. Έτσι, εφαρμόζοντας ταυτόχρονα το "1234" στον τετραψήφιο δείκτη, θα λάβουμε "8888" και θα εκπλαγούμε πολύ με αυτό. Για να μην συμβεί αυτό, πρέπει πρώτα να ανάψετε το «1» στην κατηγορία σας, μετά να το απενεργοποιήσετε, να ανάψετε το «2» στη δική σας κ.λπ. Εάν το κάνετε αυτό πολύ γρήγορα, το τρεμόπαιγμα των αριθμών θα συγχωνευθεί, όπως τα καρέ σε μια ταινία, και το μάτι πρακτικά δεν θα το παρατηρήσει. Και η μέγιστη τιμή της μεταβλητής που τρεμοπαίζει σε αυτήν την περίπτωση ελέγχει την ταχύτητα αλλαγής αριθμών στην ένδειξη. Παρεμπιπτόντως, ακριβώς χάρη σε αυτό το "τρεμόπαιγμα" η μέγιστη κατανάλωση ρεύματος είναι μόνο 140 mA, αντί για 560. Τώρα προτείνω να προχωρήσουμε σε κάτι πιο χρήσιμο.

Μέρος δεύτερο. Τουλάχιστον λίγο χρήσιμο

Σε αυτό το μέρος, θα εξάγουμε χαρακτήρες από έναν προσωπικό υπολογιστή σε μια ένδειξη 7 τμημάτων χρησιμοποιώντας το ARDUINO MEGA. Γιατί προέκυψε ξαφνικά η ιδέα της «αλλαγής αλόγων στο πέρασμα»; Υπάρχουν δύο λόγοι: πρώτον, δεν είχα σκεφτεί ποτέ το ARDUINO MEGA στα άρθρα μου πριν. και δεύτερον, στο ARDUINO UNO δεν έχω καταλάβει ακόμα πώς μπορώ να αλλάξω δυναμικά τη θύρα COM και τη θύρα D. Αλλά είμαι αρχάριος - μπορώ να με συγχωρέσουν. Φυσικά, μπορείτε να αγοράσετε αυτόν τον ελεγκτή εδώ: . Για να εφαρμόσω το σχέδιο, έπρεπε να πάρω ένα κολλητήρι και να ξανακολλήσω το καλώδιο από την πλευρά του Arduino και επίσης να γράψω ένα νέο σκίτσο. Μπορείτε να δείτε πώς είναι κολλημένο το καλώδιο στο Σχήμα 5. Το θέμα είναι ότι το ARDUINO MEGA και το ARDUINO UNO έχουν διαφορετικά pinouts θυρών και το Mega έχει πολλές περισσότερες θύρες. Η αντιστοιχία των ακίδων που χρησιμοποιήθηκαν φαίνεται από τον Πίνακα 4.



Ρύζι. 5 - Νέα καλωδίωση

Πίνακας 4

Port Mega


Προσοχή! Αυτός ο πίνακας ισχύει μόνο για αυτό το έργο!

Θα πρέπει επίσης να σημειώσετε ότι η θύρα C του Arduino Mega «ξεκινά» από τον ακροδέκτη 37 και μετά με φθίνουσα σειρά, και η θύρα Α ξεκινά από τον ακροδέκτη 22 και μετά με αύξουσα σειρά.



Ρύζι. 6 - Γενική άποψη



Μικρά χαρακτηριστικά υλοποίησης: θα βγάλουμε 4 χαρακτήρες. Οι χαρακτήρες πρέπει να είναι αριθμοί. Εάν πληκτρολογήσατε "1234" και θα δούμε "1234", εάν πληκτρολογήσατε "123456" θα συνεχίσουμε να βλέπουμε "1234", εάν πληκτρολογήσατε "ytsuk", "fyva1234", "otiog485909oapom" - δεν θα δούμε τίποτα. Εάν πληκτρολογήσετε "pp2345mm" θα δούμε "23" δηλ. μικρό, ενσωματωμένο "αδιάβροχο".

Το πραγματικό σκίτσο:



Μπορείτε να δείτε πώς λειτουργεί αυτό το πρόγραμμα στοΒίντεο 3.



Κριτική που ετοιμάστηκε από τον Pavel Sergeev

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

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

Σε κάθε μία από τις διακοπές με διάστημα 2 ms (στην περίπτωση αυτή από το χρονόμετρο TMR0), προετοιμάζεται ένα στάδιο δυναμικής ένδειξης (DI) σύμφωνα με έναν αλγόριθμο που αποτελείται από πέντε φάσεις ελέγχου καταχωρητή και δείκτη.

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

3η φάση: ελέγχοντας τις ακίδες καταχωρητή 14 (DS - δεδομένα) και 11 (SH_CP - clock), ο κώδικας για τον έλεγχο των τμημάτων γράφεται σε αυτό.

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

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

Εάν το κύκλωμα χρησιμοποιεί μια ένδειξη 4 ψηφίων, τότε για σωστή λειτουργία πρέπει να ρυθμιστεί στο ΟΚ. Εάν πρέπει να ελέγξετε 8 bit, τότε χρησιμοποιούνται 8 θύρες του MK, ενώ οι υπόλοιπες 4 θύρες απλώς ελέγχουν τα bit (στη φάση 4 θα πρέπει να έχουν υψηλό επίπεδο). Αξίζει να σημειωθεί ότι σε αυτήν την περίπτωση είναι δυνατή η χρήση δεικτών τόσο με ΟΚ όσο και με ΟΑ, συνδέοντας τμήματα ή ψηφία στον καταχωρητή, αντίστοιχα (για τους λόγους που αναφέρονται παρακάτω, στην πρώτη περίπτωση είναι προτιμότερο να οργανωθεί το τμήμα DI ανά τμήμα, και στο δεύτερο - bit-by-bit).

Χρησιμοποιώντας αυτήν τη μέθοδο, μπορείτε να συνδέσετε δύο ενδείξεις τεσσάρων bit στο PIC16F676 MCU χρησιμοποιώντας έναν καταχωρητή μετατόπισης, ενώ αφήνετε έως και τέσσερις ελεύθερες θύρες για χρήση. , για παράδειγμα, για μια τέτοια σύνδεση, οι άνθρωποι χρησιμοποίησαν το συνδυασμό DI και αναλογικών συναρτήσεων εισόδου σε ορισμένες θύρες MK (κατά τη γνώμη μου, μια εξαιρετικά αμφίβολη απόφαση), η οποία οδήγησε σε σημαντική επιπλοκή του κυκλώματος και σε ορισμένους περιορισμούς, οι συγγραφείς προειδοποιούν για. Χρησιμοποιώντας το διάγραμμα σύνδεσής μου, όλα θα λυνόταν απλά και όμορφα - ξεχωριστές είσοδοι, ξεχωριστές ενδείξεις, συν δύο ακόμη θύρες (συμπεριλαμβανομένου του MCLR) για κουμπιά.

Για τη δοκιμή αυτής της μεθόδου ελέγχου, προτείνεται το ακόλουθο απλό κύκλωμα στο PIC12F629 MCU και στην ένδειξη FYQ3641A, που εμφανίζει εναλλάξ τη λέξη "test" και τον αριθμό 1234 στην ένδειξη.

Εδώ αποφασίστηκε να χρησιμοποιηθεί ένα τμήμα προς τμήμα DI (ένα τμήμα είναι ενεργοποιημένο κάθε στιγμή και υπάρχει ένας κωδικός στις ακίδες bit, όπου σε κάθε bit: 0 - εάν αυτό το τμήμα πρέπει να ανάβει σε ένα δεδομένο bit και 1 - διαφορετικά), στην οποία τα ρεύματα αιχμής μεταφέρονται στο μητρώο . Γιατί; Υπάρχουν δύο λόγοι για αυτό: πρώτον, η μέγιστη χωρητικότητα φορτίου των εξόδων 74HC595 είναι 35 mA έναντι 25 mA για ελεγκτές PIC. Το δεύτερο και κύριο πράγμα είναι ότι ένα ρεύμα κοντά στο όριο μέσω της θύρας εξόδου του MK μπορεί θεωρητικά να αυξήσει το δυναμικό εξόδου του στο επίπεδο εναλλαγής των εισόδων καταχωρητή, γεγονός που θα οδηγούσε σε λειτουργικά σφάλματα. Και έτσι, ρεύματα 6-7 mA ρέουν στις θύρες MK και τα δυναμικά στις εξόδους σίγουρα δεν ξεπερνούν τα επίπεδα TTL.

Όπως αναφέρθηκε παραπάνω, το διάστημα διακοπής είναι 2 ms, το οποίο αντιστοιχεί στον ρυθμό ανανέωσης του δείκτη 64 Hz και η λάμψη του είναι αρκετά άνετη για το μάτι.

Αυτή η μέθοδος DI, μεταξύ άλλων, κατέστησε δυνατή τη μείωση στο μισό του αριθμού των αντιστάσεων περιορισμού ρεύματος (R2-R5).

Η συσκευή συναρμολογείται σε ένα λεγόμενο breadboard "χωρίς συγκόλληση".

Η ένδειξη μπορεί να αντικατασταθεί με οποιαδήποτε από τη σειρά 3641A.

Το κύκλωμα τροφοδοτείται από μια σταθεροποιημένη πηγή 5 V. Χρησιμοποίησα μια ειδική πλακέτα σταθεροποιητή που έχει σχεδιαστεί για χρήση σε συνδυασμό με την πλακέτα που αναφέρεται παραπάνω.

Το πρόγραμμα ελέγχου MK είναι γραμμένο σε γλώσσα C και μεταφρασμένο στο περιβάλλον.

Κωδικός σε MikroC, έργο, αρχείο HEX στην εφαρμογή.

Για να χρησιμοποιήσετε αυτήν τη μέθοδο σύνδεσης σε εμπορικές εξελίξεις, επικοινωνήστε μαζί μου.

Κατάλογος ραδιοστοιχείων

Ονομασία Τύπος Ονομασία Ποσότητα ΣημείωμαΚατάστημαΤο σημειωματάριό μου
DD1 MK PIC 8-bit

PIC12F629

1 Στο σημειωματάριο
DD2 Μητρώο74HC5951 Στο σημειωματάριο
H.L. ΔείκτηςFYQ36411 Στο σημειωματάριο
R1 Αντίσταση

30 kOhm

1 Στο σημειωματάριο
R2 Αντίσταση

430 Ohm

1 Στο σημειωματάριο
R3 Αντίσταση

430 Ohm

1