Για τον προγραμματισμό των μικροελεγκτών AVR μπορούμε να χρησιμοποιήσουμε το Eclipse ως περιβάλλον εργασίας, καθώς υπάρχει δυνατότητα σύνταξης κώδικα σε Embedded C, μεταγλωττισμού (compile), εξαγωγή αρχείου προγράμματος .hex και προγραμματισμού του μικροελεγκτή. Αρχικά θα χρειαστεί να κατεβάσουμε και να εγκαταστήσουμε το Eclipse
IDE for
Embedded C/C++ Developers, το οποίο διατίθεται ελεύθερα στον παραπάνω σύνδεσμο. Στη συνέχεια θα χρειαστεί να κατεβάσουμε και να εγκαταστήσουμε το WINAVR το οποίο είναι ένας AVR GCC compiler, επιπλέον, συμπεριλαμβάνει το AVRDude για κατέβασμα του κώδικα στον μικροελεγκτή και διατίθεται ελεύθερα στον παραπάνω σύνδεσμο.
Μετά την εγκατάσταση των παραπάνω προγραμμάτων, είμαστε έτοιμοι να ξεκινήσουμε το Eclipse. Κάθε φορά που ξεκινάει το πρόγραμμα μας ζητάει να επιλέξουμε workspace. Συνιστάται να χρησιμοποιείτε ξεχωριστό workspace για AVR, σε περίπτωση που δουλεύετε το Eclipse και για άλλες εργασίες προγραμματισμού. Ξεκινώντας το πρόγραμμα μας εισάγει στο περιβάλλον εργασίας. Ακόμα δεν είναι έτοιμη η πλατφόρμα για εργασία. Θα χρειαστεί να κατεβάσουμε τις επεκτάσεις για AVR,
κάτι που χρειάζεται να γίνει μόνο την πρώτη φορά. Στην πάνω γραμμή επιλογών πατάμε “Help” και στο μενού που θα ανοίξει επιλέγουμε “Install New Software”. Στο αναδυόμενο παράθυρο που θα ανοίξει στη συνέχεια, στο πλαίσιο δίπλα στον τίτλο “Work with:” πάνω αριστερά, γράφουμε: http://avr-eclipse.sourceforge.net/updatesite/ και πατάμε “Add…” και στο νέο αναδυόμενο παράθυρο που θα ανοίξει, στο πλαίσιο δίπλα στον τίτλο “Name:”, γράφουμε: AVR Eclipse Plugin
και “Add…”.
Στη συνεχεία,
στο παρακάτω πλαίσιο θα εμφανιστεί το πακέτο που
θα εγκατασταθεί. Επιλέγουμε το check box αριστερά και “Next”. Το επόμενο πλαίσιο διαλόγου ζητάει επιβεβαίωση για το πακέτο, πατάμε “Next” και στη συνέχεια η επόμενη σελίδα ζητάει να συμφωνήσουμε με τους όρους, επιλέγουμε “I agree” και “Finish”. Μετά την εγκατάσταση, το πρόγραμμα θα μας ζητήσει επανεκκίνηση.
Όταν ολοκληρωθεί η επανεκκίνηση του προγράμματος, η πλατφόρμα είναι πλέον έτοιμη για ανάπτυξη εφαρμογής. Στην πάνω γραμμή επιλογών πατάμε “File”->”New”->”Project…” και στο αναδυόμενο παράθυρο επιλέγουμε “C Project” και “Next”. Στο νέο παράθυρο που θα ανοίξει, στο πλαίσιο στο πάνω μέρος δίπλα στον τίτλο “Project name:”, γράφουμε την επιθυμητή ονομασία (πχ testAVR), από τη στήλη “Project type”
επιλέγουμε
“AVR Cross Target Application” και από κάτω “Empty Project”και “Finish”. Στο πάνω αριστερό μέρος θα πρέπει να εμφανιστεί το σύμβολο ενός φακέλου με όνομα του project δίπλα.
Στη συνέχεια πρέπει να προχωρήσουμε σε ορισμένες ρυθμίσεις. Κάνουμε δεξί κλικ πάνω στο project και επιλέγουμε “Properties”. Στο παράθυρο που θα ανοίξει, πάμε στην αριστερή στήλη στο μενού “C/C++ Build” και επιλέγουμε “Settings”. Στο μενού που θα ανοίξει στο κέντρο, με προεπιλεγμένη την ενότητα “Additional Tools in Toolchain”, επιλέγουμε τα “Generate Hex File for Flash Memory”, “Print Size”, “AVR Dude” από τα
αντίστοιχα check boxes. Μετά πάμε στην ενότητα “Symbols” και στο πεδίο “Defined Syms” πατάμε το εικονίδιο “+” και στο πλαίσιο που ανοίγει ρυθμίζουμε τη συχνότητα λειτουργίας. Πληκτρολογούμε F_CPU=16000000UL (για συχνότητα 16MHz) και “OK”. Τέλος, από την ενότητα "Optimization" επιλέγουμε, από το drop down menu πάνω δεξιά, "Size Optimizations (-Os)" και "Apply and Close". Σε κάθε επιλογή, αν ανοίγει ένα μικρό παράθυρο με ειδοποίηση σχετικά με Build changes, επιβεβαιώνουμε πατώντας "Rebuild Index".
Στη συνέχεια, πάμε ξανά στην αριστερή στήλη στο μενού “AVR”και επιλέγουμε “AVRDude”. Στο μενού που θα ανοίξει στο κέντρο (με προεπιλεγμένη την ενότητα “Programmer”) στο πλαίσιο κάτω από το “Programmer Configuration”
μπορούμε να
επιλέξουμε τον προγραμματιστή που θα χρησιμοποιήσουμε. Πατάμε “New” και στο παράθυρο που θα ανοίξει, εφόσον χρησιμοποιούμε τη διάταξη που περιγράφεται στο κεφάλαιο «Αναπτυξιακή Πλακέτα–Μικροελεγκτής», επιλέγουμε από το box “USBasp, http://www.fischl.de/usbasp/”, γράφουμε στο πλαίσιο δίπλα στον τίτλο “Configuration name” στο πάνω μέρος τον επιθυμητό τίτλο για τη ρύθμιση (πχ USBasp) και πατάμε “OK”.
Κλείνοντας το παράθυρο, μας επιστρέφει στην καρτέλα της ενότητας “Programmer” όπου ελέγχουμε το
πλαίσιο
κάτω από το “Programmer Configuration” αν έχει την ονομασία που είχαμε βάλει στην προηγούμενη ρύθμιση USBasp (αν όχι, τη βάζουμε από το drop down menu) και πατάμε “Apply”.
Μετά, πάμε ξανά στην αριστερή στήλη στο μενού “AVR”και επιλέγουμε “Target Hardware”. Στο παράθυρο που θα ανοίξει επιλέγουμε τον μικροελεγκτή (πχ ATmega2560) και τη συχνότητα λειτουργίας (πχ 16000000). Αν έχουμε συνδεδεμένες τις πλακέτες του προγραμματιστή και μικροελεγκτή και είναι σωστά εγκατεστημένος
ο προγραμματιστής (Επίλυση ζητημάτων εγκατάστασης οδηγών και προγραμμάτων στα Windows 10 (USBasp, Xilix ISE κ.ά.)),
υπάρχει δυνατότητα να πάρει αυτόματα τις ρυθμίσεις κάνοντας κλικ στο “Load from MCU”. Επιβεβαιώνουμε τις ρυθμίσεις και πατάμε “Apply” και “Apply and Close”. Σε περίπτωση που μας βγάλει μήνυμα σχετικό με τα build settings πατάμε “Rebuild Intex”.
Πλέον είμαστε έτοιμοι να συντάξουμε τον κώδικα της εφαρμογής που θέλουμε. Είναι υποχρεωτικό, το αρχείο που θα έχει τον κυρίως κώδικα (με την int main (void)) να ονομάζεται main.c. Στην πάνω γραμμή επιλογών πατάμε “File”->”New”->”Source File” και στο αναδυόμενο παράθυρο στο πλαίσιο δίπλα στον τίτλο “Source File:” γράφουμε: main.c και πατάμε “Finish”. Στον editor θα ανοίξει ένα αρχείο όπου
στο πάνω μέρος σε σχόλια θα
αναγράφεται η ημερομηνία και το όνομα
του συντάκτη. Στη συνέχεια μπορούμε να γράψουμε τον επιθυμητό κώδικα.
Ως πρώτη εφαρμογή θα ορίσουμε τις θύρες του PORTA εισόδους και του PORTB εξόδους και θα συνδέσουμε δύο τουλάχιστο διακόπτες (buttons) στις εισόδους και τα LED στις εξόδους. Τα LED ανάβουν με χαμηλή λογική στάθμη και οι διακόπτες δίνουν
επίσης χαμηλή λογική στάθμη και για αυτό το λόγο θα πρέπει να ενεργοποιήσουμε
τις αντιστάσεις πρόσδεσης (pull up) στις εισόδους. Στον κώδικα που ακολουθεί τα LED αναβοσβήνουν κάθε μισό
δευτερόλεπτο και αν πατηθεί ο ένας διακόπτης παραμένουν σβηστά για όση ώρα
είναι πατημένος.
#include <avr/io.h>
#include <util/delay.h> //Delay routine header file
#define F_CPU 16000000UL //MCU Frequency, Definition for
Delay routine
int main(void)
{
_delay_ms(100);
//Delay for start up (voltage stabil.)
DDRA = 0b00000000;
//Port
A all inputs
PORTA = 0b11111111; //Enable
pull up resistors to all
DDRB = 0b11111111; //Port
B all outputs
PORTB = 0b11111111; //LEDs off,
initial state
while (1)
{
PORTB = ~PORTB; //Toggle outputs
_delay_ms(500); //Delay 500ms
while(PINA == 0b11111110) //Button pressed
PORTB = 0b11111111; //LEDs off
}
}
Καθώς γράφουμε τον κώδικα, το eclipse μας ενημερώνει για τυχών συντακτικά λάθη και μας προτείνει λύσεις. Σε έναν σωστά γραμμένο κώδικα, δεν θα πρέπει να υπάρχουν υπογραμμισμένα σημεία από τον editor στο εκτελέσιμο μέρος. Όταν ολοκληρώσουμε τη σύνταξη του κώδικα, πατάμε στην πάνω γραμμή επιλογών “Project”->”Build All”. Εφόσον είναι συνδεδεμένα ο προγραμματιστής και ο μικροελεγκτής, το πρόγραμμα θα κατεβεί στον μικροελεγκτή, θα λάβουμε στο
πλαίσιο διαλόγου,
στο κάτω μέρος, ένα μήνυμα επιτυχούς ολοκλήρωσης με πληροφορίες για τη διαδικασία του compile, το μέγεθος του αρχείου, τη χρήση των πόρων του μικροελεγκτή κλπ. και θα δούμε την εφαρμογή μας να λειτουργεί στο αναπτυξιακό. Σε περίπτωση που δεν έχουμε συνδεδεμένο τον μικροελεγκτή, θα μας βγάλει μόνο ένα μήνυμα λάθους: “make: *** [avrdudedummy] Error 1”. Στην περίπτωση αυτή παράγεται το .hex αρχείο και μπορεί να χρησιμοποιηθεί από οποιαδήποτε άλλη εφαρμογή για να κατεβεί στον μικροελεγκτή. Σε περίπτωση που
υπάρχουνπερισσότερα
μηνύματα λαθών, θα πρέπει να ανατρέξουμε στη σύνταξη του κώδικα για συντακτικά λάθη.
Σε περίπτωση που δεν είναι δυνατό να προχωρήσει το Eclipse σε compile, αλλά βγάζει ένα μήνυμα λάθους: “Winavr error-The application was unable to start correctly (0x0000142)”, τότε υπάρχει ασυμβατότητα ενός .dll αρχείου του WINAVR με το λειτουργικό του υπολογιστή μας. Σε αυτή την περίπτωση θα πρέπει να κατεβάσουμε από κάποια αξιόπιστη πηγή (προτείνεται) το αρχείο “msys-1.0.dll” και
να αντικαταστήσουμε αυτό που βρίσκεται στον φάκελο ..\WinAVR-20100110\utils\bin
©2023 Πορλιδάς Δημήτριος
|