Χρονόμετρο στις ενδείξεις ATmega8 και LED. Προγραμματισμός μικροελεγκτών AVR Timer σε μικροελεγκτή atmega8 με οθόνη LCD

Μάθημα 10

Χρονόμετρα-μετρητές. Διακόπτει

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

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

Και αυτοί οι χρονομετρητές-μετρητές μετρούν συνεχώς, αν τους προετοιμάσουμε.

Χρονόμετρα σε MK Atmega8τρία.

Δύο από αυτά είναι οκτώ-bitχρονόμετρα, δηλαδή αυτά που μπορούν να μετρήσουν μόνο έως 255. Αυτή η τιμή δεν θα είναι αρκετή για εμάς. Ακόμα κι αν εφαρμόσουμε το μέγιστο διαχωριστή συχνότητας, τότε δεν θα μετρήσουμε ένα δευτερόλεπτο, δεν θα μπορούμε να μετρήσουμε ούτε μισό δευτερόλεπτο. Και το καθήκον μας είναι ακριβώς τέτοιο να μετράμε έως και 1 δευτερόλεπτο για να ελέγξουμε την αύξηση του αριθμού της ένδειξης LED. Μπορείτε, φυσικά, να εφαρμόσετε μια άλλη συσσώρευση της μεταβλητής σε μια συγκεκριμένη τιμή, αλλά θα ήθελα να έχω έναν εντελώς λογαριασμό υλικού.

Αλλά υπάρχει ένα ακόμη χρονόμετρο - αυτό είναι ένα πλήρες 16-bitμετρών την ώραν. Δεν είναι μόνο 16-bit, αλλά έχει επίσης ορισμένες γοητείες που δεν έχουν τα άλλα χρονόμετρα. Θα εξοικειωθούμε με αυτές τις επιλογές αργότερα.

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

Τώρα, εν συντομία για τις διακοπές.

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

Υπάρχουν 19 τύποι διακοπών στον ελεγκτή Atmega8. Εδώ είναι όλα στον πίνακα στην τεχνική τεκμηρίωση για τον ελεγκτή.

Τι είδους συνθήκες μπορεί να υπάρχουν; Στην περίπτωσή μας, για παράδειγμα, ο χρονοδιακόπτης έχει μετρήσει μέχρι μια ορισμένη τιμή, ή, για παράδειγμα, ένα byte και άλλες συνθήκες έχουν φτάσει σε κάποιο δίαυλο.

Προς το παρόν, θα χειριστούμε τη διακοπή, η οποία βρίσκεται στον πίνακα που βρίσκεται 7 θέσεις ψηλότερα - TIMER1 COMPAκαλέστηκε στη διεύθυνση 0x006.

Τώρα ας ρίξουμε μια ματιά στο χρονόμετρό μας 16-bit, ή ΧΡΟΝΟΛΟΓΟΣ1.

Εδώ είναι το δομικό του διάγραμμα.

Βλέπουμε ένα μητρώο εκεί TCNTn, στο οποίο ο αριθμός αλλάζει συνεχώς, δηλαδή αυξάνεται συνεχώς. Στην πράξη, αυτός είναι ο μετρητής. Δηλαδή, αυτό το μητρώο αποθηκεύει τον αριθμό στον οποίο έχει μετρήσει το χρονόμετρο.

Και στα μητρώα OCRnAκαι OCRnB(τα γράμματα n είναι ο αριθμός χρονοδιακόπτη, στην περίπτωσή μας θα είναι 1) - αυτοί είναι οι καταχωρητές στους οποίους εισάγουμε τον αριθμό με τον οποίο θα συγκριθεί ο αριθμός στο μητρώο TCNTn.

Για παράδειγμα, εισαγάγαμε κάποιο αριθμό στον καταχωρητή OCRnA και μόλις αυτός ο αριθμός συμπίπτει με την τιμή στον καταχωρητή καταμέτρησης, θα προκύψει μια διακοπή και μπορούμε να τον χειριστούμε. Τα χρονόμετρα με διακοπές είναι πολύ παρόμοια με τη συνήθη καθυστέρηση στον κώδικα, μόνο όταν είμαστε σε καθυστέρηση, τότε δεν μπορούμε να εκτελέσουμε κανένα κώδικα εκείνη τη στιγμή (καλά, πάλι, μεταφορικά "εμείς", στην πραγματικότητα ALU). Και όταν το χρονόμετρο μετράει, τότε ολόκληρος ο κώδικας του προγράμματος μας αυτή τη στιγμή εκτελείται αθόρυβα. Έτσι κερδίζουμε τεράστια, μη επιτρέποντας στους τεράστιους πόρους του ελεγκτή να είναι αδρανείς για ένα δευτερόλεπτο ή ακόμη και μισό δευτερόλεπτο. Αυτή τη στιγμή, μπορούμε να χειριστούμε πατήματα κουμπιών, τα οποία μπορούμε επίσης να χειριστούμε στο χρονόμετρο και πολλά άλλα.

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

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

Αποτελείται από δύο μισά, αφού ο ελεγκτής μας είναι 8-bit και δεν μπορεί να έχει καταχωρητές 16-bit. Επομένως, στο μισό του μητρώου (και φυσικά σε ένα μητρώο) αποθηκεύεται το πάνω μέρος του μητρώου και στο άλλο - το κάτω μέρος. Μπορείτε επίσης να το ονομάσετε ζεύγος καταχωρητών που αποτελείται από δύο ξεχωριστούς καταχωρητές TCCR1A και TCCR1B. Digηφίο 1 σημαίνει ότι ο καταχωρητής ανήκει στο χρονόμετρο 1.

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

Τα bit WGM είναι υπεύθυνα για τη ρύθμιση της λειτουργίας

Βλέπουμε πολλές λειτουργίες εδώ.

Κανονικός- αυτή είναι η συνήθης λειτουργία, το χρονόμετρο μετράει μέχρι το τέλος.

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

CTC- πρόκειται για επαναφορά σύμπτωσης, ακριβώς αυτό που χρειαζόμαστε. Εδώ συγκρίνονται οι καταχωρητές TCNT και OCR. Υπάρχουν δύο τέτοιες λειτουργίες, χρειαζόμαστε το πρώτο, το δεύτερο λειτουργεί με διαφορετικό μητρώο.

Δεν θα μελετήσουμε όλους τους τύπους τρόπων σε αυτό το μάθημα. Όταν χρειαζόμαστε αυτούς τους τρόπους, τότε θα το καταλάβουμε.

Λοιπόν, ας μην βασανίζουμε τον εαυτό μας με τεκμηρίωση και τελικά προσπαθούμε να βάλουμε κάτι σε μερικά μητρώα.

Ο κώδικας, όπως πάντα, δημιουργήθηκε από προηγούμενο έργο. Για το proteus, ο κώδικας αντιγράφηκε και μετονομάστηκε από το τελευταίο μάθημα και η διαδρομή προς το νέο υλικολογισμικό καθορίστηκε στις ιδιότητες του ελεγκτή. Θα ονομάσουμε τα έργα Test07.

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

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

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

Επομένως, θα καλέσουμε την πρώτη συνάρτηση timer_ini

//———————————————

κενόςtimer_ini( κενός)

{

}

//———————————————

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

Αυτή η συνάρτηση, όπως μπορούμε να δούμε, δεν έχει ορίσματα - ούτε εισαγωγή ούτε επιστρεπτέα. Ας καλέσουμε αμέσως αυτήν τη συνάρτηση στην συνάρτηση main ().

ανυπόγραφοαπανθρακώνωbutcount = 0,butstate = 0;

timer_ini();

Τώρα θα αρχίσουμε να συμπληρώνουμε αυτήν τη συνάρτηση με κώδικα.

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

κενόςtimer_ini( κενός)

TCCR1B|= (1<< WGM12);

Από το σχόλιο, βλέπουμε ότι δουλεύουμε με τα bit mode και θα ορίσουμε μόνο το bit WGM12 από αυτά, τα υπόλοιπα θα μείνουν ως μηδενικά. Με βάση αυτό, διαμορφώσαμε την ακόλουθη λειτουργία:

