Page 56 - Linux Inside τ. 10

Linux Inside
56
Το blog μου
Γ
εια σας για ακόμη μία φορά! Είμαι σίγουρος ότι σας έλει-
ψα στο προηγούμενο τεύχος. Γι’ αυτό άλλωστε έσπασαν
τα τηλέφωνα της εκδοτικής εταιρείας από αγανακτισμέ-
νους αναγνώστες που ζητούσαν ένα άρθρο μου (ο αρχισυντά-
κτης δεν το παραδέχεται, αλλά εγώ ξέρω την αλήθεια). Για να
ανταποδώσω, σας έχω ετοιμάσει ένα άρθρο που θα ικανοποιή-
σει ακόμη και τους πιο απαιτητικούς και advanced χρήστες.
Έχετε αναρωτηθεί ποτέ πώς ακριβώς δουλεύει το Arduino στα
παρασκήνια; Πώς ακριβώς επικοινωνεί ο υπολογιστής με το
Arduino, πώς ακριβώς μεταφέρεται ένα καινούργιο πρόγραμ-
μα σε αυτό; Τελικά, σε ποια γλώσσα προγραμματισμού γρά-
φουμε τα προγράμματά μας; Τι ακριβώς κάνει το πρόγραμμα
που χρησιμοποιούμε για να προγραμματίσουμε;
Γενικά
Θα πρέπει να αναφέρω ότι τα περισσότερα από αυτά που θα
αναφέρουμε, είναι πράγματα που δεν τα γνωρίζουν οι περισ-
σότεροι χρήστες του Arduino, και αφορούν κυρίως σε γνώσεις
που έχουν οι developers του και όσοι συμμετέχουν σε αυτό.
Και εσείς θα έχετε την ευκαιρία να τα μάθετε! Αυτή η γνώση
προήλθε κυρίως κατά την ανάπτυξη του codebender.cc, το
οποίο είναι μία on-line πλατφόρμα ανάπτυξης για Arduino και
ένας κοινός τόπος ανταλλαγής απόψεων, κώδικα και αλληλο-
βοήθειας. Ως εκ τούτου, αντικαθιστά και το επίσημο λογισμικό
του Arduino προσφέροντας μία πολύ βελτιωμένη και εύχρηστη
εμπειρία, με σκοπό τη διευκόλυνση των νέων (και υπαρχόντων)
χρηστών στη χρήση και στον προγραμματισμό του Arduino.
Κατά την ανάπτυξή του, εντρυφήσαμε στα μυστικά του Arduino
και μάθαμε πώς δουλεύει, με σκοπό να βελτιώσουμε όλες τις
λειτουργίες που θεωρούσαμε ελλιπείς.
Επικοινωνία
Ας ξεκινήσουμε από την επικοινωνία μεταξύ του Arduino και
του υπολογιστή. Φυσικά είναι κάτι που ξέρετε ήδη, αφού έχετε
διαβάσει όλα τα προηγούμενα άρθρα μου, αλλά μία επανάλη-
ψη δεν κάνει κακό. Όπως ήδη ξέρετε λοιπόν, το Arduino είναι
ουσιαστικά μία πλακέτα με έναν προγραμματιζόμενο μικροεπε-
ξεργαστή, ένα κύκλωμα για τη σύνδεση με το USB, ένα αντί-
στοιχο κύκλωμα για την εξωτερική τροφοδοσία με ρεύμα και
μερικά φωτάκια και αντιστάσεις που φροντίζουν να μην κάψου-
με εύκολα το Arduino μας κάνοντας κάποιο λάθος. Η «καρδιά»
του Arduino είναι ο προγραμματιζόμενος μικροεπεξεργαστής
του. Οι συνηθισμένοι μικροεπεξεργαστές του εμπορίου έχουν
μία σειριακή θύρα επικοινωνίας. Αυτό ισχύει και στον
Atmega328 (ο επεξεργαστής που βρίσκεται στο Arduino). Πώς
όμως επικοινωνεί το Arduino με τον υπολογιστή μέσω θύρας
USB; Η απάντηση βρίσκεται σε ένα μικρό δευτερεύον τσιπάκι,
το οποίο από την μία πλευρά παρέχει μία σειριακή θύρα που
είναι συνδεδεμένη με το μικροεπεξεργαστή του Arduino και
από την άλλη παρέχει μία θύρα USB που συνδέεται στον υπο-
λογιστή και εμφανίζεται ως σειριακή θύρα. Επομένως, πρακτι-
κά όταν συνδέουμε ένα Arduino στον υπολογιστή μας, συνδέ-
ουμε έναν μετατροπέα USB-to-Serial πάνω στον οποίο είναι
συνδεδεμένος ο μικροεπεξεργαστής μας. Αυτός είναι ο λόγος
που επικοινωνούμε με το Arduino μέσω του Serial Monitor και
που επιλέγουμε σε ποια σειριακή θύρα είναι συνδεδεμένο το
Arduino το οποίο θέλουμε να προγραμματίσουμε. Για να λέμε
την αλήθεια, πριν από λίγες εβδομάδες ανακοινώθηκε το
Arduino Leonardo, μία έκδοση του Arduino ο επεξεργαστής
του οποίου έχει ενσωματωμένη θύρα USB. Αυτό δεν αλλάζει
κάτι, γιατί στην πραγματικότητα απλώς ενσωματώνεται το USB
στον υπολογιστή. Το πλεονέκτημα είναι ότι το πρωτόκολλο του
USB πλέον υλοποιείται σε software. Έτσι, σε κανονικές περι-
πτώσεις το USB-to-Serial υλοποιείται από το πρόγραμμά μας
(
πίσω από τα παρασκήνια), αλλά εκτός αυτού μπορούμε να
ρυθμίσουμε το Arduino μας ώστε να φαίνεται στον υπολογιστή
σαν άλλη συσκευή USB, π.χ., ποντίκι ή πληκτρολόγιο!
Προγραμματισμός
Πώς ακριβώς γίνεται αυτός ο προγραμματισμός; Μερικοί
ίσως ξέρετε ότι για να προγραμματίσουμε έναν μικροεπεξεργα-
στή χρειαζόταν μία ειδική ακριβή συσκευή, ο προγραμματιστής,
διαφορετικός για κάθε οικογένεια επεξεργαστών, πάνω στον
οποίο βάζαμε το τσιπάκι μας και μετά μέσω σειριακής στέλναμε
το πρόγραμμα. Στη συνέχεια, ο προγραμματιστής έπαιρνε το
πρόγραμμά μας και το έκαιγε στη μνήμη του μικροεπεξεργαστή.
Αυτό πλέον δεν χρειάζεται, όπως ήδη ξέρετε. Για ποιο λόγο
χρειαζόταν ο προγραμματιστής, τι άλλαξε και ποια είναι η διαδι-
κασία πλέον; Ο κύριος λόγος που χρειαζόταν ο προγραμματι-
στής είναι επειδή οι παλιότεροι επεξεργαστές χρησιμοποιούσαν
μνήμη τύπου EEPROM (Electronically Erasable Programmable
ROM). Όπως λέει και το όνομά της, αυτή η μνήμη μπορεί να δια-
γραφεί/καθαριστεί ηλεκτρονικά, απλώς δίνοντας μεγάλη τάση
σε ένα συγκεκριμένο pin του μικροεπεξεργαστή. Στη συνέχεια,
με κατάλληλο κύκλωμα οδήγησης το νέο πρόγραμμα μπορούσε
να καεί πάνω στην άδεια μνήμη, bit προς bit. Αυτή ακριβώς ήταν
η δουλειά του προγραμματιστή: να δώσει αυτή την υψηλή τάση
ώστε να διαγραφεί η μνήμη και στη συνέχεια να πάρει από τον
υπολογιστή bit προς bit την πληροφορία και να την κάψει στη
μνήμη του μικροεπεξεργαστή. Οι σύγχρονοι μικροεπεξεργαστές
έρχονται με μνήμες Flash, οι οποίες δεν χρειάζονται ειδική τρο-
φοδοσία και έχουν τη δυνατότητα να διαγράφουν μικρότερα
κομμάτια (μπλοκ) μνήμης και όχι ολόκληρη τη μνήμη.Στην πραγ-
ματικότητα, κάθε Arduino περιέχει, εκτός από το πρόγραμμά
μας, και ένα δεύτερο πολύ μικρό πρόγραμμα. Αυτό το πρό-
γραμμα (που λέγεται bootloader, γιατί τρέχει μόνο στην εκκίνη-
ση) ελέγχει τη σειριακή θύρα του επεξεργαστή για νέα δεδομέ-
να. Όταν προγραμματίζουμε το Arduino, ο υπολογιστής μας
προκαλεί reset σε αυτό, οπότε τρέχει ο bootloader. Στη συνέ-
χεια, στέλνει ένα ειδικό σήμα που ενημερώνει τον bootloader ότι
υπάρχει νέο πρόγραμμα προς αποθήκευση και έπειτα στέλνει το
νέο πρόγραμμα. Ο bootloader δέχεται τα δεδομένα, καθαρίζει
το παλιό πρόγραμμα από τη μνήμη Flash και στη συνέχεια απο-
θηκεύει το καινούργιο πρόγραμμα. Έτσι, όλη η διαδικασία γίνε-
ται χωρίς κανένα επιπλέον ακριβό κύκλωμα.
Γλώσσα
Και τώρα το μεγάλο ερώτημα: Τι γλώσσα προγραμματισμού
Του Βασίλη Γεωργιτζίκη <billgeo13@gmail.com>
Project - Arduino Hacks
Τι γίνεται στα παρασκήνια όταν προγραμματίζετε ένα Arduino;
Ο Βασίλης είναι φοιτητής μηχανικός Η/Υ. Μερικές φορές μάλιστα πηγαίνει και στη σχολή!
Arduino: Under the hood