Σε αυτό το σεμινάριο πρόκειται να δημιουργήσουμε μια σειριακή επικοινωνία μεταξύ δύο μικροελεγκτών ATMEGA8. Η επικοινωνία που δημιουργήθηκε εδώ είναι τύπου UART (Universal Asynchronous Receiver Transmitter). Μέσω αυτής της σειριακής επικοινωνίας τα δεδομένα μπορούν να μοιραστούν μεταξύ δύο μικροελεγκτών, κάτι που απαιτείται σε διάφορα ενσωματωμένα συστήματα.
Απαιτούμενα στοιχεία
Υλικό: ATMEGA8 (2 τεμάχια), τροφοδοτικό (5v), AVR-ISP PROGRAMMER, 100uF πυκνωτής (συνδεδεμένος σε τροφοδοτικό), 1KΩ αντίσταση (δύο τεμάχια), LED, Button.
Λογισμικό: Atmel studio 6.1, progisp ή flash magic.
Διάγραμμα κυκλώματος & επεξήγηση
Ας κατανοήσουμε τη σειριακή επικοινωνία στους μικροελεγκτές AVR. Εδώ το ATMEGA στέλνει δεδομένα σε άλλα ATMEGA σε σειρά. Έχει άλλο τρόπο επικοινωνίας, αλλά για εύκολη επικοινωνία επιλέγουμε RS232. Ο ακροδέκτης RS232 του πρώτου ATMEGA8 συνδέεται με τον ακροδέκτη RXD του δεύτερου ATMEGA8.
Η καθιερωμένη επικοινωνία δεδομένων έχει προγραμματιστεί να έχει:
- Οκτώ bit δεδομένων
- Δύο κομμάτια
- Χωρίς bit ελέγχου ισοτιμίας
- Ρυθμός Baud 2400 BPS (Bits ανά δευτερόλεπτο)
- Ασύγχρονη επικοινωνία (Χωρίς κοινή χρήση ρολογιού μεταξύ δύο ATMEGA8)
Έχουμε λοιπόν δύο σετ καταχωρητές για δύο ATMEGA8 διαφορετικά, όπου το ένα ενεργεί ως ΜΕΤΑΦΟΡΑ και άλλες ενεργεί ως ΔΕΚΤΗΣ.
Τώρα για τη διασύνδεση RS232 μεταξύ δύο μικροελεγκτών ATmega, πρέπει να ικανοποιούνται οι ακόλουθες δυνατότητες για το TRANSMITTER και το RECEIVER:
1. Ο ακροδέκτης TXD (δυνατότητα λήψης δεδομένων) του πρώτου ελεγκτή πρέπει να είναι ενεργοποιημένος για το TRANSMITTER και ο ακροδέκτης RXD του δεύτερου ελεγκτή πρέπει να είναι ενεργοποιημένος για το RECEIVER.
2. Δεδομένου ότι η επικοινωνία είναι σειριακή, πρέπει να γνωρίζουμε όποτε λαμβάνεται το byte δεδομένων, έτσι ώστε να μπορούμε να διακόψουμε το πρόγραμμα έως ότου ληφθεί το πλήρες byte. Αυτό επιτυγχάνεται επιτρέποντας την πλήρη λήψη δεδομένων.
3. Τα δεδομένα μεταδίδονται και λαμβάνονται στον ελεγκτή σε λειτουργία 8bit. Έτσι, δύο χαρακτήρες θα σταλούν στον ελεγκτή κάθε φορά.
4. Δεν υπάρχουν bit ισοτιμίας, ένα bit διακοπής στα δεδομένα που αποστέλλονται από τη μονάδα.
Τα παραπάνω χαρακτηριστικά ορίζονται στους καταχωρητές ελεγκτών. θα τα συζητήσουμε εν συντομία,
DARK GREY (UDRE): (TRASMITTER SIDE) Αυτό το bit δεν ρυθμίστηκε κατά την εκκίνηση, αλλά χρησιμοποιείται κατά τη διάρκεια της εργασίας για να ελέγξει εάν ο πομπός είναι έτοιμος για μετάδοση ή όχι. Δείτε το πρόγραμμα στο TRASMITTER SIDE για περισσότερες λεπτομέρειες.
LIGHT GREY (RXC): (ΠΛΑΙΣΙΟ ΛΗΨΗΣ) Αυτό το bit δεν ρυθμίστηκε κατά την εκκίνηση, αλλά χρησιμοποιείται κατά τη διάρκεια της εργασίας για να ελέγξει εάν ο δέκτης είναι έτοιμος να λάβει δεδομένα ή όχι. Δείτε το πρόγραμμα στο RECEIVING SIDE για περισσότερες λεπτομέρειες.
VOILET (TXEN): (TRASMITTER SIDE) Αυτό το bit έχει ρυθμιστεί για την ενεργοποίηση του πείρου πομπού στο TRASMITTER SIDE.
ΚΟΚΚΙΝΟ (RXEN): (ΛΕΙΤΟΥΡΓΙΑ ΠΛΕΥΡΑ) Αυτό το bit αντιπροσωπεύει τη δυνατότητα λήψης δεδομένων, αυτό το bit πρέπει να ρυθμιστεί ώστε τα δεδομένα από τη μονάδα να λαμβάνονται από τον ελεγκτή, επίσης επιτρέπει την ακίδα RXD του ελεγκτή.
BROWN (RXCIE): Αυτό το bit πρέπει να ρυθμιστεί για διακοπή μετά την επιτυχή λήψη δεδομένων. Ενεργοποιώντας αυτό το bit, γνωρίζουμε αμέσως μετά τη λήψη δεδομένων 8 bit. Δεν πρόκειται να χρησιμοποιήσουμε αυτό το κομμάτι εδώ, οπότε μένει μόνο του.
PINK (URSEL): Αυτό το bit πρέπει να ρυθμιστεί πριν ενεργοποιήσετε άλλα bit στο UCSRC, αφού ορίσετε άλλα απαραίτητα bit στο UCSRC. Το URSEL πρέπει να απενεργοποιηθεί ή να μηδενιστεί. Δεν πρόκειται να χρησιμοποιήσουμε αυτό το κομμάτι εδώ, οπότε μένει μόνο του.
ΚΙΤΡΙΝΟ (UCSZ0, UCSZ1, UCSZ2): (ΛΕΙΤΟΥΡΓΙΑ SIDE & TRASMITTER SIDE) Αυτά τα τρία bits χρησιμοποιούνται για την επιλογή του αριθμού των bit δεδομένων που λαμβάνουμε ή στέλνουμε με μία κίνηση.
Η επικοινωνία μεταξύ δύο ATMEGA καθιερώνεται ως επικοινωνία οκτώ bit. Ταιριάζοντας την επικοινωνία με τον πίνακα που έχουμε, UCSZ0, UCSZ1 σε ένα και UCSZ2 στο μηδέν.
Πρέπει να τα θέσουμε τόσο στην πλευρά λήψης όσο και στη μετάδοση.
ΠΟΡΤΟΚΑΛΙ (UMSEL): (ΛΕΙΤΟΥΡΓΙΑ ΠΛΕΥΡΟΥ & ΠΡΟΣΦΟΡΑΣ) Αυτό το bit ρυθμίζεται ανάλογα με το αν το σύστημα επικοινωνεί ασύγχρονα (και οι δύο χρησιμοποιούν διαφορετικό ρολόι) ή συγχρονισμένα (και τα δύο χρησιμοποιούν το ίδιο ρολόι).
Και οι δύο ελεγκτές δεν κάνουν κοινή χρήση ρολογιού. Δεδομένου ότι και οι δύο χρησιμοποιούν το δικό τους εσωτερικό ρολόι. Πρέπει λοιπόν να ρυθμίσουμε το UMSEL σε 0 και στους δύο ελεγκτές.
ΠΡΑΣΙΝΟ (UPM1, UPM0): (ΛΑΜΒΑΝΟΝΤΑΣ ΠΛΕΥΡΑ & ΠΡΟΣΦΥΓΟΣ) Αυτά τα δύο bit προσαρμόζονται με βάση την ισοτιμία bit που χρησιμοποιούμε στην επικοινωνία.
Το ATMEGA είναι προγραμματισμένο να στέλνει δεδομένα χωρίς ισοτιμία, καθώς το μήκος μετάδοσης δεδομένων είναι μικρό, μπορούμε σαφώς να περιμένουμε καμία απώλεια ή σφάλμα δεδομένων. Επομένως, δεν θέτουμε καμία ισοτιμία εδώ. Έτσι ορίζουμε και τα δύο UPM1, UPM0 στο μηδέν ή αφήνονται, επειδή όλα τα bit είναι 0 από προεπιλογή..
ΜΠΛΕ (USBS): (ΛΑΜΒΑΝΟΝΤΑΣ ΠΛΕΥΡΑ & ΠΡΟΣΦΟΡΑ) Αυτό το bit χρησιμοποιείται για την επιλογή του αριθμού των bit διακοπής που χρησιμοποιούμε κατά την επικοινωνία.
Η επικοινωνία που έχει καθιερωθεί εδώ είναι ασύγχρονου τύπου, οπότε για να έχουμε πιο ακριβή μετάδοση και λήψη δεδομένων, πρέπει να χρησιμοποιήσουμε δύο bit διακοπής, επομένως θέτουμε το USBS σε «1» και στους δύο ελεγκτές.
Ο ρυθμός baud ρυθμίζεται στον ελεγκτή επιλέγοντας το κατάλληλο UBRRH.
Η τιμή UBRRH επιλέγεται με διασταυρούμενο ρυθμό baud και συχνότητα κρυστάλλου CPU.
Έτσι, η τιμή UBRR με πολλαπλή αναφορά θεωρείται «25», και έτσι ο ρυθμός baud ορίζεται.
Όπως φαίνεται στο κύκλωμα, ένα κουμπί συνδέεται στην πλευρά του πομπού. Όταν πατηθεί αυτό το κουμπί τα δεδομένα οκτώ bit αποστέλλονται από το TRANSMITTER και αυτά τα δεδομένα λαμβάνονται από το RECEIVER. Κατά τη λήψη αυτών των δεδομένων με επιτυχία, ενεργοποιεί και απενεργοποιεί το LED που είναι συνδεδεμένο σε αυτό, το οποίο δείχνει επιτυχημένη μεταφορά δεδομένων μεταξύ δύο ελεγκτών.