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

MSP430 Μετρητής δευτερολέπτων: 10 βήματα
MSP430 Μετρητής δευτερολέπτων: 10 βήματα

Βίντεο: MSP430 Μετρητής δευτερολέπτων: 10 βήματα

Βίντεο: MSP430 Μετρητής δευτερολέπτων: 10 βήματα
Βίντεο: Interrupting Blink sketch (Subtittled) 2024, Νοέμβριος
Anonim
MSP430 Μετρητής δευτερολέπτων
MSP430 Μετρητής δευτερολέπτων

Καλως ΗΡΘΑΤΕ! Κατασκευή μετρητών δευτερολέπτων: Χρήση του CCStudio 8 και του MSP430F5529 για το έργο.

Γλώσσα C για κωδικοποίηση του μικροελεγκτή. Εφαρμογή λειτουργιών χαμηλής ισχύος, χρονοδιακόπτες και διακοπές. Η έξοδος εμφανίζεται μέσω του τμήματος 7.

Βήμα 1: Ενόραση

Διορατικότητα
Διορατικότητα

Ας ξεκινήσουμε!

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

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

/** * main.c */

int main (άκυρο)

{

WDTCTL = WDTPW | WDTHOLD; // διακοπή χρονομέτρου φύλακα

επιστροφή 0?

}

Βήμα 2: Αρχικοποίηση θύρας

{

P3DIR = 0xFF; // P3DIR = 0x00;

P6DIR = 0xFF;

P4DIR | = 0x00;

P4REN | = 0xFF;

P4OUT | = 0xFF;

}

Το P3DIR | = 0x00 μας λέει ότι ολόκληρο το PORT-3 είναι προετοιμασμένο για να λάβει εισόδους.

Το P3DIR | = 0xFF μας λέει ότι ολόκληρο το PORT-3 προετοιμάζεται για να δώσει εξόδους.

P3DIR | = 0x01 μόνο ο πείρος P3.0 αρχικοποιείται για έξοδο στο PORT-3. Αυτό ακολουθεί μια χαρτογράφηση δεκαεξαδικού λιμένα.

P4REN | = 0xFF, αυτό δείχνει ότι οι ακίδες του PORT-4 έχουν ενεργοποιημένες τις αντιστάσεις έλξης προς τα κάτω.

Για να τα επιλέξετε μεταξύ Pull UP ή Pull DOWN, χρησιμοποιείται η εντολή P $ OUT | = 0xFF.

Εάν χρησιμοποιείται 0xFF, διαμορφώνονται ως αντιστάσεις Pull UP και αν 0x00 διαμορφώνονται ως Pull DOWN.

Βήμα 3: Εξαιρετικά χαμηλή ισχύς

Το MSP430F5529 μας επιτρέπει να μειώσουμε την απώλεια ισχύος από τον επεξεργαστή. Αυτό είναι χρήσιμο σε αυτόνομες εφαρμογές.

Αυτό απαιτεί τη δήλωση όλων των ακίδων ή θυρών προς έξοδο.

{

P7DIR | = 0xFF;

P6DIR | = 0xFF;

P5DIR | = 0xFF;

P4DIR | = 0xFF;

P3DIR | = 0xFF;

P2DIR | = 0xFF;

P1DIR | = 0xFF;

}

Βήμα 4: ΧΡΟΝΟΛΟΓΟΣ

Χρήση χρονοδιακόπτη για καθυστέρηση δημιουργίας ενός δευτερολέπτου. Αυτό χρησιμοποιεί το SMCLK του 1MHz, επίσης ο χρονοδιακόπτης λειτουργεί σε Λειτουργία χαμηλής ισχύος (στο επόμενο βήμα, αφού η καταμέτρησή του διακόπηκε από το LPM). Αυτή η διαδικασία εξοικονομεί ενέργεια και βάρος στον επεξεργαστή

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

Οι τιμές είναι 999, καθώς χρειάζεται μια ακόμη καταμέτρηση για να επιστρέψει στο μηδέν στο μητρώο χρονοδιακόπτη.

Βήμα 5: Λειτουργία χαμηλής κατανάλωσης ενέργειας

_BIS_SR (LPM0_bits+GIE);

Αυτό ενεργοποιεί την Ενεργοποίηση γενικής διακοπής (GIE) και θέτει την CPU στο LPM0, όπου το MCLK που υποστηρίζει τον επεξεργαστή είναι απενεργοποιημένο, και SMCLK και ACLK που εκτελούν το χρονόμετρο σε λειτουργία. έτσι μπορούμε να δούμε ότι η CPU είναι απενεργοποιημένη, εξοικονομώντας ενέργεια.

