Πίνακας περιεχομένων:

Arduino - Περιοδική διακοπή: 4 βήματα
Arduino - Περιοδική διακοπή: 4 βήματα

Βίντεο: Arduino - Περιοδική διακοπή: 4 βήματα

Βίντεο: Arduino - Περιοδική διακοπή: 4 βήματα
Βίντεο: Embedded Systems Lab - 5 2024, Νοέμβριος
Anonim
Arduino - Περιοδική διακοπή
Arduino - Περιοδική διακοπή

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

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

Βήμα 1: Διακοπή χειριστή

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

const unsigned long TIMER0_COUNT = 500; // Χρονοδιακόπτης χρονισμού 500 msec

// TIMER0 interrupt handler πτητικός χρόνος bool = false; ISR (TIMER0_COMPA_vect) {στατική μη υπογεγραμμένη μεγάλη καταμέτρηση = 0; if (++ count> TIMER0_COUNT) {count = 0? χρόνος = αλήθεια? // ο χρόνος έχει οριστεί σε true κάθε TIMER0_COUNT ms} // (ο χρόνος πρέπει να διαγραφεί στην κύρια ρουτίνα)}

Βήμα 2: Ορίστε περιοδικό χρονικό διάστημα

2. Ρυθμίστε το χρονικό διάστημα. Αυτή η ρουτίνα γουρουνάρει πίσω στη διακοπή TIMER0, η οποία τίθεται σε λειτουργία κάθε ~ 1 msec.

Το "διάστημα" σας είναι ο αριθμός των διακοπών TIMER0 προς επεξεργασία. Κάθε διάστημα είναι m 1 msec, οπότε ορίζετε πραγματικά πόσες διακοπές TIMER0 θα μετρήσετε πριν ενεργοποιήσετε το διάστημα σας. IOW, ορίστε τη μεταβλητή TIMER0_COUNT σε όσα χιλιοστά του δευτερολέπτου θέλετε να περιμένετε. Για παράδειγμα, χρησιμοποιήστε 500 για μισό δευτερόλεπτο. Χρησιμοποιήστε 3000 για 3 δευτερόλεπτα.

Βήμα 3: Διακοπή εκκίνησης

3. Προσθέστε τον κώδικα "προετοιμασία TIMER0" στη μέθοδο εγκατάστασης (). Και πάλι, απλά αντιγράψτε και επικολλήστε στη ρύθμιση ().

// *** Αρχικοποίηση TIMER0 ***

cli (); // απενεργοποίηση όλων των διακοπών TIMSK0 = 0; // απενεργοποιήστε το χρονόμετρο0 για χαμηλότερο jitter OCR0A = 0xBB; // αυθαίρετη καταμέτρηση διακοπών TIMSK0 | = _BV (OCIE0A); // γουρουνάκι πίσω στη διακοπή sei (); // ενεργοποιήστε ξανά τις διακοπές

Βήμα 4: Πού να προσθέσετε τον κωδικό σας

4. Προσθέστε τον κωδικό "έλεγχος χρόνου" στη μέθοδο βρόχου (). Αντιγράψτε και επικολλήστε σε βρόχο ().

αν (ώρα) {

χρόνος = ψευδής. // κάνε κάτι εδώ}

Το "time = false;" η γραμμή είναι σημαντική. Χωρίς αυτήν τη γραμμή, οι γραμμές "κάνε κάτι εδώ" θα εκτελούνται κάθε φορά που το πρόγραμμα εκτελεί βρόχο ().

Φυσικά, αντικαθιστάτε τις δικές σας δραστηριότητες στη γραμμή "κάντε κάτι εδώ". Ξεκινήστε με εκτύπωση κειμένου ή αναβοσβήνοντας το LED.

Τελείωσες!

Συνιστάται: