Όλοι οι ηλεκτρονικοί επιθυμούν να μπορούν να φτιάχνουν κατασκευές με μικροελεγκτές. Είναι γεγονός όμως ότι οι περισσότεροι απλώς επαναπαύονται στο να βρίσκουν τα σχέδια του υλικού (hardware) και τον κώδικα (firmware) έτοιμα, σε κάποια ιστοσελίδα στο διαδίκτυο και βάσει αυτών να συναρμολογούν την κατασκευή τους. Ο προγραμματισμός ενός μικροελεγκτή εκ του μηδενός θεωρείται από τους περισσότερους ότι είναι μία δύσκολη υπόθεση.

Και όταν μιλάμε για προγραμματισμό, φυσικά εννοούμε το να μπορεί κάποιος να γράψει κώδικά που να μπορεί να "τρέξει" σε έναν μικροελεγκτή.

ΜικροελεγκτέςΣυζητώντας με αρκετούς ενθουσιώδεις ηλεκτρονικούς διαπίστωσα ότι είναι πολλοί αυτοί που επιθυμούν να μάθουν να προγραμματίζουν μικροελεγκτές. Αρκετοί έχουν ξεκινήσει να διαβάζουν φυλλάδια της Atmel και της Microchip που θεωρούνται ηγετικές εταιρείες στο χώρο των μικροελεγτών. Πολλοί, έχουν παραγγείλει προγραμματιστές, μικροελεγκτές και αναπτυξιακά εργαλεία και ξεκινούν με πολύ ενθουσιασμό. Στην πορεία όμως διαπιστώνω ότι οι περισσότεροι απογοητεύονται και συχνά τα παρατούν και φυσικά υπάρχουν αρκετοί λόγοι που συμβαίνει αυτό.

Όσο και να φαίνεται παράξενο, στην Ελλάδα, οι περισσότεροι που προσπαθούν να μάθουν να προγραμματίζουν μικροελεγκτές αδυνατούν να προχωρήσουν γιατί δυσκολεύονται με τη βιβλιογραφία που είναι στα αγγλικά. Δυστυχώς, εδώ και μερικές εκατονταετίες (συγνώμη ένδοξοί μου πρόγονοι που το ομολογώ..) δεν έχουμε αναπτύξει εγχώρια τεχνολογία στη μικροηλεκτρονική και ως εκ τούτου όλη η διαθέσιμη βιβλιογραφία είναι στα αγγλικά. Απ' ότι θυμάμαι, ο τελευταίος μεγάλος Έλληνας επιστήμονας που διέπρεψε στην ηλεκτρονική ήταν ο Θαλής ο Μιλήσιος που ασχολήθηκε με την ηλεκτροστατική φόρτιση του ήλεκτρου (ένα αστειάκι κάναμε...). Αρκετοί έχουν προσπαθήσει να μεταφράσουν εγχειρίδια στα Ελληνικά αλλά αυτές οι μεταφράσεις είναι μετρημένες στα δάκτυλα του ενός χεριού και συχνά μέχρι να εκδοθούν έχει αλλάξει η τεχνολογία! Ευτυχώς, υπάρχουν και εξαιρέσεις. θα πρέπει να ομολογήσουμε ότι υπό κανονικές συνθήκες και σύμφωνα με τα αναλυτικά προγράμματα σπουδών των σχολείων εδώ και μία τριακονταετία, όλοι οι Έλληνες θα έπρεπε να γνωρίζουν άπταιστα αγγλικά. Τι πήγε στραβά;   

Αρκετοί ξεκινούν να προγραμματίσουν σε συμβολική γλώσσα (assemmly language) και μελετούν συστηματικά το ρεπερτότιο εντολών ενός συγκεκριμένου μικροελεγκτή. Στην πορεία "τα βρίσκουν σκούρα" διότι ο προγραμματισμός σε συμβολική γλώσσα είναι δύσκολος και απαιτεί τέλεια γνώση της μηχανής και εξειδικευμένων προγραμματιστικών τεχνικών που συνήθως κάποιος μπορεί να τις μάθει σε ένα ή δύο χρόνια στο πανεπιστήμιο. Επίσης, ακόμη και αν κάποιος καταφέρει να εξοικειωθεί με το ρεπερτόριο εντολών ενός συγκεκριμένου μικροελεγκτή, στην πορεία θα διαπιστώσει ότι θα αδυνατεί να προγραμματίσει οποιονδήποτε άλλο μικροελεγκτή. Πριν από είκοσι (20) με τριάντα (30) χρόνια που υπήρχαν λίγοι μικροεπεξεργαστές (όπως ο 8086, ο Z80, ο 68000), η εκμάθηση προγραμματισμού σε συμβολική γλώσσα ήταν μονόδρομος. Μάθαινες το ρεπερτόριο εντολών τους και τη δομή τους και σε θεωρούσαν αυθεντία. Βέβαια, εν το μεταξύ περνούσαν τα χρόνια και μέχρι να μάθεις τη συμβολική γλώσσα...είχες γεράσει και η τεχνολογία είχε αλλάξει! Τα πράγματα είναι κάπως πιο εύκολα με τους μικροελεγκτές περιορισμένου ρεπερτορίου εντολών (RISC), όπως για παράδειγμα ο διαδεδομένος PIC16F84 της Microchip.