Το χρονόμετρο έχει επίσης ένα τέτοιο μητρώο - TIMSK... Αυτό το μητρώο είναι υπεύθυνο για τις μάσκες διακοπής - Μάσκα διακοπής... Αυτό το μητρώο είναι διαθέσιμο για όλα τα χρονόμετρα, όχι μόνο για το πρώτο, είναι συνηθισμένο. Σε αυτόν τον καταχωρητή, θα ορίσουμε το bit OCIE1A, η οποία θα ενεργοποιήσει τον τύπο διακοπής που χρειαζόμαστε TIMER1 COMPA

TCCR1B|= (1<< WGM12); // ορίστε τη λειτουργία STS (επαναφέρετε κατά σύμπτωση)

TIMSK|= (1<< OCIE1A);

Τώρα ας παίξουμε με τα ίδια τα μητρώα σύγκρισης. OCR1A (H και L)... Για να γίνει αυτό, πρέπει να κάνετε έναν μικρό υπολογισμό. Κανω ΕΓΓΡΑΦΗ OCR1AHαποθηκεύει το επάνω μέρος του αριθμού για σύγκριση και το μητρώο OCR1AL- ο νεότερος.

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

TIMSK|= (1<< OCIE1A); // ορίστε το bit ενεργοποίησης διακοπής για τον 1ο μετρητή κατά σύμπτωση με το OCR1A (H και L)

OCR1AH= 0b10000000;

OCR1AL= 0b00000000;

TCCR1B|= ( ); // ορίστε τον διαιρέτη.

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

Ενώ έχουμε στο μητρώο OCR1Aείναι ο αριθμός 0b1000000000000000, που αντιστοιχεί στον δεκαδικό αριθμό 32768.

Ο μικροελεγκτής μας λειτουργεί, όπως συμφωνήσαμε, σε συχνότητα 8.000.000 Hz.

Διαίρεση 8.000.000 με 32.768, παίρνουμε περίπου 244.14. Είναι με τέτοια συχνότητα σε hertz ότι ο χρονοδιακόπτης μας θα λειτουργήσει αν δεν εφαρμόσουμε ένα διαχωριστικό. Δηλαδή, οι αριθμοί μας θα αλλάξουν 244 φορές το δευτερόλεπτο, οπότε δεν θα τους δούμε καν. Επομένως, θα χρειαστεί να εφαρμόσετε ένα διαχωριστή συχνότητας χρονοδιακόπτη. Ας επιλέξουμε διαιρέτη με 256. Θα μας ταιριάξει μια χαρά και στη συνέχεια θα διορθώσουμε τον αριθμό σύγκρισης σε ακριβώς 1 Hz.

Εδώ είναι οι διαιρέτες για 1 χρονόμετρο

Έχω επιλέξει τον διαιρέτη που χρειαζόμαστε στον πίνακα. Βλέπουμε ότι χρειάζεται μόνο να ορίσουμε το bit CS12.

Δεδομένου ότι έχουμε ένα διαχωριστή συχνότητας 256, τότε θα διαιρέσουμε το 8000000 με αυτό το διαιρέτη, παίρνουμε 31250, έτσι πρέπει να εισάγουμε τον αριθμό στο TCNT. Μέχρι αυτόν τον αριθμό, ο χρονοδιακόπτης μας θα μετρήσει για να μετρήσει έως και 1 δευτερόλεπτο. Ο αριθμός 31250 είναι σε δυαδική αναπαράσταση 0b0111101000010010. Βάζουμε αυτόν τον αριθμό στο ζεύγος καταχωρητή και εφαρμόζουμε επίσης τον διαιρέτη

OCR1AH= 01111010 ; // γράψτε τον αριθμό για σύγκριση στο μητρώο

OCR1AL= 00010010 ;

TCCR1B|= (1<< CS12 ); // ορίστε τον διαιρέτη.

Αυτό είναι με αυτήν τη λειτουργία.

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

