AVR-GCC. Σειρά βοηθημάτων για προγραμματισμό AVR μικροελεγκτών με GNU GCC.

Απαιτήσεις αυτούς του βοηθήματος.

  • Βασικές γνώσεις της γλώσσας προγραμματισμού C. Υπάρχουν δεκάδες βοηθήματα στο διαδίκτυο για την γλώσσα προγραμματισμού C, καθώς και πολλά αξιόλογα βιβλία. Ένα από αυτά είναι το “Η γλώσσα προγραμματισμού C” των Brian Kernighan και Dennis Ritchie. Δεν απαιτείται προηγούμενη γνώση προγραμματισμού μικροελεγκτών, είτε σε assembly είτε σε κάποια άλλη γλώσσα.
  • Βασικές γνώσεις ηλεκτρονικών.
  • Βασικές γνώσεις ηλεκτρονικών υπολογιστών (όχι, το ECDL δεν επαρκεί).
  • Γνώση της Αγγλικής γλώσσας.

Πρόλογος.
Το βοήθημα αυτό είναι μία εισαγωγή στον προγραμματισμό των AVR μικροελεγκτών της Atmel με την βοήθεια της γλώσσας C και τον ελεύθερο μεταγλωττιστή (compiler στο εξής ) της C, GNU-GCC. Στο βοήθημα αυτό αναφερόμαστε συχνά στην στάνταρ βιβλιοθήκη avr-libc για την οποία υπάρχει τεκμηρίωση στην παρακάτω σελίδα.

AVR libC

Στην παραπάνω σελίδα υπάρχουν πληθώρα πληροφοριών για τον προγραμματισμό των μικροελεγκτών AVR με την γλώσσα C. Το βοήθημα αυτό γράφτηκε για δική μου εξάσκηση στο συγκεκριμένο θέμα με οδηγό τις δικές μου γνώσεις και θέλω. Το βοήθημα αυτό δεν βοηθά και δεν είναι κατάλληλο για τον εντελώς αρχάριο στον χώρο των ηλεκτρονικών.


Απαιτούμενα εργαλεία.

Για να ξεκινήσετε δημιουργώντας τα δικά σας προγράμματα με τον avr-gcc και την βιβλιοθήκη avr-libc θα χρειαστείτε το παρακάτω υλικό και λογισμικό.

  • Μία πλακέτα/breadboard/αναπτυξιακό που θα φιλοξενεί τον μικροελεγκτή που θέλετε να προγραμματίσετε. Οι περισσότεροι AVR μικροελεγκτές (Atmega* και AT90*) υποστηρίζουν τον avr-gcc. Για μία πλήρη λίστα δείτε την τεκμηρίωση της βιβλιοθήκης avr-libc.
  • Έναν προγραμματιστή για την εγγραφή του τελικού αποτελέσματος στον μικροελεγκτή. Πολλά αναπτυξιακά δεν χρειάζονται κάποιον έχτρα προγραμματιστή (π.χ. STK500, AVR-Butterfly, Arduino).
  • Τον μεταγλωττιστή avr-gcc και την βιβλιοθήκη avr-libc. Και τα δύο είναι διαθέσιμα δωρεάν για τις περισσότερες αρχιτεκτονικές και λειτουργικά συστήματα. Συγκεκριμένα για τα Windows υπάρχει το πακέτο WinAVR.
  • Κατάλληλο λογισμικό για την επικοινωνία του υπολογιστή με τον μικροελεγκτή. Π.χ. avrdude, Atmel AVRISP, Pony Programmer, AVR Studio (μόνο για Windows).
  • Κάποιο λογισμικό εγγραφής κώδικα. Αυτό μπορεί να είναι από έναν απλό επεξεργαστή κειμένου μέχρι σύνθετα προγράμματα ειδικά για τον σκοπό αυτό με πολλούς αυτοματισμού και “καλούδια”. Π.χ. gVim, Code::Blocks, Eclipse, AVR Studio (μόνο για Windows).

Δημιουργία κώδικα μηχανής.

Ο μεταγλωττιστής (compiler) avr-gcc, από τον πηγαίο κώδικα της C (και με την βοήθεια προγραμμάτων όπως o preprocessor, o linker και ο assembler) παράγει τον κώδικα μηχανής που είναι κατάλληλος για τον μικροελεγκτή. Συνήθως ο κώδικας αυτός υπάρχει σε ένα αρχείου τύπου Hex (.hex ), προδιαγραφών της Intel. Στην συνέχεια το λογισμικό προγραμματισμού (όπως το avrdude) διαβάζει το αρχείο αυτό και μεταδίδει τα δεδομένα που περιέχει (τον κώδικα μηχανής) στην μνήμη του μικροελεγκτή. Η διαδικασία αυτή μπορεί να γίνει με δύο τρόπους.

  • Με την χρήση ενός ολοκληρωμένου περιβάλλοντος ανάπτυξης (IDE Integrated Development Interface). Σε ένα τέτοιο περιβάλλον όλες οι ρυθμίσεις και οι παραμετροποιήσεις μπορούν να γίνουν μέσα από παράθυρα διαλόγων. Τέτοια είναι για παράδειγμα το Eclipse (με το πρόσθετο AVR-Eclipse), το Avr Studio (σε συνδυασμό με το πακέτο WinAVR), το Code::Blocks, το KontrollerLab (μόνο για KDE σε Linux). Σε όλα τα παραπάνω θα βρείτε πληροφορίες/οδηγίες για την χρήση τους σε συνδυασμό με το avr-gcc στην τεκμηρίωση τους.
  • Με την χρήση του προγράμματος make και τα κατάλληλα αρχεία, τα makefiles.

Τι χρησιμοποιώ στο βοήθημα αυτό.

  • Λειτουργικό σύστημα: GNU/Linux. Συγκεκριμένα Arch Linux (3.2.6-2-ARCH) http://www.archlinux.org .
  • avr-gcc έκδοση 4.6.0
  • avr-libc έκδοση 1.7.0
  • binutils-avr έκδοση 2.21
  • avrdude έκδοση 5.11
  • Code::Blocks 10.05
  • Atmega8-16PU
  • Προγραμματιστή συμβατό με STK500 v2)
  • Ένα breadboard, καλώδια για breadboard, αντιστάσεις, μερικά LED.

** Στο βοήθημα αυτό γίνεται η υπόθεση πως ο αναγνώστης έχει τις απαραίτητες γνώσεις για την εγκατάσταση και ρύθμιση τον παραπάνω προγραμμάτων σε GNU/Linux ή Windows.

** Αν αποφασίσετε να χρησιμοποιήσετε Windows τότε θα χρειαστείτε το πακέτο WinAVR.

** Απαιτείτε μελέτη της τεκμηρίωσης (datasheet) του μικροελεγκτή ATmega8.

Προετοιμασία του Code::Blocks.

Το πρώτο πράγμα που πρέπει να ρυθμίσουμε στο CodeBlocks είναι οι παράμετροι για το avrdude.
Από το μενού επιλέγουμε Tools > Configure tools… Στην συνέχεια επιλέγουμε Add. Στην πινακίδα που ανοίγει συμπληρώνουμε τα πεδία ως εξής:

Name: Avrdude
Executable: /usr/bin/avrdude *
Parameters: -p m8 -c stk500v2 -P/dev/ttyUSB0 -Uflash:w:${TARGET_OUTPUT_BASENAME}.elf.hex **
Working Directory: ${PROJECT_DIR}/${TARGET_OUTPUT_DIR}

Επιλέγουμε OK και πάλι OK.

* Το πεδίο Executable περιέχει την θέση του εκτελέσιμου του avrdude. Μπορεί να είναι διαφορετική σε κάθε σύστημα. Στις περισσότερες διανομές GNU/Linux θα βρίσκεται στην θέση /usr/bin/.
** Το πεδίο Parameters περιέχει τις ρυθμίσεις για τον μικροελεγκτή που θέλουμε να προγραμματίσουμε. Π.χ. το -p m8 προσδιορίζει τον Atmega8 που χρησιμοποιούμε. Το -c stk500v2 το πρωτόκολλο επικοινωνίας του προγραμματιστή μας (εδώ το stk500v2). Το -P /dev/ttyUSB0 είναι η θύρα που έχουμε συνδέσει τον προγραμματιστή μας (Σε Windows μπορεί να είναι -P com5 ή σε κάποιο άλλο GNU/Linux σύστημα -P /dev/ttyUSB2). Περισσότερες λεπτομέρειες μπορείτε να βρείτε στην τεκμηρίωση του avrdude.

Στην συνέχεια πρέπει να ρυθμίσουμε κάποια πραγματάκια στον compiler. Επιλέγουμε Settings > Compiler an Debugger… Στο Selected compiler επιλέγουμε GNU AVR GCC Compiler. Στην πινακίδα Linker settings φροντίζουμε να υπάρχει μόνο το -lm στο Other linker options: Στην πινακίδα Toochain executables φροντίζουμε να υπάρχει το avr-gcc (όχι avr-g++) στο Linker for dynamic libs:


Για την δημιουργία ενός νέου έργου επιλέγουμε από το μενού File > New > Project… Στην πινακίδα που εμφανίζεται επιλέγουμε AVR Project και στην συνέχεια Go. Επιλέγουμε Next. Στο πεδίο Project title επιλέγουμε το όνομα του έργου (π.χ. Avr-test) και πατάμε Next.Πατάμε πάλι Next. Στο πεδίο Please choose a processor for this project… επιλέγουμε το μοντέλο του μικροελεγκτή που επιθυμούμε να προγραμματίσουμε (στην δική μου περίπτωση atmega8). Στο πεδίο Define F__CPU with the following value: συμπληρώνουμε την συχνότητα λειτουργίας του μικροελεγκτή μας (στην δική μου περίπτωση 1000000UL που είναι 1 Mhz). Επιλέγουμε Finish. Επιλέγουμε από το μενού Project > Build options… Στην πινακίδα που ανοίγει επιλέγουμε Optimize generated code (for size) [-Os]. Τώρα μπορούμε να γράψουμε τον κώδικα μας στο αρχείο main.c. Για την μεταγλώττιση του προγράμματος που γράψαμε επιλέγουμε από το μενού Build > Build. Για να φορτώσουμε το πρόγραμμα στον μικροελεγκτή μας επιλέγουμε από το μενού Tools > Avrdude.






Advertisements
This entry was posted in AVR, Electronics and tagged , , , , , . Bookmark the permalink.

One Response to AVR-GCC. Σειρά βοηθημάτων για προγραμματισμό AVR μικροελεγκτών με GNU GCC.

  1. Panos says:

    Μου αρέσει αυτό το άρθρο, THANKS A lot

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s