ΥΠΗΡΕΣΙΑ ΕΡΓΑΣΤΗΡΙΟΥ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΕΥΡΥΖΩΝΙΚΩΝ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ ΣΧΕΔΙΑΣΗ & ΥΛΟΠΟΙΗΣΗ ΥΠΟΣΥΣΤΗΜΑΤΩΝ ΕΛΕΓΧΟΥ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΣΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΥΠΟΣΥΣΤΗΜΑΤΩΝ ΣΕ FPGA ΔΡ. ΚΟΥΛΟΥΡΑΣ ΓΡΗΓΟΡΗΣ, ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΤΕΙ ΑΘΗΝΑΣ ΑΙΓΑΛΕΩ, ΑΥΓΟΥΣΤΟΣ 2012
ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ... 2 ΣΚΟΠΟΣ... 4 ΕΙΣΑΓΩΓΗ... 4 ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ Η FPGA... 5 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΠΡΟΓΡΑΜΜΑΤΙΖΟΜΕΝΕΣ ΔΙΑΤΑΞΕΙΣ ΠΥΛΩΝ... 6 ΑΝΑΠΤΥΞΙΑΚΕΣ ΔΙΑΤΑΞΕΙΣ ΜΕ FPGA... 8 ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΙΚΡΟΕΛΕΓΚΤΩΝ AVR... 11 ΔΗΜΙΟΥΡΓΙΑ ΝΕΟΥ PROJECT... 12 ΑΝΟΙΓΜΑ ΥΠΑΡΧΟΝΤΟΣ PROJECT... 15 ΕΛΕΓΧΟΣ ΣΥΝΤΑΚΤΙΚΩΝ ΛΑΘΩΝ... 17 ΕΛΕΓΧΟΣ ΛΟΓΙΚΩΝ ΛΑΘΩΝ... 19 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΙΚΡΟΕΛΕΓΚΤΗ... 20 ΠΑΡΑΔΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΩΝ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ... 27 ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΖΑΡΙΟΥ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ... 27 ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΒΟΛΤΟΜΕΤΡΟΥ ΜΕ LCD ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΗ... 29 ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΘΕΡΜΟΜΕΤΡΟΥ ΜΕ LCD ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ... 30 ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΡΟΛΟΓΙΟΥ ΜΕ LCD ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ... 31 ΣΥΣΤΗΜΑ ΡΥΘΜΙΣΗΣ ΕΝΤΑΣΗΣ ΦΩΤΙΣΜΟΥ LED ΜΕ PWM... 32 ΠΑΡΑΔΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΩΝ ΜΕ FPGA... 33 ΥΛΟΠΟΙΗΣΗ ΠΥΛΗΣ AND 2 ΕΙΣΟΔΩΝ ΜΕ FPGA... 33 ΥΛΟΠΟΙΗΣΗ ΠΛΗΡΟΥΣ ΑΘΡΟΙΣΤΗ ΜΕ FPGA... 34 ΥΛΟΠΟΙΗΣΗ ΠΟΛΥΠΛΕΚΤΗ 2 ΣΕ 1 ΜΕ FPGA... 37 ΥΛΟΠΟΙΗΣΗ ΔΥΑΔΙΚΗΣ ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 8-LED ΜΕ FPGA... 37 ΥΛΟΠΟΙΗΣΗ BCD ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 8-LED ΜΕ FPGA... 37
ΥΛΟΠΟΙΗΣΗ BCD ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 7-SEGMENT ΜΕ FPGA... 37 ΥΛΟΠΟΙΗΣΗ ΡΟΛΟΓΙΟΥ ΜΕ 7-SEGMENT ΜΕ FPGA... 37 ΑΝΑΦΟΡΕΣ... 38
ΣΚΟΠΟΣ Σκοπός του παραδοτέου είναι η εξοικείωση των φοιτητών με τη σχεδίαση και υλοποίηση υποσυστημάτων με μικροελεγκτές και FPGA. Ειδικότερα θα επικεντρωθεί στο σχεδιασμό υποσυστημάτων ελέγχου και επικοινωνιών. ΕΙΣΑΓΩΓΗ Τα τελευταία χρόνια παρατηρείται αξιοσημείωτη αύξηση της χρήσης των FPGAs. Ο λόγος είναι ότι αυξάνουν οι απαιτήσεις της σχεδίασης και της πολυπλοκότητας των συστημάτων. Οι μικροελεγκτές δεν μπορούν να ανταποκριθούν σε πολλές περιπτώσεις. Σε αυτές τις περιπτώσεις τα PLDs, τα CPLDs και τα FPGA έρχονται να συμπληρώσουν το κενό στην σχεδίαση των ενσωματωμένων συστημάτων. Έτσι πολύπλοκα υποσυστήματα σχεδιάζονται από τις εταιρίες κατασκευής FPGA, σε μορφή βιβλιοθηκών, με σκοπό να μπορούμε να ενσωματώσουμε εξειδικευμένο hardware στην εφαρμογή μας αν χρησιμοποιήσουμε FPGA. Πολλές φορές θα δούμε ότι μπορούμε να ενσωματώσουμε έναν ή περισσότερους μικροελεγκτές μέσα σε ένα FPGA, καθώς επίσης μπορούμε επιπλέον να προσθέσουμε και να διασυνδέσουμε εσωτερικά, δικά μας περιφερειακά και λογικά κυκλώματα. Ένα παράδειγμα χρήσης FPGA είναι οι αποκωδικοποιητές MPEG-4 που έχουν όλες οι σύγχρονες τηλεοράσεις. Παρακάτω θα δούμε τον τρόπο με τον οποίο ένας μηχανικός μπορεί να σχεδιάσει εξειδικευμένα ενσωματωμένα συστήματα κάνοντας χρήση των παραπάνω τεχνολογιών.
ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ ή FPGA Σε αυτό το σημείο θα εξετάσουμε τον τρόπο με τον οποίο θα πρέπει κάποιος να σχεδιάσει και γενικότερα να αναπτύξει μια συγκεκριμένη εφαρμογή κάνοντας χρήση μικροελεγκτή ή FPGA. Τα βήματα που πρέπει να ακολουθήσει είναι τα παρακάτω: 1) Πρώτα πρέπει να καθοριστούν οι προδιαγραφές του νέου συστήματος που είναι προς ανάπτυξη. 2) Να σχεδιαστούν τα λειτουργικά διαγράμματα, διαγράμματα ροής, διαγράμματα χρονισμού που είναι απαραίτητα για την τεκμηρίωση της όλης σχεδιαστικής διαδικασίας. 3) Να αναζητηθεί το καταλληλότερο υλικό ανάλογα με την εφαρμογή. Σε αυτό το βήμα θα γίνεται κατανοητό αν είναι απαραίτητη η χρήση μικροελεγκτή ή FPGA. 4) Γίνεται επαλήθευση ότι ο μικροελεγκτής ή το FPGA που επιλέχτηκε ικανοποιεί τις προδιαγραφές της ταχύτητας, κατανάλωσης ενέργειας κ.τ.λ. που τέθηκαν στην αρχή. 5) Απόκτηση εργαλείων που χρειάζονται για την ανάπτυξη της εφαρμογής. Όταν λέμε εργαλεία εννοούμε υλικό και λογισμικό. Όταν μιλάμε για μικροελεγκτές, στο υλικό συγκαταλέγεται για παράδειγμα μια συσκευή προγραμματισμού (Programmer), ενώ στο λογισμικό ανήκει ο Συμβολομεταφραστής (Assembler) ή ακόμη ένας Μεταγλωττιστής (Compiler) ή ένας Εξομοιωτής (Simulator). Σε αρκετές περιπτώσεις χρειάζεται και Προσομοιωτής Υλικού (Hardware Emulator). Όταν μιλάμε για FPGA στο υλικό συγκαταλέγεται για παράδειγμα ένα Evaluation Board, ενώ στο λογισμικό ανήκει ο ένα Framework για υλοποίηση και μεταγλώττιση κώδικα VHDL. 6) Εφόσον είστε εξοικειωμένοι με τον συγκεκριμένο μικροελεγκτή ή FPGA, προχωράτε στην σχεδίαση ενός πρωτοτύπου της εφαρμογής σας. Σε άλλη περίπτωση πρέπει να εξοικειωθείτε με την οικογένεια του συγκεκριμένου hardware, υλοποιώντας πρώτα μερικά απλά παραδείγματα τα οποία θα πρέπει να ελέγξετε με την βοήθεια των αναπτυξιακών πλακετών ή του λογισμικού εξομοίωσης. 7) Σε αυτό το σημείο θα πρέπει να γίνει ο σχεδιασμός του λογισμικού. Αναλυτικά διαγράμματα ροής θα μας βοηθήσουν πριν ξεκινήσουμε να γράφουμε τον κώδικα. Πρώτα πρέπει να γραφτεί ο κορμός του κυρίως προγράμματος και έπειτα ακολουθούν όλες οι υλοποιήσεις των υπορουτινών. Η ανάπτυξη της εφαρμογής σε επίπεδο υλικού μπορεί να διεξάγεται παράλληλα με την όλη διαδικασία. Συνεχώς θα πρέπει να γίνεται έλεγχος αποσφαλμάτωσης (debug).
8) Αφού έχει φτάσει σε ικανοποιητικό βαθμό λειτουργικότητας το πρόγραμμα, πρέπει να τελειώσει ο σχεδιασμός και η κατασκευή του υλικού (hardware) και να ενσωματωθεί στην συσκευή. Σε αυτή την φάση γίνονται και πάλι έλεγχοι καλής λειτουργίας του προγράμματος και αποσφαλμάτωση, μέχρι το σύστημα να πληροί τις προδιαγραφές. 9) Κατά την διάρκεια ανάπτυξης της εφαρμογής θα πρέπει να γίνεται σωστή αρχειοθέτηση στα σχέδια του υλικού και του λογισμικού. Πολύ σημαντικό επίσης είναι ο καλός σχολιασμός των προγραμμάτων κυρίως για την διευκόλυνσή σας σε περίπτωση παραγωγής μελλοντικών αναβαθμισμένων εκδόσεων της συσκευής. 10) Στο τελικό στάδιο όλης αυτής της διαδικασίας, το σύστημα θα πρέπει να εγκατασταθεί στο πραγματικό περιβάλλον λειτουργίας του. Θα πρέπει να περάσει για μια ακόμα φορά τα τεστ καλής λειτουργίας στις πλέον ρεαλιστικές συνθήκες. Αν όλα δουλεύουν σωστά τότε τίθεται σε διαδικασίες μαζικής παραγωγής. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΠΡΟΓΡΑΜΜΑΤΙΖΟΜΕΝΕΣ ΔΙΑΤΑΞΕΙΣ ΠΥΛΩΝ Για την υλοποίηση μιας εφαρμογής με χρήση μιας γλώσσας περιγραφής υλικού (VHDL ή Verilog) είναι απαραίτητη η χρήση ενός σχεδιαστικού περιβάλλοντος CAD με το οποίο διεκπεραιώνονται ορισμένες εργασίες, όπως η σχεδίαση του συστήματος σε κάποια μορφή (σχηματική ή περιγραφική), η εύρεση και διόρθωση πιθανών σφαλμάτων, η συμβολομετάφραση (compilation), η συναρμολόγηση (assembling) του συστήματος, η εξομοίωση λειτουργίας του, ο προγραμματισμός του FPGA και αρκετές άλλες. Εικόνα 1 Ροή σχεδίασης στο λογισμικό Quartus II
Το Quartus II της Altera παρέχει ένα ολοκληρωμένο, πολυμορφικό περιβάλλον σχεδίασης, το οποίο εύκολα προσαρμόζεται στις εκάστοτε σχεδιαστικές ανάγκες. Παρέχει επίσης πληροφορίες για όλα τα στάδια υλοποίησης του συστήματος. Στην παρακάτω εικόνα φαίνεται η ροή σχεδίασης στο λογισμικό Quartus II. Κάποιες από τις βασικές προσφερόμενες λειτουργίες είναι οι ακόλουθες: 1) Σχεδίαση του συστήματος κυκλώματος με την βοήθεια ενός σχεδιαστικού εργαλείου ηλεκτρονικών κυκλωμάτων (Electronic Design Editor). 2) Περιγραφή του συστήματος κυκλώματος σε κάποια γλώσσα περιγραφής υλικού (Hardware Description Language). 3) Τοποθέτηση του ηλεκτρονικού κυκλώματος σε προκαθορισμένα από τον χρήση λογικά κελιά στο FPGA, με την βοήθεια του Floorplan Editor. 4) Εξομοίωση του κυκλώματος για την ορθή λειτουργία του με απλή σχεδίαση των κυματομορφών εισόδου εξόδου. 5) Χρονική ανάλυση του κυκλώματος με την βοήθεια του Timing Analyzer. 6) Παραγωγή των απαραίτητων αρχείων (.sof και.pof) για τον προγραμματισμό του FPGA.
ΑΝΑΠΤΥΞΙΑΚΕΣ ΔΙΑΤΑΞΕΙΣ ΜΕ FPGA Παρακάτω βλέπουμε μια σύγχρονη αναπτυξιακή διάταξη με FPGA της εταιρίας ALTERA, καθώς και τα βασικότερα χαρακτηριστικά της. Εικόνα 2 - Αναπτυξιακή διάταξη με FPGA της Altera
FPGA Devices Stratix III EP3SL150 (DE3-150) 142,000 logic elements (LEs) 5,499K total memory Kbits 384 18x18-bit multipliers blocks 736 user I/Os Stratix III EP3SE260 (DE3-260) 254,400 logic elements (LEs) 14,688K total memory Kbits 768 18x18-bit multipliers blocks 736 user I/Os Stratix III EP3SL340 (DE3-340) 338,000 logic elements (LEs) 16,272K total memory Kbits 576 18x18-bit multipliers blocks 736 user I/Os Η αναπτυξιακή διάταξη DE3 έχει εξαιρετικά χαρακτηριστικά που επιτρέπουν στον σχεδιαστή να υλοποιήσει γρήγορα και αξιόπιστα, εφαρμογές με υψηλές απαιτήσεις ταχύτητας και πολυπλοκότητας αλγορίθμων. Παρακάτω φαίνονται τα κυριότερα χαρακτηριστικά της. Built-in USB Blaster for programming and user API control JTAG programming mode DDR2 SO-DIMM socket 4 push-button switches 1 DIP switch ( x8) 4 slide switches 8 RGB LEDs 2 seven-segment displays USB Host/Slave Controller with one mini-ab for host/device and two type A for device SD Card socket 50MHz onboard oscillator for clock source 1 SMA connector for external clock input 1 SMA connector for PLL clock output Eight 180-pin High Speed Terasic Connectors ( HSTC ), where 4 male and 4 female connectors are on the top and bottom of DE3, respectively. Two 40-pin Expansion Headers
Η αναπτυξιακή διάταξη που φαίνεται παρακάτω είναι η Spartan 3 της Xilinx. Τα παραδείγματα εφαρμογών που ακολουθούν είναι γραμμένα για αυτή την αναπτυξιακή διάταξη. Εικόνα 3 - Αναπτυξιακή διάταξη με FPGA της Xilinx Εικόνα 4 Προϊόντα της Spartan-3
ΠΕΡΙΒΑΛΛΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΜΙΚΡΟΕΛΕΓΚΤΩΝ AVR Σε αυτό το σημείο θα δούμε το ελεύθερο λογισμικό AVR Studio, με το οποίο ο φοιτητής μπορεί να γράψει και να αποσφαλματώσει τον κώδικά του είτε σε συμβολική γλώσσα είτε σε γλώσσα C, και στην συνέχεια να προγραμματίσει τον μικροελεγκτή AVR με την βοήθεια της αναπτυξιακής διάταξης STK600 που περιγράψαμε στο Παραδοτέο Π3.4.1.4. Εικόνα 5 Περιβάλλον προγραμματισμού AVR Studio Στην παραπάνω εικόνα βλέπουμε το περιβάλλον προγραμματισμού AVR Studio με το οποίο θα ασχοληθούμε σε αυτό το μάθημα. Το πρόγραμμα αυτό τρέχει σε περιβάλλον Windows XP και Windows 7. Στα επόμενα υποκεφάλαια θα δούμε πιο αναλυτικά το περιβάλλον προγραμματισμού και εξομοιώσεις.
ΔΗΜΙΟΥΡΓΙΑ ΝΕΟΥ PROJECT Πριν να δημιουργήσουμε ένα νέο Project, πρέπει να σιγουρευτούμε ότι δεν υπάρχει κάποιο project ήδη ανοιχτό. Εάν υπάρχει ανοιχτό Project, επιλέγουμε από το μενού Project Close Project. Τώρα μπορούμε να δημιουργήσουμε ένα νέο Project επιλέγοντας από το μενού Project New Project. Εικόνα 6 Δημιουργία νέου Project Όπως βλέπουμε στην Εικόνα 6, στο πεδίο Location, θα πρέπει να αναγράφεται η διαδρομή στο σκληρό δίσκο που θέλουμε να αποθηκευτεί το νέο μας Project. Εάν δεν γράφει την σωστή διαδρομή με το κουμπί Browse, μπορούμε να επιλέξουμε την διαδρομή που επιθυμούμε. Στο πεδίο Project type, για να γράψουμε το Project σε συμβολική γλώσσα, θα επιλέξουμε Atmel AVR Assembler. Στο πεδίο Project name γράφουμε το όνομα που επιθυμούμε. Καλό είναι να μην αφήνουμε κενά και να μην χρησιμοποιούμε Ελληνικούς ή άλλους ειδικούς χαρακτήρες στην ονομασία του Project για να έχουμε συμβατότητα με άλλους Η/Υ. Για τις ανάγκες του μαθήματος θα τυποποιήσουμε την ονομασία των Project όπως φαίνεται και στην Εικόνα 7. Το όνομα θα αποτελείται από τον αριθμό της εργαστηριακής άσκησης, και τον αύξοντα αριθμό του ερωτήματος που έχουμε να λύσουμε και τέλος τον τύπο του μικροελεγκτή. Για παράδειγμα ένας τίτλος Project που θέλει να δηλώσει ότι ο μικροελεγκτής που χρησιμοποιούμε είναι ο ATmega16 και ότι θα λύσουμε το τέταρτο (4ο) ερώτημα της πρώτης (1ης) άσκησης, θα ήταν «ASK01_04_ATmega16». Θα διαπιστώσουμε ότι αυτόματα γράφεται και στο πεδίο Initial file, το ίδιο όνομα με το Project.
Εικόνα 7 Ονομασία νέου Project Στην συνέχεια πατάμε το κουμπί Next και εμφανίζεται ένας νέος διάλογος όπως φαίνεται στην Εικόνα 8. Σε αυτόν τον διάλογο πρέπει να επιλέξουμε την πλατφόρμα αποσφαλμάτωσης στο πεδίο Debug platform και τον μικροελεγκτή στο πεδίο Device που θα χρησιμοποιήσουμε στο νέο Project. Στο παράδειγμά μας έχουμε επιλέξει AVR Simulator και ATmega16 αντίστοιχα. Εικόνα 8 Επιλογή πλατφόρμας αποσφαλμάτωσης και μικροελεγκτή
Τέλος πατάμε το κουμπί Finish. Τώρα το Project έχει δημιουργηθεί και εμείς πρέπει να ξεκινήσουμε να προγραμματίζουμε. Στην απεικονίζεται το περιβάλλον ανάπτυξης κώδικα σε συμβολική γλώσσα. Για τις ανάγκες του μαθήματος και την ευκολότερη ανάπτυξη κώδικα σε συμβολική γλώσσα (Assembly), σας δίνεται σε επόμενο κεφάλαιο, ένα περίγραμμα προγράμματος που πρέπει πάντα να το ακολουθείτε. Εικόνα 9 Περιβάλλον ανάπτυξης κώδικα
ΑΝΟΙΓΜΑ ΥΠΑΡΧΟΝΤΟΣ PROJECT Πριν να ανοίξουμε ένα νέο Project, πρέπει να σιγουρευτούμε ότι δεν υπάρχει κάποιο project ήδη ανοιχτό. Εάν υπάρχει ανοιχτό Project, επιλέγουμε από το μενού Project Close Project. Τώρα μπορούμε να δημιουργήσουμε ένα νέο Project επιλέγοντας από το μενού Project New Project. Εικόνα 10 Διάλογος ανοίγματος υπάρχοντος Project Όπως βλέπουμε στην Εικόνα 10, εμφανίζεται ένας διάλογος για άνοιγμα υπάρχοντος Project. Με την βοήθεια που διαλόγου αυτού πλοηγούμαστε στα αποθηκευτικά μέσα του συστήματός μας και επιλέγουμε το αρχείο τύπου *.aps που βρίσκεται αποθηκευμένο στον σκληρό μας δίσκο. Σε αυτό το σημείο χρειάζεται να δώσουμε λίγο προσοχή. Όταν θέλουμε να μεταφέρουμε ένα Project σε έναν άλλο Η/Υ, θα πρέπει να αντιγράψουμε όλο τον φάκελο του Project, διότι το Project αποτελείται από αρκετά αρχεία. Όλα τα αρχεία του Project είναι σημαντικά, αλλά τα πιο σημαντικά είναι τα αρχεία *.asm τα οποία περιέχουν τον κώδικα που έχουμε γράψει σε συμβολική γλώσσα (Assembly).
Εικόνα 11 Ανοιγμένο Project έτοιμο για περαιτέρω επεξεργασία Αφού πατήσουμε το κουμπί Open, θα δούμε να φορτώνεται το Project στον Η/Υ και να είναι έτοιμο για περαιτέρω επεξεργασία. Η Εικόνα 11 απεικονίζει το Project που ανοίξαμε.
ΕΛΕΓΧΟΣ ΣΥΝΤΑΚΤΙΚΩΝ ΛΑΘΩΝ Αφού ολοκληρωθεί το γράψιμο ενός νέου προγράμματος ή το άνοιγμα ενός υφιστάμενου Project, πρέπει να ακολουθηθούν κάποια βασικά βήματα προκειμένου να διορθώσουμε τυχόν συντακτικά ή λογικά λάθη στον κώδικα σε συμβολική γλώσσα. Πρώτα θα πρέπει να ελεγχθεί ο κώδικας για συντακτικά λάθη. Αυτό γίνεται επιλέγοντας από το μενού Build Build ή εναλλακτικά πατώντας το πλήκτρο συντόμευσης F7. Σε αυτή την φάση τρέχει ο συμβολομεταφραστής ή αλλιώς Assembler. Εικόνα 12 Έλεγχος συντακτικών λαθών
Εικόνα 13 Μηνύματα συμβολομεταφραστή Σε αυτό το σημείο πρέπει να κοιτάξουμε προσεκτικά την έξοδο του συμβολομεταφραστή. Στην Εικόνα 13 φαίνεται ότι δεν υπάρχουν συντακτικά λάθη, καθώς μας παρουσιάζονται και μερικά βασικά στατιστικά που πρέπει ο προγραμματιστής να γνωρίζει. Για παράδειγμα εμφανίζεται το ποσοστό κάλυψης της μνήμης προγράμματος και δεδομένων. Στην περίπτωση που υπάρχουν συντακτικά λάθη ο συμβολομεταφραστής μας καταμετράει τα λάθη αυτά και μας προτρέπει να τα διορθώσουμε αφού πρώτα μας έχει επισημάνει τις γραμμές που υπάρχουν τα λάθη. Σε αυτή την περίπτωση πρέπει να διορθώσουμε τα λάθη και να επαναλάβουμε την διαδικασία μέχρι να δούμε το μήνυμα «Assembly complete, 0 errors, 0 warnings».
ΕΛΕΓΧΟΣ ΛΟΓΙΚΩΝ ΛΑΘΩΝ Αφού ολοκληρωθεί ο έλεγχος για πιθανά συντακτικά λάθη, ο προγραμματιστής έχει την δυνατότητα μέσα από το ίδιο λογισμικό να ελέγξει την ορθή λειτουργία του προγράμματος που έχει γράψει. Για να γίνει αυτό πρέπει να εξομοιωθεί ο κώδικας και να διαπιστωθούν τυχών λογικά λάθη που δεν μπορεί να τα ανιχνεύσει ο συμβολομεταφραστής. Εικόνα 14 Εκτέλεση λειτουργίας εξομοίωσης Αυτό γίνεται επιλέγοντας από το μενού Build Build and Run ή εναλλακτικά πατώντας το συνδυασμό πλήκτρων συντόμευσης ctrl+f7. Σε αυτή την φάση τρέχει ξανά ο συμβολομεταφραστής που είναι προϋπόθεση για την εξομοίωση του προγράμματος. Εφόσον δεν υπάρχουν συντακτικά λάθη, εκτελείται η εξομοίωση. Στην Εικόνα 14 βλέπουμε στο τμήμα παραθύρου του κώδικα, ένα κίτρινο βελάκι που μας δείχνει την επόμενη προς εκτέλεση εντολή, δηλαδή την τιμή του Program Counter. Αριστερά φαίνεται ο επεξεργαστής με τους βασικότερους καταχωρητές του, PC (Program Counter), SP (Stack Pointer), X pointer, Y pointer, Z pointer, SREG (Status REGister),
R0 έως R31, η συχνότητα λειτουργίας του μικροελεγκτή καθώς και ένας απαριθμητής των κύκλων ρολογιού που έχουν περάσει από μετά από την εκκινήσει του προγράμματος του μικροελεγκτή. Στο ίδιο παράθυρο, αλλά δεξιά αυτή την φορά, βλέπουμε όλα τα εσωτερικά περιφερειακά του μικροελεγκτή στα οποία μπορούμε να πλοηγηθούμε από το γραφικό περιβάλλον του AVR Studio. Μπορούμε να δούμε καθώς και να αλλάξουμε τις τιμές των καταχωρητών που επηρεάζουν την λειτουργία τους κατά την διάρκεια της εξομοίωσης. Επιλέγοντας διαδοχικά από το μενού Debug Step Into ή πατώντας το πλήκτρο συντόμευσης F11, εκτελείται η τρέχουσα εντολή και ο φοιτητής μπορεί να παρακολουθήσει τις αλλαγές που συμβαίνουν στο εσωτερικό του μικροελεγκτή. Ο εξομοιωτής της λειτουργίας των μικροελεγκτών AVR (AVR Simulator) που μας προσφέρει το δωρεάν λογισμικό AVR Studio, είναι πολύ χρήσιμο εργαλείο και βοηθάει τον φοιτητή να κατανοήσει σε βάθος την λειτουργία των μικροελεγκτών. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΙΚΡΟΕΛΕΓΚΤΗ Αφού τελειώσει επιτυχώς η εξομοίωση της λειτουργίας του προγράμματος του μικροελεγκτή, πρέπει να ολοκληρωθεί η διαδικασία της δημιουργίας μιας εφαρμογής με μικροελεγκτή, προγραμματίζοντάς τον στην πραγματικότητα. Ο προγραμματισμός των μικροελεγκτών είναι το τελευταίο και απαραίτητο στάδιο του σχεδιασμού και υλοποίησης μιας ενσωματωμένης συσκευής (Embedded Device). Ο προγραμματισμός μιας τέτοιας συσκευής γίνεται με την βοήθεια μιας συσκευής προγραμματισμού. Στην δική μας περίπτωση, για τις ανάγκες του μαθήματος, έχουμε προμηθευτεί τα αναπτυξιακά STK600, που γνωρίσαμε σε προηγούμενη ενότητα. Με την βοήθεια του λογισμικού AVR Studio μπορούμε να ελέγξουμε την καλή λειτουργία του αναπτυξιακού μας και στην συνέχεια να προχωρήσουμε στον προγραμματισμό του μικροελεγκτή μας. Από το μενού του προγράμματος επιλέγουμε Tools Program AVR Connect και θα δούμε τον διάλογο που απεικονίζεται στην Εικόνα 15. Στο πεδίο Platform επιλέγουμε STK600, ενώ στο πεδίο Port επιλέγουμε την USB πόρτα που είναι συνδεδεμένη η συσκευή μας. Πατώντας το κουμπί Connect εμφανίζεται ο διάλογος που εμφανίζεται στην Εικόνα 16.
Εικόνα 15 Επιλογή πλακέτας προγραμματιστή Εικόνα 16 Διάλογος προγραμματιστή (Device)
Αφού συνδεθούμε επιτυχώς με την αναπτυξιακή διάταξη, στην καρτέλα Main, πρέπει να την ρυθμίσουμε σύμφωνα με το δική μας εφαρμογή. Πρέπει να ρυθμίσουμε τον τύπο του μικροελεγκτή που χρησιμοποιούμε και τον τύπο προγραμματισμού του (π.χ. ISP ή JTAG). Για επιβεβαίωση των ορθών επιλογών μας, πρέπει πατώντας το κουμπί Read Signature, η εφαρμογή να μας επιστρέφει την σωστή υπογραφή του μικροελεγκτή που έχουμε επιλέξει και συνδέσει στο αναπτυξιακό (Εικόνα 17). Εικόνα 17 Διάλογος προγραμματιστή (Read Signature)
Επιπλέον στην καρτέλα HW Settings μπορούμε να ρυθμίσουμε την τάση και την συχνότητα λειτουργίας του (Εικόνα 18). Τα sliders μας δίνουν την δυνατότητα να αλλάξουμε με την βοήθεια του ποντικιού τις τάσεις VTarget, VAREF0, VAREF1, καθώς και την συχνότητα λειτουργίας του μικροελεγκτή. Εικόνα 18 Διάλογος προγραμματιστή (HW Settings)
Στην καρτέλα Fuses (Εικόνα 19), πρέπει να επιλεγούν οι κατάλληλες ρυθμίσεις ανάλογα με τον σχεδιασμό και τις ανάγκες της εφαρμογής μας. Για παράδειγμα το fuse SPIEN, ενεργοποιεί ή απενεργοποιεί το κύκλωμα του SPI, που είναι το εσωτερικό κύκλωμα προγραμματισμού για το In System Programming. Το fuse WDTON, ενεργοποιεί ή απενεργοποιεί τον εσωτερικό Watch Dog Timer. Τα fuses BOOTSZ, ρυθμίζουν το μέγεθος του BootLoader, ενώ το BOOTRST ενεργοποιεί ή απενεργοποιεί την χρήση του BootLoader στην συσκευή μας. Εικόνα 19 Διάλογος προγραμματιστή (Fuses) Ένα σύνολο από fuses που ονομάζονται SUT_CKSEL είναι ίσως από τα πιο σημαντικά, διότι επιλέγουν και ρυθμίζουν τα κυκλώματα χρονισμού του μικροελεγκτή. Για παράδειγμα επιλέγουν αν θα χρησιμοποιήσουμε εξωτερικό κρύσταλλο ή εξωτερικό RC ή ακόμα και τον εσωτερικό του ταλαντωτή. Μια λάθος ρύθμιση θα είχε σαν αποτέλεσμα είτε να μην εκτελεί καθόλου εντολές ο μικροελεγκτής είτε να εκτελεί τον κώδικα με διαφορετικό από τον επιθυμητό ρυθμό.
Στην καρτέλα Lock Bits (Εικόνα 20), έχουμε την δυνατότητα να κλειδώσουμε τον μικροελεγκτή, έτσι ώστε να μην μπορεί κανένας να διαβάσει τον κώδικα του είναι γραμμένος στην μνήμη Flash που διαθέτει. Σε κάθε περίπτωση όμως θα μπορεί κάποιος να σβήσει την μνήμη Flash, προκειμένου να είναι εφικτός ο επαναπρογραμματισμός του μικροελεγκτή. Εικόνα 20 Διάλογος προγραμματιστή (LockBits)
Τέλος στην καρτέλα Program (Εικόνα 21), μπορούμε να διαβάσουμε, να σβήσουμε και να προγραμματίσουμε και να επαληθεύσουμε το περιεχόμενο της μνήμης του προγράμματος (Flash) και της μνήμης δεδομένων (EEPROM), με τα κουμπιά Read, Erase Device, Program και Verify αντίστοιχα. Εικόνα 21 Διάλογος προγραμματιστή (Program) Ο προγραμματισμός του μικροελεγκτή ήταν το τελευταίο στάδιο του σχεδιασμού και υλοποίησης μιας ενσωματωμένης συσκευής (Embedded Device). Αυτό που ακολουθεί είναι η αποσύνδεση της ενσωματωμένης συσκευής από την αναπτυξιακή διάταξη STK600, και η έκθεση της ενσωματωμένης συσκευής στο πραγματικό περιβάλλον λειτουργίας της, για περαιτέρω έλεγχο της καλή της λειτουργίας.
ΠΑΡΑΔΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΩΝ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΕΣ Παρακάτω παραθέτουμε μερικά παραδείγματα εφαρμογών με μικροελεγκτές. Όλα τα παραδείγματα εφαρμογών θα παρουσιαστούν στο site του εργαστηρίου, όπου θα είναι διαθέσιμα για online download. ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΖΑΡΙΟΥ ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ Η εφαρμογή που θα μας απασχολήσει σε αυτό σημείο, είναι ένα ηλεκτρονικό ζάρι. Για την υλοποίησή του χρειάζεται ένας μικροελεγκτής, ένας πιεστικός διακόπτης, επτά (7) LED και μια πηγή συνεχούς τροφοδοσίας (π.χ. μπαταρία). Η διάταξη επικοινωνεί με τον χρήστη με τον πιεστικό διακόπτη. Πιέζοντας μια φορά τον διακόπτη, θα εμφανίζεται ένας αριθμός 1 έως 6, όπως φαίνεται στην παρακάτω εικόνα. Ο αριθμός πρέπει να επιλέγεται με τυχαίο τρόπο από τον μικροελεγκτή. Η οπτική αναπαράσταση του τυχαίου αριθμού, θα μπορούσε να είναι εναλλακτικά σε ένα 7- segment. Όμως στις προδιαγραφές που θέσαμε στην αρχή επιλέχτηκαν επτά LED στην διάταξη ενός παραδοσιακού ζαριού. Έτσι αποκτά πιο ρεαλιστική εικόνα. Οι προδιαγραφές μας λένε ότι πρέπει να σβήνουν όλα τα LED, όση ώρα είναι πατημένος ο πιεστικός διακόπτης από τον χρήστη. Όταν τον αφήσει θα απεικονίσει τον νέο τυχαίο αριθμό. Αν δεν γινόταν αυτό και τύχαινε ο ίδιος αριθμός, ο χρήστης θα είχε την εντύπωση ότι δεν δουλεύει η συσκευή σωστά. Επίσης, για λόγους οικονομίας της μπαταρίας της διάταξης τα LED θα παραμένουν αναμμένα για 5 δευτερόλεπτα και μετά θα σβήνουν αυτόματα. Όταν δεν χρησιμοποιείται για περισσότερο από 2 λεπτά θα μετάγεται σε κατάσταση ηρεμίας «sleep mode» όπου η κατανάλωση είναι η ελάχιστη δυνατή. Για να επανέλθει σε λειτουργία θα θέλει επανατοποθέτηση «reset». Εικόνα 22 Ηλεκτρονικό Ζάρι
Ο φοιτητής καλείται να σχεδιάσει το κύκλωμα με τον μικροελεγκτή και να γράψει το λογισμικό για να είναι λειτουργική η συσκευή. Το λογισμικό (firmware) για τον μικροελεγκτή έχει γραφτεί σε γλώσσα C. Το ολοκληρωμένο project θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΒΟΛΤΟΜΕΤΡΟΥ ΜΕ LCD ΚΑΙ ΜΙΚΡΟΕΛΕΓΚΤΗ Με την εφαρμογή αυτή έχουμε την δυνατότητα μετρήσουμε αναλογικές τάσεις με την χρήση του εσωτερικού ADC του μικροελεγκτή AVR. Το ηλεκτρονικό κύκλωμα της διάταξης έχει σχεδιαστεί στο πρόγραμμα Proteus. Για την υλοποίησή του χρειάζεται ένας μικροελεγκτής, μια οθόνη Alphanumeric LCD και μια πηγή συνεχούς τροφοδοσίας (π.χ. μπαταρία). Η μετρούμενη τιμή της τάσης θα απεικονίζεται σε μια οθόνη Alphanumeric LCD 2x16, στην πρώτη γραμμή. Η τάση που θα απεικονίζεται στην LCD, θα είναι εκφρασμένη σε Volts με ακρίβεια τριών δεκαδικών ψηφίων. Οι τάσεις που θα μπορεί να μετρήσει το ψηφιακό βολτόμετρο που έχει σχεδιαστεί, είναι 0 έως +5V DC. Ο φοιτητής καλείται να τροποποιήσει το κύκλωμα και το πρόγραμμα του μικροελεγκτή, έτσι ώστε να μπορεί να μετρήσει DC τάσεις μέχρι +20V DC. Το λογισμικό (firmware) για τον μικροελεγκτή έχει γραφτεί σε γλώσσα C. Το ολοκληρωμένο project θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΘΕΡΜΟΜΕΤΡΟΥ ΜΕ LCD ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ Με την εφαρμογή αυτή έχουμε την δυνατότητα να μετρήσουμε και να απεικονίσουμε την θερμοκρασία σε ένα χώρο ή σε ένα αντικείμενο, χρησιμοποιώντας ένα απλούστατο κύκλωμα που φαίνεται παρακάτω. Χρειάζεται ένας μικροελεγκτής και ένας ψηφιακός αισθητήρας θερμοκρασίας, μια οθόνη Alphanumeric LCD και μια πηγή συνεχούς τροφοδοσίας (π.χ. μπαταρία). Η μετρούμενη τιμή της θερμοκρασίας θα απεικονίζεται σε μια οθόνη Alphanumeric LCD 2x16, στην πρώτη γραμμή σε βαθμούς Κελισίου με ακρίβεια ενός δεκαδικού ψηφίου. Η ακρίβεια του ψηφιακού θερμομέτρου DS1621 που επιλέχτηκε είναι ±0,5V. Ο φοιτητής καλείται να τροποποιήσει το πρόγραμμα του μικροελεγκτή, έτσι ώστε να τυπώνει στην δεύτερη γραμμή του LCD την θερμοκρασία σε βαθμούς Fahrenheit. Το λογισμικό (firmware) για τον μικροελεγκτή έχει γραφτεί σε γλώσσα C. Το ολοκληρωμένο project θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΣΥΣΤΗΜΑ ΨΗΦΙΑΚΟΥ ΡΟΛΟΓΙΟΥ ΜΕ LCD ΜΕ ΜΙΚΡΟΕΛΕΓΚΤΗ Με την εφαρμογή αυτή έχουμε την δυνατότητα να μετρήσουμε χρόνο και να τον απεικονίσουμε σε ένα LCD. Το κύκλωμα που απαιτείται είναι πολύ απλό. Χρειάζεται ένας μικροελεγκτής, μια οθόνη Alphanumeric LCD και μια πηγή συνεχούς τροφοδοσίας (π.χ. μπαταρία). Με αυτή την άσκηση ο φοιτητής θα μάθει να χρησιμοποιεί τους εσωτερικούς Timers των μικροελεγκτών, καθώς και τις ρουτίνες εξυπηρέτησης διακοπών. Στην πρώτη γραμμή της οθόνης Alphanumeric LCD 2x16, θα τυπώνεται η ώρα με format 24h και ακρίβεια δευτερολέπτου. Για παράδειγμα αν η ώρα είναι 6 το απόγευμα, θα πρέπει να τυπώνει 18:00:00. Το λογισμικό (firmware) για τον μικροελεγκτή έχει γραφτεί σε γλώσσα C. Το ολοκληρωμένο project θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΣΥΣΤΗΜΑ ΡΥΘΜΙΣΗΣ ΕΝΤΑΣΗΣ ΦΩΤΙΣΜΟΥ LED ΜΕ PWM Με την εφαρμογή αυτή έχουμε την δυνατότητα να ρυθμίζουμε την ένταση του φωτισμού ενός LED. Η τεχνική που θα χρησιμοποιηθεί είναι η PWM. Το κύκλωμα που απαιτείται είναι πολύ απλό. Χρειάζεται ένας μικροελεγκτής, ένα LED, μια οθόνη Alphanumeric LCD και μια πηγή συνεχούς τροφοδοσίας (π.χ. μπαταρία). Στην πρώτη γραμμή της οθόνης Alphanumeric LCD 2x16, θα τυπώνεται το ποσοστό της έντασης του φωτισμού του LED. Δύο πιεστικοί διακόπτες θα ρυθμίζουν πάνω και κάτω αυτή την ένταση. Με αυτή την άσκηση ο φοιτητής θα μάθει να χρησιμοποιεί τους εσωτερικούς Timers των μικροελεγκτών, για να εξάγει τετραγωνικούς παλμούς διαμορφωμένους κατά πλάτος (διαμόρφωση PWM). Το λογισμικό (firmware) για τον μικροελεγκτή έχει γραφτεί σε γλώσσα C. Το ολοκληρωμένο project θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΠΑΡΑΔΕΙΓΜΑΤΑ ΕΦΑΡΜΟΓΩΝ ΜΕ FPGA Παρακάτω παραθέτουμε μερικά παραδείγματα εφαρμογών με FPGA. Όλα τα παραδείγματα εφαρμογών θα παρουσιαστούν στο site του εργαστηρίου, όπου θα είναι διαθέσιμα για online download. ΥΛΟΠΟΙΗΣΗ ΠΥΛΗΣ AND 2 ΕΙΣΟΔΩΝ ΜΕ FPGA Αυτή είναι ίσως η απλούστερη εφαρμογή που μπορεί να φτιάξει κάποιος με FPGA. Στόχος είναι να έρθει ο φοιτητής σε επαφή με την γλώσσα VHDL. Η οντότητα (Entity) περιγράφεται στο πρώτο τμήμα του κώδικα, ενώ η αρχιτεκτονική (Architecture), που περιγράφει την συμπεριφορά του κυκλώματος στο δεύτερο τμήμα. Εικόνα 23 Πύλη AND δύο εισόδων Σε αυτό το σημείο ο φοιτητής καλείται να κάνει τις απαραίτητες αλλαγές για να υλοποιήσει μια πύλη AND 5 εισόδων.
ΥΛΟΠΟΙΗΣΗ ΠΛΗΡΟΥΣ ΑΘΡΟΙΣΤΗ ΜΕ FPGA Σκοπός της υλοποίησης αυτής είναι να εξοικειωθεί ο φοιτητής με την γλώσσα VHDL και την σχεδίαση απλών συνδυαστικών κυκλωμάτων. Η γλώσσα VHDL είναι γλώσσα περιγραφής υλικού όπως καταλαβαίνουμε από τα αρχικά της. Παρακάτω φαίνεται σε μπλοκ ένας πλήρης αθροιστής. Εικόνα 24 Full Adder Block Σε αυτό το σημείο, θα προσπαθήσουμε να δούμε μια απλή σχεδίαση με VHDL. Η οντότητα (Entity), περιγράφει την εξωτερική διασύνδεση (external interface) της σχεδιαστικής μονάδας. Στην παρακάτω εικόνα φαίνεται η οντότητα του πλήρους αθροιστή. Εικόνα 25 Οντότητα (Entity) Η αρχιτεκτονική (Architecture), περιγράφει την εσωτερική συνάρτηση (internal functionality) της σχεδιαστικής μονάδας. Εικόνα 26 Αρχιτεκτονική (Architecture)
Υπάρχουν δύο διαφορετικές αρχιτεκτονικές για να περιγράψουν την συνάρτηση μίας οντότητας: α) Behavioral description και β) Structural description. Εικόνα 27 Behavioral description Εικόνα 28 Structural description 1/2
Εικόνα 29 Structural description 2/2
ΥΛΟΠΟΙΗΣΗ ΠΟΛΥΠΛΕΚΤΗ 2 ΣΕ 1 ΜΕ FPGA Η υλοποίηση αυτή έχει σκοπό να εξοικειωθεί ο φοιτητής με την γλώσσα VHDL και την σχεδίαση απλών συνδυαστικών κυκλωμάτων. Το κύκλωμα που προτείνουμε είναι η υλοποίηση ενός πολυπλέκτη 2 σε 1. Ακολουθεί ο κώδικας VHDL που το υλοποιεί. Εικόνα 30 Πολυπλέκτης 2 σε 1 Ο φοιτητής καλείται να κάνει τις απαραίτητες αλλαγές για να υλοποιήσει πολυπλέκτη 4 σε 1. ΥΛΟΠΟΙΗΣΗ ΔΥΑΔΙΚΗΣ ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 8-LED ΜΕ FPGA Με την εφαρμογή αυτή ο φοιτητής θα ασχοληθεί με ακολουθιακά κυκλώματα. Καλείται να υλοποιήσει τον VHDL κώδικα του modulo-256. Δηλαδή θα υλοποιήσει μια δυαδική απαρίθμηση σε 8 LED, με συχνότητα της επιθυμίας του. ΥΛΟΠΟΙΗΣΗ BCD ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 8-LED ΜΕ FPGA Ο φοιτητής βασισμένος στην προηγούμενη υλοποίηση να γράψει κώδικα VHDL που να κάνει BCD (Binary Code Decimal) απαρίθμηση σε 8 LED, με συχνότητα της επιθυμίας του. ΥΛΟΠΟΙΗΣΗ BCD ΑΠΑΡΙΘΜΗΣΗΣ ΣΕ 7-SEGMENT ΜΕ FPGA Ο φοιτητής βασισμένος στην τελευταία υλοποίηση να γράψει κώδικα VHDL που να κάνει BCD (Binary Code Decimal) απαρίθμηση σε ένα 7-Segment, με συχνότητα της επιθυμίας του. ΥΛΟΠΟΙΗΣΗ ΡΟΛΟΓΙΟΥ ΜΕ 7-SEGMENT ΜΕ FPGA Σε αυτό το σημείο ο φοιτητής θα σχεδιάσει ένα ρολόι της μορφής 21:34:52 με FPGA. Η υλοποίηση της εφαρμογής θα παρουσιαστεί στο site του εργαστηρίου, όπου θα είναι διαθέσιμο για online download.
ΑΝΑΦΟΡΕΣ http://www.atmel.com Επίσημος ιστότοπος της εταιρίας Atmel. http://www.atmel.com/images/doc2466.pdf Εγχειρίδιο μικροελεγκτή ATmega16 http://pdfserv.maximintegrated.com/en/ds/ds1621.pdf Εγχειρίδιο ψηφιακού θερμομέτρου DS1621. http://www.ti.com/lit/ds/symlink/max232.pdf Εγχειρίδιο level converter MAX232.