ISR( TIMER1_COMPA_vect)

{

}

Και το σώμα αυτής της συνάρτησης θα εκτελεστεί από μόνο του κατά την εμφάνιση της σύμπτωσης των αριθμών.

Θα χρειαστούμε μια μεταβλητή. Ας το δηλώσουμε παγκοσμίως, στην αρχή του αρχείου

#περιλαμβάνω

//———————————————

ανυπόγραφοαπανθρακώνωΕγώ;

//———————————————

Κατά συνέπεια, θα αφαιρέσουμε την ίδια μεταβλητή από τον κώδικα στη συνάρτηση main ().

intκύριος( κενός)

ανυπόγραφοαπανθρακώνωΕγώ;

Θα σχολιάσουμε επίσης όλο τον κώδικα σε έναν άπειρο βρόχο. Ο ρόλος του θα εκτελείται τώρα από ένα χρονόμετρο και, νομίζω, θα το αντιμετωπίσει όχι χειρότερα, και ακόμη καλύτερα, χωρίς να παρεμβαίνει σε "κανέναν".

ενώ(1)

{

// για (i = 0; i<10;i++)

// {

// while (butstate == 0)

// {

// εάν (! (PINB & 0b00000001))

// {

// εάν (butcount< 5)

// {

// butcount ++;

// }

// άλλο

// {

// i = 0;

// butstate = 1;

// }

// }

// άλλο

// {

// if (butcount> 0)

// {

// butcount—;

// }

// άλλο

// {

// butstate = 1;

// }

// }

// }

// segchar (i);

// _delay_ms (500);

// butstate = 0;

// }

Τώρα, στην πραγματικότητα, το σώμα του χειριστή λειτουργεί. Εδώ θα καλέσουμε τη συνάρτηση segchar. Στη συνέχεια θα αυξήσουμε κατά 1 μεταβλητή Εγώ... Και για να μην ξεπεράσει τον μονοψήφιο αριθμό, θα τον μηδενίσουμε υπό αυτήν την προϋπόθεση

ISR( TIMER1_COMPA_vect)

αν( Εγώ>9) Εγώ=0;

segchar( Εγώ);

Εγώ++;

Τώρα ας διορθώσουμε τον κώδικα στην αρχή της κύριας συνάρτησης (). Λιμάνι ρε, το οποίο είναι υπεύθυνο για την κατάσταση των τμημάτων, θα βαθμολογήσουμε με ένα έτσι ώστε όταν ανάβουμε ο δείκτης να μην ανάψει, αφού είναι με κοινή άνοδο. Στη συνέχεια, βάζουμε τον αριθμό 0 στη μεταβλητή glob i εδώ, μόνο για λόγους τάξης. Σε γενικές γραμμές, κατά κανόνα, όταν ξεκινάτε σε μη αρχικοποιημένες μεταβλητές, υπάρχουν πάντα μηδενικά. Αλλά ακόμα θα το αρχικοποιήσουμε. Και, το πιο σημαντικό, για να λειτουργήσει η διακοπή του χρονοδιακόπτη, δεν αρκεί να το συμπεριλάβουμε στην προετοιμασία του χρονοδιακόπτη. Επίσης, γενικά, για να λειτουργούν όλες οι διακοπές, είναι απαραίτητο να ενεργοποιηθούν οι καθολικές διακοπές. Για αυτό υπάρχει μια ειδική λειτουργία sei () - Ορισμός διακοπής.

Τώρα ο κωδικός θα είναι αυτός

DDRB= 0x00;

PORTD= 11111111 ;

PORTB= 0b00000001;

Εγώ=0;

sei();

ενώ(1)

Πρέπει επίσης να συμπεριλάβουμε το αρχείο βιβλιοθήκης διακοπής στην αρχή του αρχείου.

#περιλαμβάνω

#περιλαμβάνω

#περιλαμβάνω

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

intκύριος( κενός)

// unsigned char butcount = 0, butstate = 0;

timer_ini();

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

Όλα λειτουργούν για εμάς. Πρόστιμο!

Εδώ είναι ένα τέτοιο χρονόμετρο. Αλλά επειδή δεν έχουμε καν έναν αντηχείο χαλαζία, αυτό το χρονόμετρο δεν μπορεί να ονομαστεί ακριβές.

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

Δείτε το ΒΙΝΤΕΟ ΜΑΘΗΜΑ

Προβολές Δημοσίευσης: 17 258

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

Ο σχεδιασμός χρησιμοποιεί ένα ρολόι πραγματικού χρόνου PCF8583 σε συνδυασμό με μια εφεδρική μπαταρία ώρας για να λειτουργεί το ρολόι ελλείψει ισχύος. Ως εγκέφαλος της συσκευής, χρησιμοποιείται ένας μικροελεγκτής Atmega8 με ρολόι 16MHz.
Η συσκευή σχεδιάστηκε να τροφοδοτείται από τη φόρτιση του τηλεφώνου - επομένως, δεν υπάρχει σταθεροποιητής 5V στο διάγραμμα - υπάρχει σύνδεσμος τροφοδοσίας 5V και τροφοδοτικό 220V για το τροφοδοτικό.
Το φορτίο αλλάζει με ρελέ - με τον τύπο που υποδεικνύεται στο διάγραμμα έως 10Α.
Υπάρχουν 3 LED στο διάγραμμα:
ΕΠΙΛΟΓΕΣ- ανάβει όταν εισάγετε τις ρυθμίσεις του ρολογιού.
ΧΡΟΝΟΣ- αναβοσβήνει όταν λειτουργεί ο χρονοδιακόπτης - απενεργοποιείται όταν ο χρονοδιακόπτης είναι απενεργοποιημένος.
ΕΞΩ- δείχνει την κατάσταση του ρελέ - ενεργοποίηση ή απενεργοποίηση.
Κουμπιά:
SW1- κουμπί Η.
SW2- κουμπί Μ.
Ρυθμίσεις:
Ρύθμιση ρολογιού.
Για να ρυθμίσετε το ρολόι, πρέπει να κρατήσετε πατημένο το κουμπί SW1πριν ανάψει το LED ΕΠΙΛΟΓΕΣ.
Η κουκκίδα ανάβει και δεν αναβοσβήνει - με το κουμπί SW1το ρολόι έχει ρυθμιστεί και το SW2λεπτά.


Για έξοδο από τις ρυθμίσεις, πρέπει επίσης να κρατήσετε πατημένο το κουμπί SW1μέχρι να σβήσει η λυχνία LED ΕΠΙΛΟΓΕΣ.
Ρύθμιση χρονοδιακόπτη.
Για να ρυθμίσετε το χρονόμετρο, πρέπει να ρυθμίσετε τη λειτουργία εμφάνισης (κατάσταση αναμονής - κύρια) με τα κουμπιά SW1- χρόνος ενεργοποίησης φόρτωσης, SW2- χρόνος φόρτωσης. Μετά την κλήση του χρονοδιακόπτη, θα μεταβεί στην ίδια τη λειτουργία εμφάνισης ώρας εάν τα κουμπιά δεν πατηθούν για 2-3 δευτερόλεπτα.


Απενεργοποίηση του χρονοδιακόπτη.
Για να απενεργοποιήσετε το χρονόμετρο, πρέπει να κρατήσετε πατημένο το κουμπί SW2- η συσκευή θα ενεργοποιήσει το φορτίο και ο χρονοδιακόπτης δεν θα το απενεργοποιήσει.
Σχέδιο.


Το διάγραμμα χρησιμοποιεί μια μη τυποποιημένη υποδοχή ISP:
1 - VCC
2 - MOSI
3 - MISO
4 - SCK
5 - ΕΠΑΝΑΦΟΡΑ
6 - GDN.

Πίνακες τυπωμένων κυκλωμάτων.



Ένας πίνακας με κοινή άνοδο E40361 χρησιμοποιείται στην πλακέτα τυπωμένου κυκλώματος - αλλά είναι δυνατή μια άλλη με παρόμοιο pinout και διαστάσεις.

Λίγα μοντέλα 3D.




Ένα απλό κύκλωμα ενός καλού χρονοδιακόπτη στο atmega8 MK, εύκολη πλοήγηση στο μενού, οθόνη υγρών κρυστάλλων LCD, ρολόι πραγματικού χρόνου, ελάχιστες λεπτομέρειες.

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


Η καρδιά αυτού του χρονοδιακόπτη είναι ο πολύ δημοφιλής και όχι ακριβός μικροελεγκτής Atmega8.

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

Αυτό που χρειαζόμαστε:

Κύκλωμα χρονοδιακόπτη

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

Ως παραλλαγή του ενεργοποιητή στα τριακ, τα θυρίστορ και τα τριάκια φαίνονται παρακάτω.



Παραλλαγή από το πρόγραμμα διάταξης Sprint.

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

Ο μικροελεγκτής αναβοσβήνει με έναν προγραμματιστή ή χρησιμοποιώντας απλά 5 καλώδια.

Ο συντάκτης του υλικολογισμικού (λήψη - πολυμερές) προσπάθησε και δεν άλλαξε τις ασφάλειες, γεγονός που διευκολύνει σημαντικά, χωρίς προβλήματα, το υλικολογισμικό για έναν αρχάριο ραδιοερασιτέχνη. Εάν το MK δεν έχει χρησιμοποιηθεί ακόμη, ένα νέο από το κατάστημα, τότε απλά ανεβάστε το υλικολογισμικό και αυτό είναι, αλλά αν υπάρχουν ήδη αλλαγές στις ασφάλειες, τότε πρέπει να τις ορίσετε ως CKSEL = 0001. Τα υπόλοιπα είναι απλά και αυτονόητα.

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

Στο κάλυμμα που κόβεται με ένα μαχαίρι, χρησιμοποιώντας ζεστή κόλλα από ένα πιστόλι, στερεώνουμε την οθόνη LCD., Κόβουμε τρύπες για τα κουμπιά ελέγχου και το κουμπί λειτουργίας.

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

Παρέχουμε ισχύ στο συναρμολογημένο κύκλωμα, πρέπει να εμφανιστεί μια τέτοια εικόνα.

Η διαχείριση πραγματοποιείται με τέσσερα κουμπιά. Το μενού αποτελείται από τρία στοιχεία, ΚΛΕΙΣΙΜΟ - ρύθμιση του ρολογιού, ΕΠΑΝΑΦΟΡΑ - επαναφορά όλων των ρυθμισμένων χρονομέτρων, ΧΡΟΝΟΔΙΑΚΟΠΤΗΣ - ρύθμιση των χρονομετρητών.

Πρώτα, μεταβείτε (*) στο μενού ρολογιού και ορίστε (>) (<)(#) точное время.


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

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

Ο χρονομετρητής αντίστροφης μέτρησης σας βοηθά να μετρήσετε με ακρίβεια το χρονικό διάστημα στην περιοχή από 1 δευτερόλεπτο έως 24 ώρες.

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

Από αυτές τις σκέψεις, έφτιαξα ένα πρόγραμμα χρονοδιακόπτη που πληροί τις ακόλουθες παραμέτρους:
συμπαγής σχεδιασμός και απλό κύκλωμα.
- λειτουργικός έλεγχος με κουμπί,
- κατά τον έλεγχο των κουμπιών, των διπλών ενεργειών στην οθόνη LCD.
- ρύθμιση της ακριβούς ώρας στο δεύτερο ·
- εύρος καταμέτρησης από 1 δευτερόλεπτο έως 24 ώρες,
- έναρξη λειτουργίας, παύση.
- λειτουργία επαναφοράς της αντίστροφης μέτρησης και της τιμής χρόνου ·
- με την επίτευξη της τιμής 00.00.00, η ​​εκτελεστική συσκευή είναι ενεργοποιημένη.

Όλες οι καθορισμένες εργασίες υλοποιήθηκαν σε αυτό το έργο.

Ο χρονομετρητής αντίστροφης μέτρησης σας βοηθά να μετρήσετε με ακρίβεια το χρονικό διάστημα στην περιοχή από 1 δευτερόλεπτο έως 24 ώρες.

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

Από αυτές τις σκέψεις, έφτιαξα ένα πρόγραμμα χρονοδιακόπτη που πληροί τις ακόλουθες παραμέτρους:
συμπαγής σχεδιασμός και απλό κύκλωμα.
- λειτουργικός έλεγχος με κουμπί,
- κατά τον έλεγχο των κουμπιών, των διπλών ενεργειών στην οθόνη LCD.
- ρύθμιση της ακριβούς ώρας στο δεύτερο ·
- εύρος καταμέτρησης από 1 δευτερόλεπτο έως 24 ώρες,
- έναρξη λειτουργίας, παύση.
- λειτουργία επαναφοράς της αντίστροφης μέτρησης και της τιμής χρόνου ·
- με την επίτευξη της τιμής 00.00.00, η ​​εκτελεστική συσκευή είναι ενεργοποιημένη.

Όλες οι καθορισμένες εργασίες υλοποιήθηκαν σε αυτό το έργο.

Περιγραφή των τρόπων λειτουργίας του χρονοδιακόπτη

Αφού ενεργοποιήσετε το χρονόμετρο, μπορείτε να ορίσετε την ώρα που χρειαζόμαστε. Ο σκοπός των κουμπιών φαίνεται στο διάγραμμα. Μετά την εγκατάσταση, πατήστε το κουμπί ΕΝΑΡΞΗ - αρχίζει η αντίστροφη μέτρηση. Ο μέγιστος χρόνος έκθεσης είναι 23.59.59.

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

Μόλις φτάσει η ώρα 00.00.00, η ​​λυχνία LED ανάβει (αυτή τη στιγμή πρόκειται για μίμηση της ενεργοποίησης της εκτελεστικής συσκευής ή μπορείτε απλά να ηχήσετε με γεννήτρια).

Εάν πατήσετε το κουμπί έναρξης-ΠΑΥΣΗΣ ενώ λειτουργεί ο χρονοδιακόπτης, ο χρονοδιακόπτης θα σταματήσει να μετράει, πατώντας δύο φορές το κουμπί ΕΝΑΡΞΗΣ-παύσης θα συνεχίσει την αντίστροφη μέτρηση που έχει σταματήσει.

Για να απενεργοποιήσετε το φορτίο μετά την ενεργοποίησή του, πρέπει να πατήσετε RESET, τα δεδομένα χρονοδιακόπτη θα ρυθμιστούν 00.00.01 - το φορτίο απενεργοποιείται. Or ορίστε μια νέα περίοδο αντίστροφης μέτρησης και πατώντας δύο φορές το κουμπί START-pause.

Εμφάνιση συμβόλων στην οθόνη LCD< ! > σημαίνει ότι το φορτίο είναι απενεργοποιημένο (PD3) και όταν πατηθεί το κουμπί ΕΝΑΡΞΗ μία φορά, ο ρυθμισμένος χρόνος θα μετρήσει αντίστροφα.

Εξωτερικός χαλαζίας 8 MHz, για ακρίβεια καταμέτρησης.

Λίστα ραδιοστοιχείων

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

ATmega8

1 Στο σημειωματάριο
Γραμμικός ρυθμιστής

LM7805

1 Στο σημειωματάριο
Δίοδος ανορθωτή

1Ν4148

1 Στο σημειωματάριο
Πυκνωτής22 pF2 Στο σημειωματάριο
Πυκνωτής0,1 uF1 Στο σημειωματάριο
100 uF1 Στο σημειωματάριο
Ηλεκτρολυτικός πυκνωτής470 uF1 Στο σημειωματάριο
Αντίσταση

470 Ohm

1 Στο σημειωματάριο
Αντίσταση κοπής5 kΩ1 Στο σημειωματάριο
Αντίσταση

10 kΩ

1 Στο σημειωματάριο
Συντονιστής χαλαζία8 MHz1