Βήμα 6: Χρονοδιακόπτης ISR

Χρονοδιακόπτης ISR
Χρονοδιακόπτης ISR

#pragma vector = TIMER0_A0_VECTOR

_διακοπή χρονοδιακόπτη κενό_Α (κενό)

{

z ++;

εάν (z> καθυστέρηση)

{

P3OUT = κωδικός [x];

P6OUT = κωδικός1 [y];

x ++;

αν (x == 10)

{

x = 0;

y ++;

}

αν (y == 6)

y = 0;

z = 0;

}

}

το διάνυσμα pragma είναι για αναπαράσταση ISR σε C embd.

Ο κωδικός [x] και ο κωδικός1 [y] είναι οι πίνακες που περιέχουν τιμές εξόδου για τα δύο επτά τμήματα, για την εμφάνιση μετρητή 60 δευτερολέπτων.

Βήμα 7: Διακοπή υλικού

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

Εδώ το P2.1 δηλώνεται ως διακοπή υλικού, αν πατηθεί το κουμπί, ο μετρητής επανέρχεται στην τιμή.

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

Βήμα 8: ISR- Επαναφορά/ Κουμπί πίεσης

#pragma vector = PORT2_VECTOR

_διακοπή κενής θύρας_2 (άκυρη)

{

P2IFG & = ~ BIT1;

x = 0; y = 0;

P3OUT = κωδικός [x];

P6OUT = κωδικός1 [y];

v ++;

για (i = 0; i

{

P1OUT | = BIT0; //P1.0 = εναλλαγή

_ καθυστερημένοι_κύκλοι (1048576);

P1OUT & = ~ BIT0; // P1.0 = εναλλαγή

_ καθυστερημένοι_κύκλοι (1048576);

}

Αυτό το ISR επαναφέρει τον μετρητή και μετράει πόσες φορές πατήθηκε το υπόλοιπο.

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

Βήμα 9: ΚΩΔ

ΚΩΔΙΚΑΣ
ΚΩΔΙΚΑΣ

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

#ορίστε καθυστέρηση 1000

κωδικός char = {0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0, 0xFE, 0xE6} ·

char code1 = {0x7E, 0x30, 0x6D, 0x79, 0x33, 0x5B};

πτητικό ανυπόγραφο int x = 0, y = 0, z = 0;

πτητικό ανυπόγραφο int v = 0, i = 0;

κενό κεντρικό ()

{

WDTCTL = WDTPW | WDTHOLD; // διακοπή χρονομέτρου φύλακα

P7DIR | = 0xFF;

P7OUT | = 0x00;

P8DIR | = 0xFF;

P8OUT | = 0x00;

P4DIR | = 0xFF;

P4OUT | = 0x00;

P5DIR | = 0xFF;

P5OUT | = 0x00;

P1DIR = 0xFF;

P3DIR = 0xFF;

P6DIR = 0xFF;

P2DIR = 0x00;

P2REN = 0x02;

P2OUT = 0x02;

P2IE | = BIT1;

P2IES | = BIT1;

P2IFG & = ~ BIT1;

TA0CCTL0 = CCIE;

TA0CCR0 = 999;

TA0CTL = TASSEL_2 + MC_1;

_BIS_SR (LPM0_bits+GIE);

}

// Χρονοδιακόπτης διακοπή ρουτίνας υπηρεσίας

#pragma vector = TIMER0_A0_VECTOR

_διακοπή χρονοδιακόπτη κενό_Α (κενό)

{

z ++;

εάν (z> καθυστέρηση)

{

P3OUT = κωδικός [x];

P6OUT = κωδικός1 [y];

x ++;

αν (x == 10)

{

x = 0;

y ++;

}

αν (y == 6)

y = 0;

z = 0;

}

}

// Ρουτίνα σέρβις διακοπή υλικού

#pragma vector = PORT2_VECTOR

_διακοπή κενής θύρας_2 (άκυρη)

{

P2IFG & = ~ BIT1;

x = 0;

y = 0;

P3OUT = κωδικός [x];

P6OUT = κωδικός1 [y];

v ++;

για (i = 0; i

{P1OUT | = BIT0; // P1.0 = εναλλαγή

_ καθυστερημένοι_κύκλοι (1048576);

P1OUT & = ~ BIT0; // P1.0 = εναλλαγή

_ καθυστερημένοι_κύκλοι (1048576);

}

}

Βήμα 10: Κωδικός αναφοράς

Κώδικας αναφοράς
Κώδικας αναφοράς

Αποθετήριο GitHub

Συνιστάται: