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

Εισαγωγή στο ADC στον μικροελεγκτή AVR - για αρχάριους: 14 βήματα
Εισαγωγή στο ADC στον μικροελεγκτή AVR - για αρχάριους: 14 βήματα

Βίντεο: Εισαγωγή στο ADC στον μικροελεγκτή AVR - για αρχάριους: 14 βήματα

Βίντεο: Εισαγωγή στο ADC στον μικροελεγκτή AVR - για αρχάριους: 14 βήματα
Βίντεο: Подключение АЦП. AVR.RU 2024, Ιούλιος
Anonim
Εισαγωγή στο ADC στον μικροελεγκτή AVR | για αρχάριους
Εισαγωγή στο ADC στον μικροελεγκτή AVR | για αρχάριους

Σε αυτό το σεμινάριο θα γνωρίζετε τα πάντα ADC στον μικροελεγκτή avr

Βήμα 1: Τι είναι το ADC;

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

Βήμα 2: Πώς λειτουργεί το ADC στο AVR- Μικροελεγκτή

Το AVR ADC επιτρέπει στον μικροελεγκτή AVR να μετατρέπει αναλογικές τάσεις σε ψηφιακές τιμές με ελάχιστα έως καθόλου εξωτερικά μέρη. Το ATmega8 διαθέτει 10-bit διαδοχική προσέγγιση ADC. Το ATmega8 διαθέτει ADC 7 καναλιών στο PortC. Το ADC διαθέτει ξεχωριστό αναλογικό πείρο τάσης τροφοδοσίας, AVCC. Το AVCC δεν πρέπει να διαφέρει περισσότερο από ± 0.3V από το VCC. Η αναφορά τάσης μπορεί να αποσυνδεθεί εξωτερικά στον πείρο AREF. Το AVCC χρησιμοποιείται ως αναφορά τάσης. Το ADC μπορεί επίσης να ρυθμιστεί ώστε να λειτουργεί συνεχώς (η λειτουργία ελεύθερης λειτουργίας) ή να πραγματοποιεί μόνο μία μετατροπή.

Βήμα 3: Τύπος μετατροπής ADC

Τύπος μετατροπής ADC
Τύπος μετατροπής ADC

Όπου Vin είναι η τάση στον επιλεγμένο πείρο εισόδου και Vref η επιλεγμένη αναφορά τάσης

Βήμα 4: Πώς να διαμορφώσετε το ADC στο ATmega8;

Πώς να διαμορφώσετε το ADC στο ATmega8
Πώς να διαμορφώσετε το ADC στο ATmega8

Τα ακόλουθα Μητρώα χρησιμοποιούνται για την εφαρμογή του ADC στο ATmega8

Επιλογή ADP Multiplexer

Βήμα 5: Επιλογή ADLAR

Επιλογή ADLAR
Επιλογή ADLAR
Επιλογή ADLAR
Επιλογή ADLAR

Αποτέλεσμα αριστερής προσαρμογής ADC Το bit ADLAR επηρεάζει την παρουσίαση του αποτελέσματος μετατροπής ADC στο μητρώο δεδομένων ADC. Γράψτε ένα στο ADLAR προς τα αριστερά προσαρμόστε το αποτέλεσμα. Διαφορετικά, το αποτέλεσμα ρυθμίζεται σωστά

Όταν ολοκληρωθεί μια μετατροπή ADC, το αποτέλεσμα βρίσκεται στο ADCH και ADCL Όταν διαβάζεται το ADCL, το μητρώο δεδομένων ADC δεν ενημερώνεται μέχρι να διαβαστεί το ADCH. Κατά συνέπεια, εάν το αποτέλεσμα παραμείνει προσαρμοσμένο και δεν απαιτείται ακρίβεια άνω των 8 bit, αρκεί η ανάγνωση του ADCH. Διαφορετικά, πρέπει πρώτα να διαβαστεί το ADCL και μετά το ADCH. Μπιτ επιλογής αναλογικού καναλιού Η τιμή αυτών των δυαδικών ψηφίων επιλέγει ποιες αναλογικές είσοδοι είναι συνδεδεμένες στο ADC.

Βήμα 6: Επιλογή ADCSRA

Επιλογή ADCSRA
Επιλογή ADCSRA
Επιλογή ADCSRA
Επιλογή ADCSRA

• Bit 7 - ADEN: ADC Ενεργοποίηση Η εγγραφή αυτού του δυαδικού ψηφίου σε ένα ενεργοποιεί το ADC. Γράφοντας το στο μηδέν, το ADC απενεργοποιείται

• Bit 6 - ADSC: ADC Έναρξη μετατροπής Στη λειτουργία Single Conversion, γράψτε αυτό το bit σε ένα για να ξεκινήσει κάθε μετατροπή. Στη λειτουργία δωρεάν εκτέλεσης, γράψτε αυτό το bit σε ένα για να ξεκινήσει η πρώτη μετατροπή.

• Bit 5 - ADFR: ADC Free Running Select Όταν αυτό το bit έχει οριστεί (ένα), το ADC λειτουργεί σε λειτουργία ελεύθερης εκτέλεσης. Σε αυτήν τη λειτουργία, το ADC δοκιμάζει και ενημερώνει συνεχώς τους Καταχωρητές Δεδομένων. Η εκκαθάριση αυτού του bit (μηδέν) θα τερματίσει τη λειτουργία δωρεάν εκτέλεσης.

• Bit 4 - ADIF: ADC Interrupt Flag Αυτό το bit ορίζεται όταν ολοκληρωθεί μια μετατροπή ADC και ενημερωθούν οι καταχωρητές δεδομένων. Η πλήρης διακοπή μετατροπής ADC εκτελείται εάν οριστεί το bit ADIE και το bit του SREG. Το ADIF διαγράφεται από υλικό κατά την εκτέλεση του αντίστοιχου Διανύσματος Διαχείρισης διακοπών. Εναλλακτικά, το ADIF διαγράφεται γράφοντας ένα λογικό στη σημαία.

• Bit 3-ADIE: ADC Interrupt Enable Όταν αυτό το bit είναι γραμμένο σε ένα και έχει οριστεί το I-bit στο SREG, ενεργοποιείται το ADC Conversion Complete Interrupt.

• Bits 2: 0 - ADPS2: 0: ADC Prescaler Select Bits Σύμφωνα με το φύλλο δεδομένων, αυτό το prescalar πρέπει να ρυθμιστεί έτσι ώστε η συχνότητα εισόδου ADC να είναι μεταξύ 50 KHz και 200 KHz. Το ρολόι ADC προέρχεται από το ρολόι συστήματος με τη βοήθεια ADPS2: 0 Αυτά τα δυαδικά ψηφία καθορίζουν τον συντελεστή διαίρεσης μεταξύ της συχνότητας XTAL και του ρολογιού εισόδου στο ADC.

Βήμα 7: Αν θέλετε να λάβετε την αξία ADC πρέπει να χρειαστείτε κάποια εργασία που παρατίθεται παρακάτω

  • Ορίστε την τιμή ADC
  • Διαμόρφωση πείρου LED εξόδου
  • Διαμόρφωση υλικού ADC
  • Ενεργοποίηση ADC
  • Έναρξη αναλογικών προς ψηφιακές μετατροπές
  • ΕΝΩ Για πάντα

IF ADC Value Higher (Υψηλότερη τιμή) και, στη συνέχεια, ορισμός τιμής, Ενεργοποιήστε το LED ELSE Απενεργοποιήστε το LED

Βήμα 8: Ορίστε την τιμή ADC

Κωδικός: uint8_t ADCValue = 128;

Βήμα 9: Διαμόρφωση πείρου LED εξόδου

Κωδικός: DDRB | = (1 << PB1);

Βήμα 10: Διαμόρφωση υλικού ADC

Διαμόρφωση υλικού ADC

Αυτό γίνεται μέσω της ρύθμισης bit στα μητρώα ελέγχου για το ADC. Αρχικά, ας ορίσουμε το prescalar για το ADC. Σύμφωνα με το φύλλο δεδομένων, αυτό το prescalar πρέπει να ρυθμιστεί έτσι ώστε η συχνότητα εισόδου ADC να είναι μεταξύ 50 KHz και 200 KHz. Το ρολόι ADC προέρχεται από το ρολόι συστήματος. Με συχνότητα συστήματος 1MHz, ένας προ -ζυγοστάτης 8 θα έχει ως αποτέλεσμα μια συχνότητα ADC 125 Khz. Η προεπιλογή ρυθμίζεται από τα bit ADPS στο μητρώο ADCSRA. Σύμφωνα με το φύλλο δεδομένων, και τα τρία δυαδικά ψηφία ADPS2: 0 πρέπει να ρυθμιστούν σε 011 για να αποκτήσετε την προεπιλογή 8.

Κωδικός: ADCSRA | = (0 << ADPS2) | (1 << ADPS1] | (1 << ADPS0];

Στη συνέχεια, ας ορίσουμε την τάση αναφοράς ADC. Αυτό ελέγχεται από τα bit REFS στο μητρώο ADMUX. Τα παρακάτω ορίζουν την τάση αναφοράς σε AVCC.

Κωδικός: ADMUX | = (1 << REFS0];

Για να ρυθμίσετε το κανάλι που διέρχεται από τον πολυπλέκτη στο ADC, τα bit MUX στον καταχωρητή ADMUX πρέπει να ρυθμιστούν ανάλογα. Δεδομένου ότι χρησιμοποιούμε το ADC5 εδώ

Κωδικός: ADMUX & = 0xF0; ADMUX | = 5;

Για να θέσετε το ADC σε λειτουργία ελεύθερης λειτουργίας, ορίστε το εύστοχα ονομαζόμενο bit ADFR στο μητρώο ADCSRA:

Κωδικός: ADCSRA | = (1 << ADFR);

Μια τελευταία αλλαγή ρυθμίσεων θα γίνει για να γίνει πιο απλή η ανάγνωση της τιμής ADC. Αν και το ADC έχει ανάλυση 10 bits, αυτές οι πολλές πληροφορίες συχνά δεν είναι απαραίτητες. Αυτή η τιμή των 10 bit χωρίζεται σε δύο καταχωρητές 8 bit, ADCH και ADCL. Από προεπιλογή, τα χαμηλότερα 8 bit της τιμής ADC βρίσκονται στο ADCL, με τα δύο πάνω να είναι τα χαμηλότερα δύο bits του ADCH. Ρυθμίζοντας το bit ADLAR στον καταχωρητή ADMUX, μπορούμε να ευθυγραμμίσουμε αριστερά την τιμή ADC. Αυτό τοποθετεί τα υψηλότερα 8 bit της μέτρησης στον καταχωρητή ADCH, ενώ τα υπόλοιπα στον καταχωρητή ADCL. Εάν διαβάσουμε στη συνέχεια τον καταχωρητή ADCH, λαμβάνουμε μια τιμή 8 bit που αντιπροσωπεύει τη μέτρηση 0 έως 5 volt ως αριθμό από 0 έως 255. Βασικά μετατρέπουμε τη μέτρηση ADC των 10 bit σε 8 bit. Ακολουθεί ο κώδικας για να ορίσετε το bit ADLAR:

Κώδικας:

ADMUX | = (1 << ADLAR); Αυτό ολοκληρώνει τη ρύθμιση του υλικού ADC για αυτό το παράδειγμα. Δύο ακόμη bits πρέπει να ρυθμιστούν προτού το ADC αρχίσει να λαμβάνει μετρήσεις.

Βήμα 11: Ενεργοποίηση ADC

Για να ενεργοποιήσετε το ADC, ορίστε το bit ADEN στο ADCSRA:

Κωδικός: ADCSRA | = (1 << ADEN);

Βήμα 12: Έναρξη αναλογικών προς ψηφιακές μετατροπές

Για να ξεκινήσετε τις μετρήσεις ADC, το bit ADSC στο ADCSRA πρέπει να οριστεί:

Κωδικός: ADCSRA | = (1 << ADSC);

Σε αυτό το σημείο, το ADC θα ξεκινούσε συνεχώς τη δειγματοληψία της τάσης που παρουσιάζεται στο ADC5. Ο κώδικας σε αυτό το σημείο θα μοιάζει με αυτόν:

Βήμα 13: ΕΝΩ Για πάντα

Το μόνο που απομένει είναι να ελέγξετε την τιμή ADC και να ρυθμίσετε τις λυχνίες LED να εμφανίζουν ένδειξη υψηλής / χαμηλής ένδειξης. Δεδομένου ότι η ένδειξη ADC στο ADCH έχει μέγιστη τιμή 255, επιλέχθηκε μια τιμή δοκιμής του th για να προσδιοριστεί εάν η τάση ήταν υψηλή ή χαμηλή. Μια απλή δήλωση IF/ELSE στους βρόχους FOR θα μας επιτρέψει να ενεργοποιήσουμε το σωστό LED:

Κώδικας

εάν (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Ενεργοποιήστε το LED

}

αλλού

{

PORTB & = ~ (1 << PB0); // Απενεργοποιήστε το LED

}

Βήμα 14: Στο τέλος Ο πλήρης κώδικας είναι

Κώδικας:

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

int main (άκυρο)

{

uint8_t ADCValue = 128;

DDRB | = (1 << PB0); // Ορίστε το LED1 ως έξοδο

ADCSRA | = (0 << ADPS2) | (1 << ADPS1] | (1 << ADPS0]; // Ρυθμίστε το ADC prescalar σε 8 - // 125KHz ρυθμός δείγματος 1MHz

ADMUX | = (1 << REFS0]; // Ορίστε την αναφορά ADC στο AVCC

ADMUX | = (1 << ADLAR); // Αριστερή ρύθμιση του αποτελέσματος ADC για εύκολη ανάγνωση 8 bit

ADMUX & = 0xF0;

ADMUX | = 5; // Οι τιμές MUX έπρεπε να αλλάξουν για τη χρήση του ADC0

ADCSRA | = (1 << ADFR); // Ορίστε το ADC σε λειτουργία ελεύθερης εκτέλεσης

ADCSRA | = (1 << ADEN); // Ενεργοποίηση ADC

ADCSRA | = (1 << ADSC); // Έναρξη μετατροπών A2D ενώ (1) // Loop Forever

{

εάν (ADCH> ADCValue)

{

PORTB | = (1 << PB0); // Ενεργοποιήστε το LED1

}

αλλού

{

PORTE & = ~ (1 << PB1); // Απενεργοποιήστε το LED1

}

}

επιστροφή 0?

}

Πρώτη δημοσίευση αυτού του σεμιναρίου Κάντε κλικ εδώ

Συνιστάται: