- Τι είναι το ADC (Αναλογική σε ψηφιακή μετατροπή)
- ADC στο AVR Microcontroller Atmega16
- Απαιτούμενα στοιχεία
- Διάγραμμα κυκλώματος
- Ρύθμιση μητρώων ελέγχου ADC στο Atmega16
- Προγραμματισμός Atmega16 για ADC
Ένα κοινό χαρακτηριστικό που χρησιμοποιείται σχεδόν σε κάθε ενσωματωμένη εφαρμογή είναι η μονάδα ADC (Analog to Digital Converter). Αυτοί οι αναλογικοί σε ψηφιακοί μετατροπείς μπορούν να διαβάσουν τάση από αναλογικούς αισθητήρες όπως αισθητήρας θερμοκρασίας, αισθητήρας κλίσης, αισθητήρας ρεύματος, αισθητήρας Flex κ.λπ. Σε αυτό το σεμινάριο θα μάθουμε Τι είναι το ADC και πώς να χρησιμοποιήσετε το ADC στο Atmega16. Αυτό το σεμινάριο περιλαμβάνει τη σύνδεση ενός μικρού ποτενσιόμετρου με τον ακροδέκτη ADC του Atmega16 και 8 LED χρησιμοποιούνται για την εμφάνιση της μεταβαλλόμενης τάσης της τιμής εξόδου ADC σε σχέση με την αλλαγή στην τιμή εισόδου ADC.
Προηγουμένως εξηγήσαμε το ADC σε άλλους μικροελεγκτές:
- Πώς να χρησιμοποιήσετε το ADC στο ARM7 LPC2148 - Μέτρηση αναλογικής τάσης
- Πώς να χρησιμοποιήσετε το ADC στο STM32F103C8 - Μέτρηση αναλογικής τάσης
- Πώς να χρησιμοποιήσετε το ADC στο MSP430G2 - Μέτρηση αναλογικής τάσης
- Πώς να χρησιμοποιήσετε το ADC στο Arduino Uno;
- Χρήση της μονάδας ADC του μικροελεγκτή PIC με MPLAB και XC8
Τι είναι το ADC (Αναλογική σε ψηφιακή μετατροπή)
Το ADC σημαίνει αναλογικό σε ψηφιακό μετατροπέα. Στα ηλεκτρονικά, ένα ADC είναι μια συσκευή που μετατρέπει ένα αναλογικό σήμα όπως ρεύμα και τάση σε ψηφιακό κώδικα (δυαδική μορφή). Στον πραγματικό κόσμο τα περισσότερα σήματα είναι αναλογικά και οποιοσδήποτε μικροελεγκτής ή μικροεπεξεργαστής κατανοεί τη δυαδική ή ψηφιακή γλώσσα (0 ή 1). Έτσι, για να κάνουμε τους μικροελεγκτές να κατανοήσουν τα αναλογικά σήματα, πρέπει να μετατρέψουμε αυτά τα αναλογικά σήματα σε ψηφιακή μορφή. Το ADC το κάνει ακριβώς αυτό για εμάς. Υπάρχουν πολλοί τύποι ADC διαθέσιμων για διαφορετικές εφαρμογές. Λίγα δημοφιλή ADC είναι flash, διαδοχικές προσεγγίσεις και sigma-delta.
Ο πιο φθηνός τύπος ADC είναι η Διαδοχική προσέγγιση και σε αυτό το σεμινάριο θα χρησιμοποιηθεί η Διαδοχική προσέγγιση. Σε έναν τύπο ADC διαδοχικής προσέγγισης, μια σειρά ψηφιακών κωδικών, καθένας αντιστοιχεί σε ένα αναλογικό επίπεδο επιδιόρθωσης, δημιουργείται διαδοχικά. Ένας εσωτερικός μετρητής χρησιμοποιείται για σύγκριση με το αναλογικό σήμα υπό μετατροπή. Η παραγωγή διακόπτεται όταν το αναλογικό επίπεδο γίνεται πολύ μεγαλύτερο από το αναλογικό σήμα. Ο ψηφιακός κωδικός αντιστοιχεί στο αναλογικό επίπεδο είναι η επιθυμητή ψηφιακή αναπαράσταση του αναλογικού σήματος. Αυτό ολοκληρώνει τη μικρή μας εξήγηση σχετικά με τη διαδοχική προσέγγιση.
Εάν θέλετε να εξερευνήσετε το ADC σε βάθος, μπορείτε να ανατρέξετε στον προηγούμενο οδηγό μας για το ADC. Τα ADC είναι διαθέσιμα σε μορφή IC και επίσης μικροελεγκτές έρχεται με ενσωματωμένο ADC σήμερα. Σε αυτό το σεμινάριο θα χρησιμοποιήσουμε το ενσωματωμένο ADC του Atmega16. Ας συζητήσουμε για το ενσωματωμένο ADC του Atmega16.
ADC στο AVR Microcontroller Atmega16
Το Atmega16 διαθέτει ενσωματωμένο ADC 10 bit και 8 καναλιών. Το 10 bit αντιστοιχεί σε αυτό εάν η τάση εισόδου είναι 0-5V, τότε θα χωριστεί σε τιμή 10 bit, δηλαδή 1024 επίπεδα διακριτών αναλογικών τιμών (2 10 = 1024). Τώρα το 8-channel αντιστοιχεί στους αποκλειστικούς 8 ADC Pins στο Atmega16 όπου κάθε ακίδα μπορεί να διαβάσει την αναλογική τάση. Το πλήρες PortA (GPIO33-GPIO40) είναι αφιερωμένο στη λειτουργία ADC. Από προεπιλογή, οι ακίδες PORTA είναι γενικοί ακροδέκτες IO, αυτό σημαίνει ότι οι ακίδες θύρας είναι πολυπλεξίες. Για να χρησιμοποιήσουμε αυτές τις καρφίτσες ως καρφίτσες ADC, θα πρέπει να διαμορφώσουμε συγκεκριμένους καταχωρητές αφιερωμένους στον έλεγχο ADC. Αυτός είναι ο λόγος για τον οποίο οι καταχωρητές είναι γνωστοί ως καταχωρητές ελέγχου ADC. Ας συζητήσουμε πώς να ρυθμίσουμε αυτούς τους καταχωρητές για να ξεκινήσουμε τη λειτουργία του ενσωματωμένου ADC.
ADC καρφίτσες στο Atmega16
Απαιτούμενα στοιχεία
- Atmega16 Μικροελεγκτής IC
- 16Mhz Crystal Oscillator
- Δύο πυκνωτές 100nF
- Δύο πυκνωτές 22pF
- Πλήκτρο
- Καλώδια αλτών
- Ψωμί
- USBASP v2.0
- Led (Οποιοδήποτε χρώμα)
Διάγραμμα κυκλώματος
Ρύθμιση μητρώων ελέγχου ADC στο Atmega16
1. ADMUX Register (ADC Multiplexer Selection Register) :
Το ADMUX Register προορίζεται για επιλογή καναλιού ADC και επιλογή τάσης αναφοράς. Η παρακάτω εικόνα δείχνει την επισκόπηση του μητρώου ADMUX. Η περιγραφή εξηγείται παρακάτω.
- Bit 0-4: bit επιλογής καναλιού.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
Επιλέχθηκε κανάλι ADC |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: Χρησιμοποιείται για τη ρύθμιση του αποτελέσματος προς τα δεξιά ή προς τα αριστερά.
ADLAR |
Περιγραφή |
0 |
Ρυθμίστε σωστά το αποτέλεσμα |
1 |
Αριστερά ρυθμίστε το αποτέλεσμα |
- Bit 6-7: Χρησιμοποιούνται για την επιλογή της τάσης αναφοράς για ADC.
REFS1 |
REFS0 |
Επιλογή αναφοράς τάσης |
0 |
0 |
AREF, το εσωτερικό Vref απενεργοποιημένο |
0 |
1 |
AVcc με εξωτερικό πυκνωτή στον πείρο AREF |
1 |
0 |
Κατοχυρωμένα |
1 |
1 |
Εσωτερική αναφορά τάσης 2,56 με εξωτερικό πυκνωτή στο AREF Pin |
Τώρα ξεκινήστε να διαμορφώνετε αυτά τα bit εγγραφής στο πρόγραμμα έτσι ώστε να λαμβάνουμε Εσωτερική ADC ανάγνωση και έξοδο σε All Pins του PORTC.
Προγραμματισμός Atmega16 για ADC
Το πλήρες πρόγραμμα δίνεται παρακάτω. Κάψτε το πρόγραμμα στο Atmega16 χρησιμοποιώντας το JTAG και το Atmel studio και περιστρέψτε το ποτενσιόμετρο για να μεταβάλλετε την τιμή ADC. Εδώ, ο κώδικας εξηγείται γραμμή προς γραμμή.
Ξεκινήστε κάνοντας μία λειτουργία για να διαβάσετε την τιμή μετατροπής ADC. Στη συνέχεια, περάστε την τιμή του καναλιού ως «chnl» στη λειτουργία ADC_read .
unsigned int ADC_read (χωρίς υπογραφή char chnl)
Οι τιμές καναλιού πρέπει να είναι μεταξύ 0 και 7, καθώς έχουμε μόνο 8 κανάλια ADC.
chnl = chnl & 0b00000111;
Γράφοντας «40» δηλ. «01000000» στον καταχωρητή ADMUX επιλέξαμε το PORTA0 ως ADC0 όπου η αναλογική είσοδος θα συνδεθεί για ψηφιακή μετατροπή.
ADMUX = 0x40;
Τώρα αυτό το βήμα περιλαμβάνει τη διαδικασία μετατροπής ADC, όπου γράφοντας ONE σε ADSC Bit στο ADCSRA register ξεκινάμε τη μετατροπή. Μετά από αυτό, περιμένετε το ADIF bit να επιστρέψει την τιμή όταν ολοκληρωθεί η μετατροπή Σταματάμε τη μετατροπή γράφοντας «1» στο ADIF Bit στο μητρώο ADCSRA. Όταν ολοκληρωθεί η μετατροπή, επιστρέψτε την τιμή ADC.
ADCSRA - = (1 <
Εδώ η εσωτερική τάση αναφοράς ADC επιλέγεται ρυθμίζοντας το bit REFS0. Μετά από αυτό ενεργοποιήστε το ADC και επιλέξτε prescaler ως 128.
ADMUX = (1 <
Τώρα αποθηκεύστε την τιμή ADC και στείλτε την στο PORTC. Στο PORTC, συνδέονται 8 LED, τα οποία θα εμφανίζουν την ψηφιακή έξοδο σε μορφή 8 bit. Το παράδειγμα που έχουμε δείξει ποικίλει την τάση μεταξύ 0V έως 5V χρησιμοποιώντας ένα δοχείο 1K.
i = ADC_read (0); PORTC = i;
Το Ψηφιακό Πολύμετρο χρησιμοποιείται για την εμφάνιση αναλογικής τάσης εισόδου σε ADC Pin και 8 LED χρησιμοποιούνται για να δείξουν την αντίστοιχη τιμή 8 Bit της εξόδου ADC. Απλώς περιστρέψτε το Ποτενσιόμετρο και δείτε το αντίστοιχο αποτέλεσμα στο πολύμετρο καθώς και σε λαμπερά LED.
Ο πλήρης κώδικας και το βίντεο εργασίας δίνονται παρακάτω.