Σε αυτό το έργο πρόκειται να σχεδιάσουμε ένα κύκλωμα για τη μέτρηση της θερμοκρασίας. Αυτό το κύκλωμα αναπτύχθηκε χρησιμοποιώντας το " LM35 ", έναν γραμμικό αισθητήρα τάσης. Η θερμοκρασία μετριέται συνήθως σε "Centigrade" ή "Faraheite". Ο αισθητήρας "LM35" παρέχει έξοδο βάσει κλίμακας εκατονταβάθμου.
Το LM35 είναι συσκευή τύπου τρανζίστορ τριών ακίδων. Έχει VCC, GND και OUTPUT. Αυτός ο αισθητήρας παρέχει μεταβλητή τάση στην έξοδο με βάση τη θερμοκρασία.
Όπως φαίνεται στο παραπάνω σχήμα, για κάθε αύξηση θερμοκρασίας +1 εκατοστημάτων θα υπάρχει + 10mV υψηλότερη απόδοση. Αν λοιπόν η θερμοκρασία είναι 0◦ εκατοστά, η έξοδος του αισθητήρα θα είναι 0V, εάν η θερμοκρασία είναι 10◦ εκατοστά, η έξοδος του αισθητήρα θα είναι + 100mV, εάν η θερμοκρασία είναι 25◦ εκατοστά, η έξοδος του αισθητήρα θα είναι + 250mV.
Έτσι για τώρα με το LM35 παίρνουμε τη θερμοκρασία με τη μορφή μεταβλητής τάσης. Αυτή η εξαρτώμενη από τη θερμοκρασία τάση δίνεται ως είσοδος στο ADC (Analog to Digital Converter) του ATMEGA32A. Η ψηφιακή τιμή μετά τη μετατροπή που λαμβάνεται εμφανίζεται στην οθόνη LCD 16x2 ως θερμοκρασία.
Απαιτούμενα στοιχεία
Υλικό: Μικροελεγκτής ATMEGA32, τροφοδοτικό (5v), AVR-ISP PROGRAMMER, JHD_162ALCD (16x2LCD), 100uF πυκνωτής (δύο τεμάχια), 100nF πυκνωτής, LM35 Temperature Sensor.
Λογισμικό: Atmel studio 6.1, progisp ή flash magic.
Διάγραμμα κυκλώματος και επεξήγηση
Στο κύκλωμα, το PORTB του ATMEGA32 συνδέεται στη θύρα δεδομένων της οθόνης LCD. Εδώ πρέπει να θυμόμαστε να απενεργοποιήσουμε την επικοινωνία JTAG στο PORTC ή ATMEGA αλλάζοντας τα bytes ασφάλειας, εάν θέλει να χρησιμοποιήσει το PORTC ως κανονική θύρα επικοινωνίας. Σε LCD 16x2 υπάρχουν 16 ακίδες πάνω από όλα αν υπάρχει οπίσθιο φως, εάν δεν υπάρχει πίσω φως θα υπάρχουν 14 ακίδες. Κάποιος μπορεί να τροφοδοτήσει ή να αφήσει τις πίσω ακίδες. Τώρα στις 14 ακίδες υπάρχουν 8 ακίδες δεδομένων (7-14 ή D0-D7), 2 ακροδέκτες τροφοδοσίας (1 & 2 ή VSS & VDD ή gnd & + 5v), 3ος ακροδέκτης για έλεγχο αντίθεσης (VEE-ελέγχει πόσο παχύς πρέπει να είναι οι χαρακτήρες φαίνεται), 3 ακίδες ελέγχου (RS & RW & E).
Στο κύκλωμα, μπορείτε να παρατηρήσετε ότι έχω πάρει μόνο δύο ακίδες ελέγχου, καθώς αυτό δίνει την ευελιξία της καλύτερης κατανόησης. Το bit αντίθεσης και το READ / WRITE δεν χρησιμοποιούνται συχνά, ώστε να μπορούν να βραχυκυκλωθούν στη γείωση. Αυτό θέτει την οθόνη LCD σε υψηλότερη αντίθεση και λειτουργία ανάγνωσης. Πρέπει απλώς να ελέγξουμε ENABLE και RS καρφίτσες για να στείλουμε ανάλογα χαρακτήρες και δεδομένα.
Οι συνδέσεις που γίνονται για LCD δίνονται παρακάτω:
Γείωση PIN1 ή VSS ------------------
PIN2 ή VDD ή VCC ------------ + 5v power
PIN3 ή VEE --------------- γείωση (δίνει τη μέγιστη αντίθεση καλύτερα για έναν αρχάριο)
PIN4 ή RS (Επιλογή καταχώρησης) --------------- PD6 του uC
PIN5 ή RW (Ανάγνωση / Εγγραφή) ----------------- γείωση (θέτει την οθόνη LCD σε λειτουργία ανάγνωσης διευκολύνει την επικοινωνία για τον χρήστη)
PIN6 ή E (Ενεργοποίηση) ------------------- PD5 του uC
PIN7 ή D0 ----------------------------- PB0 του uC
PIN8 ή D1 ----------------------------- PB1 του uC
PIN9 ή D2 ----------------------------- PB2 του uC
PIN10 ή D3 ----------------------------- PB3 του uC
PIN11 ή D4 ----------------------------- PB4 του uC
PIN12 ή D5 ----------------------------- PB5 του uC
PIN13 ή D6 ----------------------------- PB6 του uC
PIN14 ή D7 ----------------------------- PB7 του uC
Στο κύκλωμα μπορείτε να δείτε ότι έχουμε χρησιμοποιήσει την επικοινωνία 8bit (D0-D7), αλλά αυτό δεν είναι υποχρεωτικό, μπορούμε να χρησιμοποιήσουμε την επικοινωνία 4bit (D4-D7), αλλά με το πρόγραμμα επικοινωνίας 4 bit γίνεται λίγο περίπλοκο, οπότε έχω επιλέξει το 8 bit επικοινωνία.
Έτσι από απλή παρατήρηση από τον παραπάνω πίνακα συνδέουμε 10 ακροδέκτες LCD με ελεγκτή στον οποίο 8 ακίδες είναι καρφίτσες δεδομένων και 2 ακίδες για έλεγχο. Η έξοδος τάσης που παρέχεται από τον αισθητήρα δεν είναι εντελώς γραμμική. θα είναι θορυβώδες. Για να φιλτράρετε τον θόρυβο πρέπει να τοποθετηθεί ένας πυκνωτής στην έξοδο του αισθητήρα όπως φαίνεται στο σχήμα.
Πριν προχωρήσουμε, πρέπει να μιλήσουμε για ADC του ATMEGA32A. Στο ATMEGA32A, μπορούμε να δώσουμε αναλογική είσοδο σε οποιοδήποτε από τα οκτώ κανάλια του PORTA, δεν έχει σημασία ποιο κανάλι επιλέγουμε καθώς όλα είναι ίδια. Θα επιλέξουμε το κανάλι 0 ή το PIN0 του PORTA. Στο ATMEGA32A, το ADC έχει ανάλυση 10 bit, οπότε ο ελεγκτής μπορεί να ανιχνεύσει μια αίσθηση μιας ελάχιστης αλλαγής Vref / 2 ^ 10, οπότε αν η τάση αναφοράς είναι 5V λαμβάνουμε μια αύξηση ψηφιακής εξόδου για κάθε 5/2 ^ 10 = 5mV. Έτσι, για κάθε αύξηση 5mV στην είσοδο, θα έχουμε μια αύξηση στην ψηφιακή έξοδο.
Τώρα πρέπει να ορίσουμε το μητρώο ADC με βάση τους ακόλουθους όρους:
1. Πρώτα απ 'όλα πρέπει να ενεργοποιήσουμε τη δυνατότητα ADC στο ADC.
2. Δεδομένου ότι μετράμε τη θερμοκρασία δωματίου, δεν χρειαζόμαστε πραγματικά τιμές πέραν των εκατό βαθμών (έξοδος 1000mV LM35). Έτσι μπορούμε να ρυθμίσουμε τη μέγιστη τιμή ή αναφορά του ADC σε 2.5V.
3. Ο ελεγκτής διαθέτει δυνατότητα μετατροπής σκανδάλης, που σημαίνει ότι η μετατροπή ADC πραγματοποιείται μόνο μετά από εξωτερική σκανδάλη, καθώς δεν θέλουμε να χρειαστεί να ρυθμίσουμε τους καταχωρητές ώστε το ADC να λειτουργεί σε συνεχή λειτουργία ελεύθερης εκτέλεσης.
4. Για κάθε ADC, η συχνότητα μετατροπής (αναλογική τιμή σε ψηφιακή τιμή) και η ακρίβεια της ψηφιακής εξόδου είναι αντιστρόφως ανάλογες. Έτσι, για καλύτερη ακρίβεια της ψηφιακής εξόδου πρέπει να επιλέξουμε μικρότερη συχνότητα. Για μικρότερο ρολόι ADC ρυθμίζουμε την προπώληση του ADC στη μέγιστη τιμή (128). Εφόσον χρησιμοποιούμε το εσωτερικό ρολόι 1MHZ, το ρολόι ADC θα είναι (1000000/128).
Αυτά είναι τα μόνα τέσσερα πράγματα που πρέπει να γνωρίζουμε για να ξεκινήσουμε με το ADC. Όλα τα παραπάνω τέσσερα χαρακτηριστικά ορίζονται από δύο καταχωρητές.
ΚΟΚΚΙΝΟ (ADEN): Αυτό το bit πρέπει να ρυθμιστεί για την ενεργοποίηση της δυνατότητας ADC του ATMEGA.
ΜΠΛΕ (REFS1, REFS0): Αυτά τα δύο bit χρησιμοποιούνται για τον καθορισμό της τάσης αναφοράς (ή της μέγιστης τάσης εισόδου που πρόκειται να δώσουμε). Δεδομένου ότι θέλουμε να έχουμε τάση αναφοράς 2.56V, REFS0 και REFS1 και τα δύο πρέπει να ρυθμιστούν από τον πίνακα.
LIGHT GREEN (ADATE): Αυτό το bit πρέπει να ρυθμιστεί ώστε το ADC να λειτουργεί συνεχώς (λειτουργία ελεύθερης λειτουργίας).
PINK (MUX0-MUX4): Αυτά τα πέντε bits προορίζονται για το κανάλι εισόδου. Δεδομένου ότι πρόκειται να χρησιμοποιήσουμε ADC0 ή PIN0, δεν χρειάζεται να ορίσουμε bits όπως στον πίνακα.
BROWN (ADPS0-ADPS2): αυτά τα τρία bits είναι για τη ρύθμιση της προεπιλογής για ADC. Λοιπόν, χρησιμοποιούμε μια προκαταρκτική τιμή 128, πρέπει να ρυθμίσουμε και τα τρία bit.
DARK GREEN (ADSC): αυτό το bit έχει ρυθμιστεί για να ξεκινήσει η μετατροπή το ADC. Αυτό το bit μπορεί να απενεργοποιηθεί στο πρόγραμμα όταν πρέπει να σταματήσουμε τη μετατροπή.
Για να κάνετε αυτό το έργο με το Arduino, δείτε αυτό το σεμινάριο: Ψηφιακό θερμόμετρο χρησιμοποιώντας το Arduino
Επεξήγηση προγραμματισμού
Η εργασία της ΜΕΤΡΗΣΗΣ ΘΕΡΜΟΚΡΑΣΙΑΣ εξηγείται καλύτερα στο βήμα προς βήμα του κώδικα C που δίνεται παρακάτω:
#include // header για να ενεργοποιήσετε τον έλεγχο ροής δεδομένων πάνω στις ακίδες
#define F_CPU 1000000 // επισυνάπτεται η συχνότητα κρυστάλλου του ελεγκτή
#περιλαμβάνω
#define E 5 // δίνοντας το όνομα "ενεργοποίηση" στον 5ο ακροδέκτη του PORTD, καθώς είναι συνδεδεμένος με την καρφίτσα ενεργοποίησης LCD
#define RS 6 // δίνοντας το όνομα «registerselection» έως 6 ου pin της PORTD, δεδομένου ότι συνδέεται με LCD RS pin
άκυρο send_a_command (εντολή char χωρίς υπογραφή) ·
void send_a_character (μη υπογεγραμμένος χαρακτήρας char).
άκυρο send_a_string (char * string_of_characters);
int main (άκυρο)
{
DDRB = 0xFF; // τοποθέτηση portB και portD ως καρφίτσες εξόδου
DDRD = 0xFF;
_delay_ms (50); // δίνοντας καθυστέρηση 50ms
DDRA = 0; // Λήψη portA ως είσοδος.
ADMUX - = (1 <
ADCSRA - = (1 <0)
{
send_a_character (* string_of_characters ++);
}
}