Αρκετοί συνειδητοποιούν ότι η εκμάθηση της συμβολικής γλώσσας ενός μικροελεγκτή είναι αρκετά δύσκολη και μάταιη, τη στιγμή που σήμερα κυκλοφορούν εκατοντάδες μικροελεγκτές στο εμπόριο έχοντας το δικό του ρεπερτόριο εντολών ο καθένας. Γιατί άλλωστε να "χαραμίσεις τη ζωή σου" για να μάθεις το ρεπερτόριο εντολών ενός μικροελεγκτή και στη συνέχεια όχι μόνο να μην μπορείς να προγραμματίσεις κανέναν άλλο, αλλά να κινδυνεύεις και από το γεγονός ότι αυτά που έμαθες μπορεί να αποδειχθούν μάταια γιατί ο μικροελεγκτής με τον οποίο ασχολήθηκες πιθανών να αποσυρθεί από την παραγωγή. Δυστυχώς, στην Ελλάδα έχει παγιωθεί μία "ανώριμη" πρακτική μέσω των περισσότερων πανεπιστημίων και εκπαιδευτικών ιδρυμάτων (παρακαλώ, επιτρέψτε μου να εκφράσω την προσωπική μου γνώμη γι' αυτό). Στα περισσότερα εκπαιδευτικά ιδρύματα της χώρας, στα πλαίσια μαθημάτων προγραμματισμού μικροελεγκτών, διδάσκεται σχεδόν αποκλειστικά η συμβολική γλώσσα κάποιων κλασσικών επεξεργαστών, όπως ο 8086, ο 8052 και ο 68000. Μήπως εμμένουμε λίγο στην αρχαιολογία; Ζητώ συγνώμη από τους ακαδημαϊκούς για τα σχόλια μου, αλλά η τεχνολογία έχει προχωρήσει αρκετά για να ασχολούμαστε ακόμη με "απολιθώματα"! (..εκφράζω απλώς τη προσωπική μου γνώμη). Να υποθέσω ότι το κάνουμε για ιστορικούς και εκπαιδευτικούς λόγους; Ευτυχώς που τον τελευταίο καιρό στα εκπαιδευτικά ιδρύματα της χώρας "ανακαλύφτηκε" ότι υπάρχει και το Arduino! Δε λέω, καλή είναι και η κλασσική γνώση, αλλά πιστεύω ότι οι μηχανικοί εκτός από κλασσική γνώση θα πρέπει να διαθέτουν και τα εφόδια που θα τους επιτρέψουν να είναι ανταγωνιστικοί σε μία συνεχώς εξελισσόμενη αγορά.

Αναπτυξιακά εργαλείαΜία κάπως καλύτερη προσέγγιση που ακολουθούν ορισμένοι, είναι να ξεκινούν να μαθαίνουν μία γλώσσα προγραμματισμού υψηλού επιπέδου (όπως C, Βasic ή Pascal). Στη συνέχεια, προγραμματίζουν γράφοντας τον κώδικα σε γλώσσα υψηλού επιπέδου και τον μεταφράζουν σε γλώσσα μηχανής χρησιμοποιώντας ένα κατάλληλο compiler. Αυτή η προσέγγιση παρουσιάζει κάποια μοναδικά πλεονεκτήματα, όπως για παράδειγμα: Δε χρειάζεται να "χαραμίσεις τη ζωή σου" για να μάθεις το ρεπερτόριο εντολών ενός και μόνο μικροελεγκτή. Μαθαίνεις μία γλώσσα υψηλού επιπέδου και με αυτή μπορείς να προγραμματίσεις όλους τους μικροελεγκτές. "Ξεφεύγεις" κάπως από το επίπεδο της μηχανής και δε χρειάζεται να ασχοληθείς τόσο πολύ με τον "εσωτερικό κόσμο" του μικροελεγκτή. Γίνεσαι ανταγωνιστικός και δεν έρχεσαι σε δύσκολη θέση όταν κάποιος σου ζητάει να αναπτύξεις μία εφαρμογή με έναν οποιοδήποτε μικροελεγκτή που τον συναντάς για πρώτη φορά στη ζωή σου. Κατά τη γνώμη μου, αυτή είναι και η καλύτερη προσέγγιση για έναν ηλεκτρονικό που επιθυμεί να είναι ανταγωνιστικός και άκρως παραγωγικός. Και το πιο ωραίο απ' όλα είναι ότι όλες οι εταιρείες που παράγουν μικροελεγκτές προσφέρουν τα αναπτυξιακά εργαλεία και το περιβάλλον προγραμματισμού εντελώς δωρεάν. Οι περισσότεροι compilers διανέμονται επίσης σε δωρεάν εκδόσεις από τις ίδιες εταιρείες. Συνήθως, χρειάζεται κάποιος να εγκαταστήσει το ολοκληρωμένο περιβάλλον προγραμματισμού (IDE) στον υπολογιστή του και στη συνέχεια να εγκαταστήσει επιπρόσθετους compilers στο ίδιο περιβάλλον. Χρειάζεται και ένας προγραμματιστής για να μπορεί κάποιος να προγραμματίσει την εφαρμογή του στο μικροελεγκτή. Οι περισσότεροι compilers διατίθονται για γλώσσα C (ANSI C με κάποιες επιπρόσθετες βιβλιοθήκες). H γλώσσα C κυριαρχεί στη βιομηχανία και είναι προτιμότερο κάποιος να ασχοληθεί με αυτή παρά με άλλες γλώσσες υψηλού επιπέδου. Παρακαλώ, ανατρέξτε στα επίσημα site των εταιρειών που κατασκευάζουν μικροελεγκτές για να ενημερωθείτε για τα αναπτυξιακά εργαλεία που προσφέρει η κάθε εταιρεία. Προσωπικά, βρίσκω πολύ βολικό το ολοκληρωμένο αναπτυξιακό περιβάλλον MPLAB που προσφέρει η Microchip και τους compilers ΧC8, ΧC16 και XC32 που προσφέρει η ίδια εταιρεία καθώς και τους προγραμματιστές PICKIT, και ICD. Βέβαια, οι φίλοι της Atmel προτιμούν τα αναπτυξιακά εργαλεία που προσφέρει η Αtmel. Συγνώμη που δε δύναμαι να σας παρουσιάσω κάποια από τα αναπτυξιακά εργαλεία της Atmel γιατί τυγχάνει να μην τα γνωρίζω. Συνήθως, όταν ασχοληθείς με μία εταιρεία, αγνοείς τις άλλες και γνωρίζουμε όλοι γιατί συμβαίνει αυτό: Όπως μάθεις...συνεχίζεις. Εκτός από τις εταιρείες Microchip και Atmel, υπάρχουν και πολλές άλλες που παράγουν μικροελεγκτές και προσφέρουν τα δικά τους αναπτυξιακά εργαλεία. Μερικές από αυτές είναι η NXP, η Texas Instruments, η Analog devices (οι δύο τελευταίες παράγουν και DSP- digital signal processors) και πολλές άλλες. Δυστυχώς, αρκετοί δυσκολεύονται να μάθουν να προγραμματίζουν ακόμη και σε γλώσσα υψηλού επιπέδου, διότι αδυνατούν να μελετήσουν βιβλιογραφία στα αγγλικά. Ευτυχώς, για τους μικροελεγκτές PIC της Microchip κυκλοφορούν και πολλά βιβλία στα Ελληνικά. Προσοχή όμως, αν αγοράσετε κάποιο από αυτά, σιγουρευτείτε ότι αναφέρεται σε γλώσσα υψηλού επιπέδου και ότι τα αναπτυξιακά εργαλεία στα οποία αναφέρεται ο συγγραφέας υπάρχουν διαθέσιμα στο διαδίκτυο (και είναι προτιμότερο να είναι ευρείας αποδοχής και να προσφέρονται δωρεάν).

Υπάρχουν και πολλοί που έχουν προσπαθήσει να προγραμματίσουν μικροελεγκτές σε γλώσσα υψηλού επιπέδου και είναι και άριστοι γνώστες των αγγλικών αλλά δυστυχώς μετά από λίγο καιρό απογοητεύονται και τα παρατούν. Ο συνήθης λόγος είναι ότι απλώς βρίσκουν αρκετά πολύπλοκη τη διαδικασία παραμετροποίησης των αναπτυξιακών εργαλείων των εταιρειών. Στο σημείο αυτό θα θέλαμε να επισημάνουμε ότι οι compilers των εταιρειών είναι φτιαγμένοι για να υποστηρίζουν μεγάλο πλήθος μικροελεγκτών. Ως εκ τούτου, απαιτείται ο χρήστης να αρχικοποιεί τον compiler για χρήση σε συγκεκριμένο μοντέλο και επίσης χρειάζονται κάποιες αρχικές δηλώσεις στον κώδικα για την αρχικοποίηση συγκεκριμένων καταχωρητών του εκάστοτε μικροελεγκτή. Επίσης, χρειάζονται κάποιες αρχικοποιήσεις για τη χρήση υπάρχουσων βιβλιοθηκών και οι αρχικοποιήσεις αυτές εξαρτώνται από το εκάστοτε μοντέλο μικροελεγκτή. Η διαδικασία δεν είναι υπερβολικά δύσκολη διότι όλες οι οι λεπτομέρειες περιγράφονται αναλυτικά στα φυλλάδια χρήσης που συνοδεύουν τον κάθε compiler. Επειδή όμως ο όγκος των φυλλαδίων είναι αρκετά αυξημένος και οι πληροφορίες παρέχονται σε αρκετά διαφορετικά φυλλάδια (όπως το εγχειρίδιο χρήσης του compiler, το φυλλάδιο πληροφοριών του εκάστοτε μικροελεγκτή και σε καταλόγους παραμετροποίησης ανά μοντέλο), πολλοί απογοητεύονται εύκολα και "παραδίδουν τα όπλα". Ευτυχώς, για αυτή την κατηγορία του κοινού που αναζητά έναν εύκολο και γρήγορο τρόπο για να προγραμματίσει μικροελεγκτές υπάρχει το Arduino!

Arduino UnoΓια αυτούς που αναζητούν έναν εύκολο τρόπο προσέγγισης στον "κόσμο των μικροελεγκτών" υπάρχει η πλατφόρμα του Arduino. Πρόκειται για μια ηλεκτρονική πλατφόρμα ανοικτού κώδικα και σχεδιασμού που βασίζεται σε ευέλικτο και εύκολο στη χρήση υλικό και λογισμικό. Προορίζεται ακόμη και για αρχάριους που δεν έχουν ιδέα από ηλεκτρονικά! Η πλατφόρμα του Arduino αναπτύχθηκε στην Ιταλία από ακαδημαϊκούς που αναζητούσαν έναν εύκολο και φιλικό τρόπο εκμάθησης μικροελεγκτών για τους σπουδαστές τους. Λόγω απλότητας και ευελιξίας, η πλατφόρμα έγινε σύντομα γνωστή στο ευρύ κοινό και σήμερα είναι διαδεδομένη σε όλο τον κόσμο. Όσοι ασχοληθούν με το Arduino θα ενθουσιαστούν με την ευκολία εκμάθησης της πλατφόρμας και με την ευκολία προγραμματισμού που αυτή προσφέρει. Το μόνο μειονέκτημα της πλατφόρμας είναι το γεγονός ότι υποστηρίζει περιορισμένο αριθμό μικροελεγκτών με συγκεκριμένες δυνατότητες. Υπάρχουν όμως τόσες πολλές δυνατότητες επέκτασης και τόσες πολλές εφαρμογές που σχεδόν κανένας δεν αντιλαμβάνεται το παραπάνω μειονέκτημα, παρά μόνο όσοι ασχολούνται πολλά χρόνια με ανάπτυξη επαγγελματικών εφαρμογών σε ενωματωμένα συστήματα (embedded design). Για να μιλήσουμε λίγο πιο τεχνικά, στο περιβάλλον του Arduino, διατίθονται συγκεκριμένες πλακέτες που περιλαμβάνουν ένα μικροελεγκτή της Atmel και διαθέτουν ένα συγκεκριμένο αριθμό ακροδεκτών που μπορεί να λειτουργήσουν είτε ως είσοδοι είτε ως έξοδοι. Αυτές τις εισόδους ή εξόδους μπορούμε να τις διαχειριστούμε γράφοντας κώδικα στο περιβάλλον προγραμματισμού Arduino IDE που έχει βασιστεί στη γλώσσα C/C++. Για περισσότερες πληροφορίες μπορείτε να ανατρέξετε στο επίσημο site του Arduino αλλά και σε πληθώρα βιβλίων που θα βρείτε στην αγορά. Αν αναζητάτε έναν οδηγό εκμάθησης του Arduino στα ελληνικά, ίσως σας φανεί πολύ χρήσιμος ο οδηγός που έγραψε ο κ. Εμμανουήλ Πουλάκης, εκπαιδευτικός της δευτεροβάθμιας εκπαίδευσης στο τομέα της πληροφορικής. Ο εν λόγω οδηγός διατίθεται ελεύθερα στο διαδίκτυο. Επίσης, μπορείτε να παρακολουθήσετε βιντεοσκοπημένες διαλέξεις, από το Εργαστήριο Ψηφιακών Συστημάτων της Σχολής Θετικών Επιστημών και Τεχνολογίας του Ελληνικού Ανοικτού Πανεπιστημίου (ΕΑΠ) για προγραμματισμό σε Arduino, ανατρέχοντας στο σύνδεσμο: Σεμινάριο Arduino - Διαλέξεις.

Όποιο τρόπο και αν ακολουθήσετε για να μάθετε να προγραμματίζετε μικροελεγκτές σας εύχομαι καλή μελέτη και καλές κατασκευές!  

Γ. Αδαμίδης, Φυσικός - Ραδιοηλεκτρολόγος ΑΠΘ