Εδώ πρόκειται να δημιουργήσουμε μια επικοινωνία μεταξύ ενός μικροελεγκτή ATmega8 και του Arduino Uno. Η επικοινωνία που δημιουργήθηκε εδώ είναι τύπου UART (Universal Asynchronous Receiver Transmitter). Είναι σειριακή επικοινωνία. Με αυτήν τη σειριακή επικοινωνία δεδομένων μπορούν να μοιραστούν μεταξύ δύο ελεγκτών, κάτι που απαιτείται σε διάφορες ενσωματωμένες εφαρμογές συστήματος.
Στα ενσωματωμένα συστήματα πρέπει να έχουμε βασικές γνώσεις σχετικά με τις επικοινωνίες συστήματος, γι 'αυτό κάνουμε αυτό το έργο. Σε αυτό το έργο θα συζητήσουμε το βασικό σύστημα επικοινωνίας και θα στείλουμε μερικά δεδομένα από πομπό σε δέκτη σε σειρά.
Σε αυτό το έργο το ATMEGA8 ενεργεί ως ΜΕΤΑΦΟΡΑΣ και το ARDUINO UNO ενεργεί ως ΔΕΚΤΗΣ. Σε σειριακή επικοινωνία θα στέλνουμε δεδομένα BIT BY BIT, έως ότου μεταφερθεί εντελώς ένα BYTE δεδομένων. Τα δεδομένα μπορεί να έχουν μέγεθος 10 bit, αλλά θα διατηρήσουμε τα 8BITS προς το παρόν.
Απαιτούμενα στοιχεία
Υλικό: ATMEGA8, ARDUINO UNO, τροφοδοτικό (5v), AVR-ISP PROGRAMMER, 100uF πυκνωτής (συνδεδεμένος σε τροφοδοτικό), 1KΩ αντίσταση (δύο τεμάχια), LED, Button.
Λογισμικό: Atmel studio 6.1, progisp ή flash magic, ARDUINO NIGHTLY.
Διάγραμμα κυκλώματος και επεξήγηση
Πριν συζητήσουμε το διάγραμμα κυκλώματος και τον προγραμματισμό για πομπό και δέκτη, πρέπει να κατανοήσουμε τη σειριακή επικοινωνία. Το ATMEGA στέλνει εδώ δεδομένα στο UNO σε σειρά, όπως συζητήθηκε προηγουμένως.
Έχει άλλους τρόπους επικοινωνίας, όπως MASTER SLAVE επικοινωνία, JTAG επικοινωνία, αλλά για εύκολη επικοινωνία επιλέγουμε RS232. Εδώ θα συνδέσουμε το PIN TXD (πομπός) του ATMEGA8 σε RXD (δέκτης) PIN του ARDUINO UNO
Η καθιερωμένη επικοινωνία δεδομένων έχει προγραμματιστεί να έχει:
- Οκτώ bit δεδομένων
- Δύο κομμάτια
- Χωρίς bit ελέγχου ισοτιμίας
- Ρυθμός Baud 9600 BPS (Bits ανά δευτερόλεπτο)
- Ασύγχρονη επικοινωνία (Χωρίς μερίδιο ρολογιού μεταξύ ATMEGA8 και UNO (και οι δύο έχουν διαφορετικές μονάδες ρολογιού))
Για τη δημιουργία UART μεταξύ Arduino Uno και ATMEGA8 πρέπει να προγραμματίσουμε τη ρύθμιση με ακρίβεια. Για αυτό πρέπει να διατηρήσουμε τις παραπάνω παραμέτρους ίδιες και στα δύο άκρα. Σε αυτό ενεργεί ως ΜΕΤΑΦΟΡΑ και άλλες πράξεις ως ΔΕΚΤΗΣ. Θα συζητήσουμε τις παρακάτω πλευρικές ρυθμίσεις.
Τώρα για τη διεπαφή RS232, τα ακόλουθα χαρακτηριστικά πρέπει να ικανοποιούνται για την πλευρά TRANSMITTER (ATMEGA8):
1. Ο ακροδέκτης TXD (δυνατότητα λήψης δεδομένων) του πρώτου ελεγκτή πρέπει να είναι ενεργοποιημένος για το TRANSMITTER.
2. Δεδομένου ότι η επικοινωνία είναι σειριακή, πρέπει να γνωρίζουμε όποτε λαμβάνεται το αντίο δεδομένων, έτσι ώστε να μπορούμε να σταματήσουμε το πρόγραμμα έως ότου ληφθεί το πλήρες byte. Αυτό επιτυγχάνεται επιτρέποντας την πλήρη λήψη δεδομένων.
3. Τα δεδομένα μεταδίδονται και λαμβάνονται στον ελεγκτή σε λειτουργία 8bit. Έτσι, δύο χαρακτήρες θα σταλούν στον ελεγκτή κάθε φορά.
4. Δεν υπάρχουν bit ισοτιμίας, ένα bit διακοπής στα δεδομένα που αποστέλλονται από τη μονάδα.
Τα παραπάνω χαρακτηριστικά ορίζονται στους καταχωρητές ελεγκτών. θα τα συζητήσουμε εν συντομία:
DARK GREY (UDRE): Αυτό το bit δεν ρυθμίστηκε κατά την εκκίνηση, αλλά χρησιμοποιείται κατά τη διάρκεια της εργασίας για να ελέγξει εάν ο πομπός είναι έτοιμος για μετάδοση ή όχι. Δείτε το πρόγραμμα στο TRASMITTER SIDE για περισσότερες λεπτομέρειες.
VOILET (TXEN): Αυτό το bit έχει ρυθμιστεί για την ενεργοποίηση του πείρου πομπού στο TRASMITTER SIDE.
ΚΙΤΡΙΝΟ (UCSZ0, UCSZ1 και UCSZ2): Αυτά τα τρία bit χρησιμοποιούνται για την επιλογή του αριθμού των bit δεδομένων που λαμβάνουμε ή στέλνουμε με μία κίνηση.
Η επικοινωνία μεταξύ δύο SIDES καθιερώνεται ως επικοινωνία οκτώ bit. Ταιριάζοντας την επικοινωνία με τον πίνακα που έχουμε, UCSZ0, UCSZ1 σε ένα και UCSZ2 στο μηδέν.
ORANGE (UMSEL): Αυτό το bit ρυθμίζεται ανάλογα με το αν το σύστημα επικοινωνεί ασύγχρονα (και τα δύο χρησιμοποιούν διαφορετικό ρολόι) ή συγχρονισμένα (και τα δύο χρησιμοποιούν το ίδιο ρολόι).
Και τα δύο ΣΥΣΤΗΜΑΤΑ δεν μοιράζονται κανένα ρολόι. Δεδομένου ότι και οι δύο χρησιμοποιούν το δικό τους εσωτερικό ρολόι. Πρέπει λοιπόν να ρυθμίσουμε το UMSEL σε 0 και στους δύο ελεγκτές.
ΠΡΑΣΙΝΟ (UPM1, UPM0): Αυτά τα δύο bit προσαρμόζονται με βάση την ισοτιμία bit που χρησιμοποιούμε στην επικοινωνία.
Τα δεδομένα ATMEGA εδώ είναι προγραμματισμένα να στέλνουν δεδομένα χωρίς ισοτιμία, καθώς το μήκος μετάδοσης δεδομένων είναι μικρό, μπορούμε σαφώς να μην περιμένουμε απώλεια δεδομένων ή σφάλμα. Επομένως, δεν θέτουμε καμία ισοτιμία εδώ. Έτσι ρυθμίζουμε και τα δύο UPM1, UPM0 στο μηδέν ή αφήνονται, επειδή όλα τα bit είναι 0 από προεπιλογή.
ΜΠΛΕ (USBS): Αυτό το bit χρησιμοποιείται για την επιλογή του αριθμού των bit διακοπής που χρησιμοποιούμε κατά την επικοινωνία.
Η επικοινωνία που την καθιέρωσε είναι ασύγχρονου τύπου, οπότε για να έχουμε ακριβέστερη μετάδοση και λήψη δεδομένων, πρέπει να χρησιμοποιήσουμε δύο bit διακοπής, επομένως θέτουμε το USBS σε «1» στην πλευρά TRANSMITTER.
Ο ρυθμός baud ρυθμίζεται στον ελεγκτή επιλέγοντας το κατάλληλο UBRRH:
Η τιμή UBRRH επιλέγεται με διασταυρούμενο ρυθμό baud και συχνότητα κρυστάλλου CPU:
Έτσι, με την παραπομπή, η τιμή UBRR θεωρείται «6» και έτσι ο ρυθμός baud ορίζεται.
Με αυτό έχουμε δημιουργήσει ρυθμίσεις στο TRANSMITTER SIDE. θα μιλήσουμε για ΛΗΨΗ ΠΑΡΟΥΣΙΑ τώρα.
Η σειριακή επικοινωνία που επιτρέπει στο UNO μπορεί να γίνει χρησιμοποιώντας μία μόνο εντολή.
|
Η επικοινωνία που υποτίθεται ότι καθιερώθηκε γίνεται με ρυθμό BAUD 9600 bit ανά δευτερόλεπτο. Έτσι, για να καθορίσει το UNO τέτοιο ρυθμό baud και να ξεκινήσει σειριακή επικοινωνία χρησιμοποιούμε την εντολή "Serial.begin (9600);" Εδώ το 9600 είναι baud rate και είναι μεταβλητό.
Τώρα που απομένουν εάν λάβουμε δεδομένα, ένα λαμβάνονται δεδομένα από την UNO, θα είναι διαθέσιμα για λήψη. Αυτά τα δεδομένα συλλέγονται με την εντολή "Recedata = Serial.read ();". Με αυτήν την εντολή τα σειριακά δεδομένα μεταφέρονται στα 'Recedata' που ονομάζονται ακέραιος.
Όπως φαίνεται στο κύκλωμα, ένα κουμπί στο συνδεδεμένο στην πλευρά του πομπού, όταν αυτό το κουμπί πατηθεί, τα δεδομένα οκτώ bit αποστέλλονται από το TRANSMITTER (ATMEGA8) και αυτά τα δεδομένα λαμβάνονται από το RECEIVER (ARDUINO UNO). Κατά την επιτυχή λήψη αυτών των δεδομένων, ενεργοποιεί και απενεργοποιεί τη λυχνία LED που είναι συνδεδεμένη σε αυτήν, για να δείξει επιτυχημένη μεταφορά δεδομένων μεταξύ δύο ελεγκτών.
Με αυτό το UART επικοινωνείται μεταξύ του ελεγκτή ATMEGA8 και του ARDUINO UNO.