MicroPlanet

  • Αρχή
  • Εγχειρίδια
  • Ρrojects
  • Βίντεο
  • Φόρουμ
Αρχή › Εγχειρίδια › Μικροελεγκτές › Μικροελεγκτής Propeller

Περιεχόμενα

  • Αρχή
  • Εγχειρίδια
    • Ηλεκτρονικά Στοιχεία
    • Εγχειρίδια Εργαλείων
    • Οδηγός Κόλλησης
    • Χειρισμός Οργάνων
    • Μικροελεγκτές
      • Μικροελεγκτής Basic Stamp 2
      • Μικροελεγκτής Arduino
      • Μικροελεγκτής Propeller
      • Μικροελεγκτές Atmel
      • Πρωτόκολλα Επικοινωνίας
      • Μάθημα Propeller
      • TI Piccolo
    • Γλώσσες Προγραμματισμού
    • Μπαταρίες
    • Αισθητήρια
    • Περιφερειακά
  • Projects
  • Βίντεο
  • Φόρουμ
  • Πρόσφατες Δημοσιεύσεις

Είσοδος

  • Δημιουργία νέου λογαριασμού
  • Ξέχασα το συνθηματικό μου

Αναζήτηση

Φιλικά Sites:

Custom Bobblehead



Ποιοι είναι εδώ

Είναι εδώ αυτή τη στιγμή 0 users και 2 επισκέπτες.

Δημοσκόπηση

Θα θέλατε να δείτε ένα eshop για Μικροελεγκτές και σχετικά προϊόντα από το Microplanet.gr;
Ναι
93%
Όχι
4%
Δεν Ξέρω/Δεν Απαντώ
3%
Συνολικοί Ψήφοι: 112
  • Παλιότερες Δημοσκοπήσεις

Μικροελεγκτής Propeller

ΠΕΡΙΕΧΟΜΕΝΑ

  • Εισαγωγή

  • Συσκευασία

  • Διασύνδεση Υλικού

  • Αρχιτεκτονική Πολλαπλών Πυρήνων

  • Χαρακτηριστικά του Propeller

  • Κύρια Μνήμη

  • Διαδικασία Εκκίνησης του Μικροελεγκτή (Boot-UP)

  • Διαδικασία Εκτέλεσης Εντολών (Run Time)

  • Διαδικασία Τερματισμού (Power Off)

 

Εισαγωγή

Ο μικροελεγκτής P8X32 Propeller της εταιρίας Parallax, παρουσιάστηκε για πρώτη φορά το 2006. Είναι παράλληλης αρχιτεκτονικής και πολλαπλών πυρήνων (8 για την ακρίβεια). Έχει δηλαδή 8 CPUs αρχιτεκτονικής τύπου RISC με εύρος διαύλου 32bits.

Ο προγραμματισμός του Propeller γίνεται με την γλώσσα προγραμματισμού Assembly αλλά και με μια γλώσσα που ονομάζεται SPIN. Προγράμματα με την γλώσσα προγραμματισμού SPIN μπορούν να υλοποιηθούν μέσω του περιβάλλοντος ανάπτυξης που ονομάζεται Propeller Tool με το οποίο γίνεται και η διασύνδεση σε επίπεδο software του μικροελεγκτή.

Ο μικροελεγκτής Propeller σχεδιάστηκε για να παρέχει υψηλή επεξεργαστική ταχύτητα σε εφαρμογές ενσωματωμένων συστημάτων (embedded systems) ενώ ταυτόχρονα διατηρεί χαμηλά επίπεδα κατανάλωσης σε ρεύμα και έχει μικρό φυσικό μέγεθος. Τέλος να πούμε οτι ο αριθμός των πυρήνων συντελεί στο να διασπώνται διάφορες διεργασίες για την ταχύτερη εκτέλεση τους καθώς οι πυρήνες πέρα από την ανεξάρτητη λειτουργία τους μπορούν να λειτουργήσουν και κατά τρόπο κατά τον οποίο συνεργάζονται και όλα αυτά διατηρώντας μια αρχιτεκτονική εύκολη στην εκμάθηση.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

Συσκευασία

Η αρχική έκδοση του ολοκληρωμένου (αποκαλείται P8X32) παρέχει 32 Pins Εισόδου/ Εξόδου σε μια συσκευασία των 40 Pins DIP (Dual In Line Package), ή σε τετράγωνη συσκευασία τύπου QFN 44 Pins. Από τους 40 ακροδέκτες, οι 32 είναι για εφαρμογές Εισόδου/Εξόδου όπως προαναφέρθηκε, 4 είναι για τροφοδοσία και γείωση του ολοκληρωμένου, δύο είναι για την σύνδεση εξωτερικού κρυστάλλου, ένας για την λειτουργεία ελέγχου Brownout και ένας για την λειτουργία Reset.

Τα ολοκληρωμένα του μικροελεγκτή υπάρχουν στο εμπόριο σε δύο μορφές όπως φαίνεται και από το παρακάτω σχήμα.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

Διασύνδεση Υλικού

Στο παρακάτω σχηματικό διάγραμμα βλέπουμε πως συνδέεται ένας Propeller, με μια εξωτερική μνήμη EEPROM, με την τροφοδοσία,  με έναν κρύσταλλο και έναν Ηλεκτρονικό Υπολογιστή μέσω του ProPlug.  Για όσους δεν θέλετε να προμηθευτείτε το ProPlug σας δώσαμε στον τομέα Projects του site μια άλλη σχετική λύση στο εν λόγω θέμα.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

 Αρχιτεκτονική Πολλαπλών Πυρήνων

Κάθε ένας από τους 8 πυρήνες εύρους 32bit έκαστος ( η Parallax τους ονομάζει cogs) έχει μια βασική CPU. Αξίζει να αναφερθεί οτι η ALUs των Cogs του Propeller δεν υποστηρίζουν άμεσα την πράξη της διαίρεσης. Η μεγαλύτερη μεταβλητή που έχει ο μικροελεγκτής μπορεί να είναι εύρους long και κάθε cog έχει πρόσβαση σε 512 X 32-bit (2ΚΒ συνολικά) long words από εντολές και δεδομένα.  Πέρα από τις επιμέρους μνήμες RAM που έχει κάθε ένας από τους πυρήνες υπάρχει και μια κοινή μνήμη συνόλου 64Kbytes (32 KiloBytes RAM + 32 KiloBytes ROM). Αυτός ο κοινός πόρος προσπελαύνεται από τον κάθε πυρήνα διαδοχικά με την βοήθεια ενός Hub που ενσωματώνει ο Propeller με τον αλγόριθμο Round Robin. Έκαστος από τους πυρήνες έχει πρόσβαση σε δύο hardware counters οι οποίοι ονομάζονται καταχωρητές βίντεο (video registers) και χρησιμοποιούνται για να αναπαράγουν σήματα τύπου PAL, NTSC, VGA, για τον έλεγχο σερβοκινητήρων ή άλλα σήματα χρονισμού.

 

O Propeller μπορεί να χρονιστεί, χρησιμοποιώντας άμεσα τον εσωτερικό ταλαντωτή (ενσωματωμένο στο chip). Αυτό όμως έχει σαν αποτέλεσμα να θυσιαστεί η ακρίβεια και να παραχθούν ορισμένες ποσότητες θερμότητας. Η άλλη λύση και ταυτόχρονα η προτεινόμενη είναι να χρονιστεί από έναν εξωτερικό κρύσταλλο ή resonator, με την βοήθεια του οποίου μπορούν να επιτευχθούν μεγαλύτερες ταχύτητες και ακρίβεια, ανεβάζοντας σαφώς το κόστος της συνολικής κατασκευής.Κάθε μια από τις παραπάνω πηγές συχνοτήτων διοχετεύουν τα αποτελέσματα τους στον εσωτερικό PLL πολλαπλασιαστή ρολογιού που φέρει ο Propeller και τίθενται στις εξής ταχύτητες 1x,2x,4x,8x, ή 16x.

Και η συχνότητα χρονισμού αλλά και ο PLL πολλαπλασιαστής έχουν ορισμένες τιμές οι οποίες μπορούν να αλλαχθούν δυναμικά από τον κώδικα ακόμη και την ώρα που εκτελείται ο κώδικας. Αν χρησιμοποιηθούν σωστά μπορεί να βελτιώσουν την ισχύ του Propeller και τα τελικά αποτελέσματα. Για παράδειγμα η τιμή του πολλαπλασιαστή PLL θα μπορούσε να μειωθεί πριν από μια κατάσταση παύσης (καθηστέρηση από πλευράς κώδικα και εκτέλεσης) του μικροελεγκτή και να αυξηθεί αμέσως μετά το πέρας αυτής της κατάστασης. Αυτό έχει ως αποτέλεσμα την μείωση κατανάλωσης ισχύος στον επεξεργαστή. Ωστόσο η χρήση μιας τέτοιας τεχνικής περιορίζεται σε καταστάσεις όπου χρησιμοποιείται ένας και μόνο πυρήνας από τους 8.

Το εύρος συχνοτήτων του ρολογιού ενός Propeller είναι από 32kHz έως και 80MHz.  Όταν ο μικροελεγκτής "τρέχει" στα 80MHz, ο διερμηνέας SPIN που είναι ενσωματωμένος σε αυτόν έχει την δυνατότητα να εκτελεί 80.000 tokens εντολών ανά δευτερόλεπτο σε κάθε πυρήνα. Αυτό μπορεί να ανέλθει προφανώς στις 640.000 (8x80.000) εντολές υψηλού επιπέδου ανά δευτερόλεπτο. Οι περισσότερες εντολές μηχανής, απαιτούν περίπου 4 κύκλους ρολογιού για την εκτέλεση τους. Αυτό έχει σαν αποτέλεσμα τα 20 MIPS ανά πυρήνα ή 160 MIPS από τους 8 πυρήνες (cogs).

Η σχεδιαστική φιλοσοφία του Propeller είναι ένας μικροελεγκτής που υπακούει αυστηρά στα όρια του Real Time. Η αρχιτεκτονική πολλαπλών πυρήνων απορίπτει την ανάγκη για διακοπές (interrupts). Στην συνηθισμένη αρχιτεκτονική των μικροεπεξεργαστών εξωτερικές γραμμές διακοπών συνδέονται με τον εσωτερικό ελεγκτή διακοπών του chip και χειρίζονται από μια ή περισσότερες ρουτίνες χειρισμού διακοπών. Έτσι όταν για παράδειγμα συμβεί μια διακοπή, ο ελεγκτής διακοπών καταστέλλει την CPU, σώζοντας την εσωτερική καταστάση ( στην στοίβα  - stack) και τρέχει μια ρουτίνα χειρισμού της διακοπής. Αφού ολοκληρωθεί η εκτέλεση της διακοπής η ρουτίνα ολοκληρώνεται και επιστρέφει τις τιμές από την στοίβα και η CPU συνεχίζει την εκτέλεση από εκεί που σταμάτησε πριν συμβεί διακοπή.

Στον Propeller σε αντίθεση με τον κλασσικό χειρισμό διακοπών τα πράγματα λειτουργούν  κάπως διαφορετικά. Για να χειριστεί μια εξωτερική διακοπή, πρέπει να τεθεί ένα, οποιοδήποτε από τις 32 I/O γραμμές ως Είσοδος. 'Ενας πυρήνας (cog) τότε προγραμματίζεται ώστε να περιμένει για μια μεταβολή στην τάση του εισερχόμενου σήματος ( Θετική ή Αρνητική Ακμή). Ο χρονισμός της εισόδου γίνεται με ένα εκ των δύο κυκλωμάτων χρονισμού που είναι διαθέσιμα σε κάθε πυρήνα του μικροελεγκτή προς τέτοιες χρήσεις. Όταν ένας πυρήνας (cog) περιμένει για μια διακοπή λειτουργεί σε κατάσταση χαμηλής κατανάλωσης. Κατ' επέκταση αυτή η τεχνική μπορεί κατά τον ίδιο τρόπο να επεκταθεί και στους υπόλοιπους 7 πυρήνες δίνοντας μας την δυνατότητα να χειριζόμαστε μέχρι και 8 διαφορετικές διακοπές με μηδενική καθηστέρηση. Σε αντίθεση με τον κλασσικό χειρισμό διακοπών, ο κώδικας που τρέχει στους άλλους πυρήνες δεν επιρρεάζεται από την διακοπή που τρέχει σε έναν συγκεκριμένο πυρήνα πράγμα που καθιστά το όλο σύστημα να συμβαδίζει με το ντετερμινιστικό μοντέλο.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

Χαρακτηριστικά του Propeller

Ο Propeller (P8X32A) έχει 32 ακροδέκτες I/O (Port A, ακροδέκτες P0 έως P31). Τέσσερις από αυτούς τους I/O, P28-P31 έχουν ένα ειδικό σκοπό κατά την διαδικασία εκκίνησης ή reset. Κατά την εκκίνηση ή επανεκίνηση (power-up/reset),οι ακροδέκτες P30 και P31 επικοινωνούν με έναν Η/Υ για τον προγραμματισμό του Μικροελεγκτή και οι P28 και P29 επικοινωνούν με ένα εξωτερικό EEPROM 32KB(24LC256).

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

Κύρια Μνήμη

Η κύρια μνήμη του μικροελεγκτή είναι ένα μπλοκ της τάξεως των 64Kbytes (16K longs) στα οποία έχουν πρόσβαση όλοι οι πυρήνες (cogs) και η πρόσβαση σε αυτόν τον πόρο γίνεται με την μέθοδο του αμοιβαίου αποκλεισμού από το Hub του Propeller. Αποτελείται από 32KB RAM και 32KB ROM. Τα 32KB RAM είναι για χρήση γενικού σκοπού και είναι ο προορισμός του κώδικα που γράφει ο χρήστης. Ο κώδικας είτε στέλνεται απευθείας από τον H/Y είτε είναι αποθηκευμένος σε κάποια εξωτερική 32KB EEPROM καταλήγει στη RAM. Από την άλλη μεριά τα 32KB ROM περιέχουν όλο τον κώδικα και πηγές δεδομένων που είναι μείζον σημασίας για την λειτουργία του Propeller. Τέτοια είναι πίνακες χαρακτήρων, λογαριθμικοί και αντιλογαριθμικοί πίνακες, τριγωνομετρικοί πίνακες, ο Boot Loader αλλά και ο διερμηνευτής SPIN. Η οργάνωση της μνήμης φαίνεται στην παρακάτω εικόνα.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

 

Διαδικασία Εκκίνησης του Μικροελεγκτή (Boot-UP)

Κατά την εκκίνηση ενός Propeller (για την οποία χρειάζονται συνολικά ( 100ms), γίνονται τα εξής:

1) Ο μικροελεγκτής ξεκινά το εσωτερικό του ρολόι σε μια μικρή αρχικά συχνότητα (≈20 KHz), καθυστερεί για 50ms (καθυστέρηση για reset), μεταβάλλει την συχνότητα λειτουργίας του ρολογιού σε ταχύτατη (≈12 MHz) και μετά φορτώνει ένα πρόγραμμα που έχει ενσωματωμένο το οποίο ονομάζεται Boot Loader στον πρώτο πυρήνα του (Cog 0).

2) O Boot Loader επιτελεί μια ή περισσότερες από τις παρακάτω ενέργειες στην σειρά :

     i. Γίνεται έλεγχος για το αν ο μικροελεγκτής είναι συνδεδεμένος σε έναν Η/Υ από τους ακροδέκτες P30 και P31. Αν ανιχνευθεί ότι υπάρχει ένας H/Y, ο Boot Loader εκτελεί ρουτίνες κατά τις οποίες αναγνωρίζεται από τον υπολογιστή ο Propeller και αν υπάρχει στον Η/Υ κάποιο πρόγραμμα για φόρτωση στον μικροελεγκτή αυτό «κατεβαίνει» σε αυτόν. Το πρόγραμμα αποθηκεύεται είτε στην μνήμη RAM του Propeller είτε σε κάποια εξωτερική μνήμη EEPROM των 32KB. Σε περίπτωση που δεν υπάρχει εξωτερική μνήμη EEPROM ο κώδικας και τα δεδομένα θα χαθούν από τον μικροελεγκτή κατά την επόμενη επανεκκίνηση του.
     ii. Αν δεν ανιχνευθεί κάποιος Η/Υ, o Boot Loader ψάχνει για εξωτερικό 32KB EEPROM (24LC256) από τους ακροδέκτες P28 και P29. Αν το τελευταίο ανιχνευθεί τότε φορτώνει τα περιεχόμενα του στην μνήμη RAM του Propeller.
     iii. Αν δεν ανιχνευθεί EEPROM o Boot Loader σταματά, ο 1ος πυρήνας τερματίζεται (Cog 0) και o Propeller τίθεται σε κατάσταση τερματισμού (shutdown mode).

3) Αν οποιοδήποτε από τα δύο βήματα (2i ή 2ii) ήταν επιτυχή στο να φορτωθεί ένα πρόγραμμα στην κεντρική RAM του μικροελεγκτή και δεν δόθηκε από τον H/Y καμία εντολή τερματισμού του, τότε ο 1ος πυρήνας φορτώνεται με τον διερμηνευτή SPIN και ο κώδικας του χρήστη εκτελείται από την κεντρική RAM του chip.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

Διαδικασία Εκτέλεσης Εντολών (Run Time)

Μια εφαρμογή για τον Propeller είναι ένα πρόγραμμα που έχει γράψει ο χρήστης και έχει γίνει σε αυτό compile σε μια μορφή δυαδική (binary). Αυτό στέλνεται από έναν Η/Υ στον μικροελεγκτή απευθείας ή σε μια εξωτερική EEPROM που είναι συνδεδεμένη σε αυτόν. Η εφαρμογή αποτελείται από κώδικα που είναι γραμμένος σε κώδικα SPIN (Γλώσσα Υψηλού Επιπέδου) ή στην γλώσσα Assembly (χαμηλού επιπέδου) του Propeller. Ο κώδικας που γράφεται σε SPIN υφίσταται επεξεργασία από έναν διερμηνευτή (interpreter) κατά τον χρόνο εκτέλεσης από έναν πυρήνα ο οποίος έχει φορτωμένο έναν διερμηνευτή SPIN, ενώ ο κώδικας που γράφεται σε Assembly εκτελείται στην αρχική του μορφή άμεσα από έναν πυρήνα. Κάθε εφαρμογή για τον εν λόγω μικροελεγκτή πρέπει να περιέχει τουλάχιστον κώδικα σε SPIN. Δεν είναι δυνατόν να γραφεί ο κώδικας μόνο σε Assembly. Το αντίθετο ωστόσο μπορεί να ισχύει. Δηλαδή να γραφεί ένα πρόγραμμα μόνο σε SPIN. O διερμηνευτής SPIN φορτώνεται στο 3ο βήμα της διαδικασίας εκκίνησης που είδαμε παραπάνω. Μόλις ολοκληρωθεί η διαδικασία της εκκίνησης και μια εφαρμογή τρέχει στον 1ο πυρήνα Cog 0, όλες οι άλλες λειτουργίες που θα λάβουν χώρα από δω και στο εξής ορίζονται μέσα από τον κώδικα. Η εφαρμογή ενός χρήστη μπορεί να έχει τον πλήρη έλεγχο στο εσωτερικό ρολόι του μικροελεγκτή, την χρήση των ακροδεκτών I/O, στις τιμές των καταχωρητών και των αριθμό των πυρήνων που τρέχουν μια δεδομένη στιγμή.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

Διαδικασία Τερματισμού (Power Off)

Όταν ο Propeller τίθεται σε κατάσταση απενεργοποίησης (shutdown), το εσωτερικό του ρολόι σταματά, προκαλώντας έτσι την απενεργοποίηση όλων των ενεργών πυρήνων και όλοι οι ακροδέκτες να τεθούν ως Είσοδοι. Για να έρθει σε αυτή την κατάσταση ο Μικροελεγκτής προϋποθέτει να γίνει ένα από τα τρία παρακάτω γεγονότα:

1) Η τάση VDD  να πέσει κάτω από το κατώφλι του brown-out (≈2.7 vdc) όταν έχουμε ενεργό το κύκλωμα brown-out
2) Ο ακροδέκτης RESn να τεθεί σε κατάσταση χαμηλής τάσης
3) Ο κώδικας του χρήστη ζητά επανεκκίνηση με την εντολή REBOOT.

Η κατάσταση απενεργοποίησης σταματά να λαμβάνει χώρα όταν τα επίπεδα της τάσης ξεπεράσουν το κατώφλι brown-out και ο ακροδέκτης RESn ανέλθει σε κατάσταση υψηλής τάσης.

Επιστροφή στα ΠΕΡΙΕΧΟΜΕΝΑ

  • Αρχή
  • Εγχειρίδια
  • Ρrojects
  • Βίντεο
  • Φόρουμ

Copyright © 2009 - 2010