12. Διακοπές Interrupts (IRQ)

Σχετικά έγγραφα
Είναι το πρωτόκολλο RS232 που χρησιμοποιείται στις σειριακές θύρες COM με τη διαφορά ότι εκτελείται σε επίπεδο τάσεων TTL. 2

10. Πληκτρολόγιο matrix 4x4

10. Πληκτρολόγιο matrix 4x4

A 1. DDRA = 0b ; k = PINB; DDRC = 0xf0; PORTC = 0x0f;

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

WDT και Power Up timer

14. Timers/Counters prescaler Timer/Counter0 2 Timer/Counter0 Timer/Counter2 Timer/Counter1 Timer/Counter0 Timer/Counter1 Timer/Counter2

ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΛΕΓΚΤΩΝ

Ενσωµατωµένα Συστήµατα

15. Seven Segment Display. Πολυπλεγμένη λειτουργία

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ ΠΑΡΑΡΤΗΜΑ ΚΑΣΤΟΡΙΑΣ ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

ΕΙΣΑΓΩΓΗ. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

8051 Interrupt Ports. Name Alternate Function

ΗΜΥ 213. Εργαστήριο Οργάνωσης Η.Y. και Μικροεπεξεργαστών week 5. Διδάσκων: Δρ. Γιώργος Ζάγγουλος

ΠΕΡΙΓΡΑΦΗ ΥΛΙΚΟΥ AVR 1. ΕΙΣΑΓΩΓΗ 1.1 ΓΕΝΙΚΗ ΔΟΜΗ 1.2 ΟΙΚΟΓΕΝΕΙΕΣ 1.3 ΤΥΠΟΙ 1.4 ΕΡΓΑΛΕΙΑ

ΜΕΡΟΣ 1. Διακοπές (Interrupts)

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

γρηγορότερα. Αν θέλουμε να μηδενίσουμε όλα τα υπόλοιπα bit μπορούμε να χρησιμοποιήσουμε την εντολή:

ΠΕΡΙΕΧΟΜΕΝΑ ΚΕΦΑΛΑΙΟ I: ΕΙΣΑΓΩΓΗ ΣΤΑ ΗΛΕΚΤΡΟΝΙΚΑ

Έλεγχος με Μικροϋπολογιστές Εργαστήριο ενσωματωμένων συστημάτων

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

ΑΣΚΗΣΗ 2 (29 Νοεμβρίου 2016)

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Μικροεπεξεργαστές. Σημειώσεις Μαθήματος Υπεύθυνος: Δρ Άρης Παπακώστας,

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Αρχιτεκτονική υπολογιστών

Ενσωµατωµένα Υπολογιστικά Συστήµατα (Embedded Computer Systems)

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

Γνωριμία με το Arduino

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑ ΝΙΚΗΣ ΠΛ ΗΡΟΦΟΡΙΚΗΣ

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Εφαρμογές Σειριακής Επικοινωνίας

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

Προηγμένοι Μικροεπεξεργαστές. Φροντιστήριο 4 Real Mode Interrupts

Μάθημα 8: Επικοινωνία Συσκευών με τον Επεξεργαστή

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

ROBOARM II. β I f,/)! ο (^ U U- Πτυχιακή TEI ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ. Λογισμικό Εφαρμογής. Γαβαλάς Φώτιος Χαραλαμττίδης Νικόλαος

ΕΡΓΑΣΤΗΡΙΟ 4 ΕΙΣΑΓΩΓΗ ΣΤΟN ARDUINO: ΨΗΦΙΑΚΗ ΕΙΣΟΔΟΣ/ΕΞΟΔΟΣ

ΑΝΑLOG TO DIGITAL CONVERTER (ADC)

ΡΟΜΠΟΤΙΚΗ ΜΕ ARDUINO - ARDUINO ΚΑΙ ΗΧΟΣ I. Δημιουργός: Δρ.Αθανάσιος Μπαλαφούτης Επιβλέπων: Πετεινάτος Ηλίας Υποψήφιος Διδάκτωρ

ΠΕΡΙΦΕΡΕΙΑΚΑ ΤΟΥ PIC16F887

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Ολοκληρωμένα Κυκλώματα - Φθινόπωρο 2014 Γ. Δημητρακόπουλος. Εργαστηριακή άσκηση 2

2. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΤΩΝ ΘΥΡΩΝ ΕΙΣΟ ΟΥ/ΕΞΟ ΟΥ ΤΟΥ PIC16F877-ΑΡΙΘΜΗΤΙΚΕΣ ΕΝΤΟΛΕΣ

«ΜΙΚΡΟΫΠΟΛΟΓΙΣΤΕΣ» ΕΣΩΤΕΡΙΚΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

Μετρήσεις και συλλογή δεδομένων (Data acquisition) με μικροελεγκτές. Εισαγωγή στο Arduino. Ηλεκτρομηχανολογικός εξοπλισμός διεργασιών

Στοιχεία αρχιτεκτονικής μικροεπεξεργαστή

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εργαστήριο Δομής και Λειτουργίας Μικροϋπολογιστών. Βοήθημα εκτέλεσης εργαστηριακής άσκησης 5: Εξωτερικές διακοπές του 8051

ΜΙΚΡΟΕΛΕΓΚΤΗΣ PICAXE 18M2

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΚΑΤΑΧΩΡΗΤΕΣ ΟΛΙΣΘΗΤΕΣ

ΤΙΤΛΟΣ ΕΡΓΑΣΤΗΡΙΑΚΗΣ ΑΣΚΗΣΗΣ ΑΣΥΓΧΡΟΝΟΙ ΜΕΤΡΗΤΕΣ

ΑΡΧΙΤΕΚΤΟΝΙΚΗ HARDWARE ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Κεφάλαιο 3 Αρχιτεκτονική Ηλεκτρονικού Τμήματος (hardware) των Υπολογιστικών Συστημάτων ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

Ενεργοποίηση και ιαχείριση σηµάτων διακοπής

1. Περιβάλλον εργασίας παραδείγματα σύνταξης

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ψηφιακή Σχεδίαση

ΒΑΣΙΚΕΣ ΠΛΗΡΟΦΟΡΙΕΣ. Τίτλος Μαθήματος. Διαλέξεις - Θεωρητική Διδασκαλία, Εποπτευόμενο Εργαστήριο Επίδειξη, Μελέτες (Projects)

Βιβλιοθήκη για οθόνη LCD

Κεφάλαιο 4 Σύνδεση Μικροεπεξεργαστών και Μικροελεγκτών ΕΡΩΤΗΣΕΙΣ ΑΣΚΗΣΕΙΣ

ΗΜΥ 213 Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Σκοπόςτης Διάλεξης. Εφαρμογή των χρονιστών για την ακριβή μέτρηση του χρόνου με την υλοποίηση του προγράμματος Real_Time_Clock.

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

ΑΣΚΗΣΗ 3 ΑΣΚΗΣΗ 3. Μηχανικοί ιακόπτες. Αρχιτεκτονική Η/Υ ΗΜΟΣ ΜΠΟΛΑΝΑΚΗΣ

Ακολουθιακό κύκλωμα Η έξοδος του κυκλώματος εξαρτάται από τις τιμές εισόδου ΚΑΙ από την προηγούμενη κατάσταση του κυκλώματος

Η πρωτεύουσα διάταξη Α, για την αποστολή θερμοκρασιακών δεδομένων μέσω υπέρυθρης ζεύξης.

ΔΙΑΚΟΠΕΣ PΙC16F887(INTERRUPTS) Όταν σηματοδοτηθεί μια διακοπή στον PIC16F887, ο έλεγχος του προγράμματος μεταφέρεται στο τμήμα κώδικα που βρίσκεται

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ. Σηµειώσεις στο µάθηµα ΜΙΚΡΟΕΛΕΓΚΤΕΣ

ΕΓΧΕΙΡΙΔΙΟ ΛΕΙΤΟΥΡΓΙΑΣ ΗΛΕΚΤΡΟΜΗΧΑΝΙΚΗΣ ΒΑΛΒΙΔΑΣ RG.A3

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2013

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΗΛΕΚΤΡΟΝΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

«Σχεδιασμός Ολοκληρωμένων Κυκλωμάτων» Χειμερινό εξάμηνο Μηχανές Πεπερασμένων Καταστάσεων

Καταχωρητής STATUS. IRP: Bit επιλογής περιοχής μνήμης (Bank) για την έμμεση διευθυνσιοδότηση 1= Bank2, Bank3 0= Bank0, Bank1

Κεφάλαιο 3: Λειτουργικά Συστήµατα

Εφαρμογές Arduino Σεμινάριο Ηλεκτρονικού Τομέα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014

Ας ξεκινήσουμε. Macro-instructions. (Assembly level) Micro-instructions Main memory. (micro-code)

Ακολουθιακό κύκλωμα Η έξοδος του κυκλώματος εξαρτάται από τις τιμές εισόδου ΚΑΙ από την προηγούμενη κατάσταση του κυκλώματος

Εργαστηριακές ασκήσεις λογικών κυκλωμάτων 11 A/D-D/A

ΡΟΜΠΟΤΙΚΗ. ΕΡΓΑΣΙΑ ΠΑΝΩ ΣΤΗΝ ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΝΧΤ ΚΑΙ ΤΑ ΠΡΩΤΟΚΟΛΛΑ ΕΠΙΚΟΙΝΩΝΙΑΣ BLUETOOTH, I2C και serial communication

ΑΣΚΗΣΗ 1 (22 Νοεμβρίου 2017)

Ι ΑΣΚΩΝ ΚΑΘΗΓΗΤΗΣ: ΚΑΘΗΓΗΤΗΣ ΕΦΑΡΜΟΓΩΝ. ΤΕΙ ΥΤΙΚΗΣ ΜΑΚΕ ΟΝΙΑΣ

[Πληκτρολογήστε τον τίτλο του 2013 εγγράφου]

Μάθημα 3.8 Τεχνικές μεταφοράς δεδομένων Λειτουργία τακτικής σάρωσης (Polling) Λειτουργία Διακοπών DMA (Direct Memory Access)


ΗΜΥ 213 Εργαστήριο Οργάνωσης Ηλεκτρονικών Υπολογιστών και Μικροεπεξεργαστών

Μικροαρχιτεκτονική του LC3

ΠΛΕ- 027 Μικροεπεξεργαστές 7ο μάθημα: Αρχιτεκτονική πυρήνα: Πρόβλεψη διακλάδωσης, Εξαιρέσεις

Φύλλο εργασίας 9 - Αυτόνομο ρομποτικό όχημα αποφυγής εμποδίων

ΗΧ-GSM 02

7.1 Θεωρητική εισαγωγή

Αρχιτεκτονική υπολογιστών

ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΝΙΚΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ ΕΡΓΑΣΤΗΡΙΟ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΩΝ ΚΑΙ ΥΛΙΚΟΥ. ιπλωµατική Εργασία

ΗΧ-GSM02 rev1.2

ΕΝΟΤΗΤΑ 10: ΟΔΗΓΗΣΗ ΚΙΝΗΤΗΡΩΝ

Λειτουργικά Συστήματα Πραγματικού Χρόνου

8. Στοιχεία μνήμης. Οι δυο έξοδοι του FF είναι συμπληρωματικές σημειώνονται δε σαν. Όταν αναφερόμαστε στο FF εννοούμε πάντα την κανονική έξοδο Q.

Keyboard. Ασσιούρας Ιωάννης 5593 Βούκας Ιωάννης 5001 Πρωτονοτάριος Ιωάννης 6072

EasyBeeScale ΙΙ (V07.00) Οδηγίες χρήσης

Transcript:

2. Διακοπές Interrupts (IRQ) Πίνακας Ι. Χειρισμός διακοπών στον ATmega6. A/A Program address Source Vector Interrupt definition External Pin, Power-on Reset, Brown-outReset, Watchdog Reset, and JTAG AVR Reset $000 RESET 2 $002 INT0 EXT_INT0_vect External Interrupt Request 0 3 $004 INT EXT_INT_vect External Interrupt Request 4 $006 TIMER2 COMP TIM2_COMP_vect Timer/Counter2 Compare Match 5 $008 TIMER2 OVF TIM2_OVF_vect Timer/Counter2 Overflow 6 $00A TIMER CAPT TIM_CAPT_vect Timer/Counter Capture Event 7 $00C TIMER COMPA TIM_COMPA_vect Timer/Counter Compare Match A 8 $00E TIMER COMPB TIM_COMPB_vect Timer/Counter Compare Match B 9 $00 TIMER OVF TIM_OVF_vect Timer/Counter Overflow 0 $02 TIMER0 OVF TIM0_OVF_vect Timer/Counter0 Overflow $04 SPI, STC SPI_STC_vect Serial Transfer Complete 2 $06 USART, RXC USART, Rx USART_RXC_vect Complete USART, UDRE 3 $08 USART USART_UDRE_vect Data Register Empty USART, TXC 4 $0A USART, Tx USART_TXC_vect Complete 5 $0C ADC ADC_vect ADC Conversion Complete 6 $0E EE_RDY EE_RDY_vect EEPROM Ready 7 $020 ANA_COMP ANA_COMP_vect Analog Comparator 8 $022 TWI TWSI_vect Two-wire Serial Interface 9 $024 INT2 EXT_INT2_vect External Interrupt Request 2 20 $026 TIMER0 COMP TIM0_COMP_vect Timer/Counter0 Compare Match 2 $028 SPM_RDY SPM_RDY_vect Store Program Memory Ready Οι AVR υποστηρίζουν διακοπές κατά τις οποίες το πρόγραμμα διακόπτει την κανονική ροή του και εκτελεί κάποιες λειτουργίες που ορίζονται από το διάνυσμα της διακοπής. Οι διακοπές μπορεί να είναι είτε εξωτερικές είτε εσωτερικές. Οι εξωτερικές διακοπές προέρχονται από σήματα από εξωτερικές πηγές οι οποίες είναι συνδεδεμένες σε εισόδους του μικροελεγκτή ενώ οι εσωτερικές από τα εσωτερικά περιφερειακά του μικροελεγκτή. Κάθε διακοπή έχει ένα διάνυσμα στη μνήμη προγράμματος. Η διακοπή, το διάνυσμα και η διεύθυνσή του παρουσιάζονται στον Πίνακα Ι.Όσο μικρότερη είναι η διεύθυνση του Με τη διακοπή RESET το πρόγραμμα επανεκκινεί ενώ με τις υπόλοιπες συνεχίζει από το σημείο που σταμάτησε κατά την έναρξη της διακοπής.

διανύσματος, τόσο μεγαλύτερη είναι η προτεραιότητα της διακοπής. Από το διάνυσμα της διακοπής διευθυνσιοδοτείται ο Program Counter για να εκτελέσει τη ρουτίνα της διακοπής. Οι διακοπές έχουν το δικό τους bit ενεργοποίησης στον αντίστοιχο καταχωρητή κατάστασής τους, το οποίο πρέπει να γίνει προκειμένου να είναι διαθέσιμη να προκληθεί από την αιτία της και ένα γενικό bit για όλες τις διακοπές, το οποίο πρέπει και αυτό να γίνει. Αν υπάρξει η αιτία για μια διακοπή γίνεται η σημαία της διακοπής και αν είναι ενεργοποιημένες οι διακοπές από το γενικό bit, ξεκινάει να εκτελείται και καθαρίζεται η σημαία. Στη συνέχεια οι διακοπές απενεργοποιούνται 2 καθαρίζοντας το γενικό bit και ενεργοποιούνται ξανά όταν το πρόγραμμα βγει από τη διακοπή. Αν δεν είναι ενεργοποιημένες οι διακοπές, για οποιοδήποτε λόγο, τότε παραμένει σε αναμονή με τη σημαία της έως ότου ενεργοποιηθούν. Αν εν τω μεταξύ υπάρξουν αιτίες και για άλλες διακοπές, θα γίνουν οι σημαίες τους και θα είναι όλες σε αναμονή. Η διακοπή που θα εκτελεστεί πρώτη είναι αυτή με την υψηλότερη προτεραιότητα. Οι εξωτερικές διακοπές μπορούν να προγραμματιστούν ώστε να προκληθούν από μέτωπο παλμού ή από χαμηλή λογική κατάσταση. Οι διακοπές INT0 και INT όταν είναι ενεργοποιημένες ως διακοπές μετώπου παλμού, απαιτούν την παρουσία ρολογιού (I/O clock), ενώ όταν είναι ενεργοποιημένες ως διακοπές χαμηλής λογικής η διακοπή θα δρα όσο υπάρχει χαμηλή λογική στην είσοδο και δεν απαιτούν την παρουσία ρολογιού. Εκτελούνται ακόμα και αν ο μικροελεγκτής βρίσκεται σε sleep mode όπου δεν υπάρχει λειτουργία ρολογιού και για αυτό μπορούν να χρησιμοποιηθούν για να τον επαναφέρουν από αυτή την κατάσταση. Η διακοπή INT2 μπορεί να προγραμματιστεί μόνο ως διακοπή μετώπου παλμού και δρα ασύγχρονα. 206 Πορλιδάς Δημήτριος Στον καταχωρητή SREG το Bit 7 με ονομασία I: Global Interrupt Enable. 2 Αν θέλουμε να είναι ενεργοποιημένες ώστε να είναι δυνατό να δράσει μια άλλη διακοπή κατά τη διάρκεια εκτέλεσης των εντολών της διακοπής που έχει ήδη σε εξέλιξη, πρέπει να ενεργοποιήσουμε ξανά τις διακοπές με την εντολή sei(). 2

3. Rotary Encoder (ROT) Ο Rotary encoder είναι ένας μηχανικός κωδικοποιητής περιστροφής incremental encoder. Αποτελείται από ένα άξονα, ο οποίος περιστρέφεται και δύο διακόπτες οι οποίοι κλείνουν ανοίγουν με μια συγκεκριμένη σειρά που εξαρτάται από τη φορά περιστροφής του άξονα. Ο άξονας έχει ένα μηχανισμό με θέσεις συγκράτησης (detents) κατά την περιστροφή. Οι δύο διακόπτες (A, B) έχουν το ένα άκρο τους κοινό και το άλλο ελεύθερο. Το κοινό άκρο συνδέεται συνήθως στη γείωση και τα ελεύθερα άκρα Α και Β σε εισόδους του μικροελεγκτή με ενεργοποιημένες τις εσωτερικές pull up αντιστάσεις ή με συνδεδεμένες εξωτερικές. Συνήθως υπάρχει και ένας τρίτος ανεξάρτητος διακόπτης που κλείνει με πάτημα του άξονα και έχει δύο ελεύθερους ακροδέκτες, οι οποίοι συνδέονται με τον ίδιο τρόπο, ο ένας στη γείωση και ο άλλος στον μικροελεγκτή. Αν αρχίσουμε να περιστρέφουμε τον άξονα συνεχώς, οι δύο διακόπτες θα παράγουν τετραγωνικούς παλμούς με διαφορά φάσης. Όταν ο αριθμός των θέσεων συγκράτησης είναι ίσος με τον αριθμό των παλμών, τότε έχουμε τον έναν τύπο ROT (detents = pulses) όπου στις θέσεις συγκράτησης οι διακόπτες είναι πάντα ανοιχτοί. Όταν ο αριθμός των θέσεων συγκράτησης είναι διπλάσιος από τον αριθμό των Η άλλη κατηγορία μηχανικών κωδικοποιητών είναι absolute encoder. 3

παλμών, έχουμε το δεύτερο τύπο ROT (detents = 2*pulses) όπου στις θέσεις συγκράτησης εναλλάσσονται είτε και οι δύο ανοιχτοί είτε και οι δύο κλειστοί. Στο σχήμα παρουσιάζεται ο πρώτος τύπος ROT όπου δείχνονται οι θέσεις συγκράτησης. Για τον δεύτερο τύπο υπάρχουν και ενδιάμεσες θέσεις. Στις περισσότερες εφαρμογές η κίνηση του ROT αυξάνει ή ελαττώνει ένα μετρητή, ο οποίος χρησιμοποιείται στη συνέχεια σε κάποια λειτουργία. Το λογισμικό αναγνωρίζει την κίνηση του άξονα αν είναι κατά τη φορά δεικτών του ρολογιού (CW) ή αντίθετη (CCW). Η αναγνώριση γίνεται ελέγχοντας την κατάσταση των Α, Β. Ο πιο ασφαλής τρόπος είναι τα Α, Β να προκαλούν το καθένα εξωτερική διακοπή στον μικροελεγκτή και η ρουτίνα της διακοπής να διαχειρίζεται τη μεταβολή του μετρητή. Στη συνέχεια παρουσιάζεται ένα παράδειγμα χρήσης ROT γραμμένο σε γλώσσα προγραμματισμού C: #include <avr/interrupt.h> volatile int i; // Has to be "volatile" if other routine than ISR(INTx_vect) affects "regbin" void InitROT (void) MCUCR = (<<ISC0); MCUCR = (<<ISC); GICR = (3<<6); sei(); DDRD &= ~((<<2) (<<3)); PORTD = (3<<PORTD2); // Start up, initialization routine // Interrupt by the falling edge INT0 // Interrupt by the falling edge INT // Enable INT0, INT interrupt // Enable interrupts // Port D, D2 inputs // Port D, D2 Enable pull up ISR(INT0_vect) //INT0, PD2 Rot A, CW Increase, start moving (A->0, B=) //sei(); // Enable interrupts (if necessary) //cli(); // Disable interrupts (if necessary) while (!(bit_is_set(pind,2))); // A=0 if ((bit_is_set(pind,2)) && (!(bit_is_set(pind,3)))) // A=, B=0 i++; // Increase while (!(bit_is_set(pind,3))); // B=0 _delay_ms() ISR(INT_vect) //INT, PD3 Rot B, CCW Decrease, start moving (B->0, A=) //sei(); // Enable interrupts (if necessary) //cli(); // Disable interrupts (if necessary) while (!(bit_is_set(pind,3))); // B=0 if ((bit_is_set(pind,3)) && (!(bit_is_set(pind,2)))) // B=, A=0 i--; // Decrease while (!(bit_is_set(pind,2))); // A=0 4

Οι έξοδοι Α, Β του ROT είναι συνδεδεμένοι στις εισόδους INT0, INT (PD2, PD3) του μικροελεγκτή. Η βιβλιοθήκη avr/interrupt είναι απαραίτητη για τη λειτουργία των διακοπών και η μεταβλητή i πρέπει να είναι volatile αν θέλουμε να υπάρχει δυνατότητα να αλλάξει η τιμή της και από άλλες ρουτίνες. Η ρουτίνα InitROT(void) ενεργοποιεί τις διακοπές στο κατερχόμενο μέτωπο και προγραμματίζει τα PD2, PD3 εισόδους με ενεργοποιημένες τις εσωτερικές pull up αντιστάσεις. Οι δύο επόμενες ρουτίνες, ISR(INT0_vect) και ISR(INT_vect), εκτελούνται με την αντίστοιχη διακοπή. Αν περιστρέψουμε τον άξονα κάποιο από τα Α, Β θα περάσει πρώτο σε λογικό 0 και το κατερχόμενο μέτωπο θα προκαλέσει τη διακοπή INT0 ή INT ανάλογα με τη φορά περιστροφής. Αν το Α προκαλέσει τη διακοπή αρχίζουν να εκτελούνται οι εντολές της ρουτίνας ISR(INT0_vect). Σε περίπτωση που θέλουμε να υπάρχει δυνατότητα κάποια άλλη διακοπή να εμπλακεί μπορούμε να ενεργοποιήσουμε τις διακοπές (στο παράδειγμα η εντολή είναι σε σχόλιο). Εκτελείται αρχικά μια καθυστέρηση για τους παρασιτικούς παλμούς του διακόπτη και στη συνέχεια το πρόγραμμα παραμένει στη while για όσο το Α βρίσκεται σε λογικό 0. Καθώς συνεχίζει να περιστρέφεται ο άξονας το Β θα περάσει σε λογικό 0 και αυτό πριν το Α περάσει σε λογικό ξανά. Όταν το Α περάσει σε λογικό το πρόγραμμα βγαίνει από τη while και εκτελείται μια καθυστέρηση για τους παρασιτικούς παλμούς. Αν το Α είναι σε λογικό και το Β σε λογικό 0 επιβεβαιώνεται τότε η φορά περιστροφής CW και αυξάνει ο μετρητής i. Το πρόγραμμα περιμένει να περάσει και το Β σε λογικό, εκτελείται μια καθυστέρηση για τους παρασιτικούς παλμούς, ενεργοποιούνται ξανά οι διακοπές αν είχαν απενεργοποιηθεί και βγαίνει από τη ρουτίνα διακοπής δίνοντας τον έλεγχο στο κυρίως πρόγραμμα. Αν η περιστροφή είναι αντίθετη (CCW), το Β θα προκαλέσει τη διακοπή INT και θα αρχίσει να εκτελείται η ρουτίνα ISR(INT_vect), η οποία εκτελεί ίδιες εντολές που όμως το Α βρίσκεται στη θέση του Β και το αντίθετο και ελαττώνει τον μετρητή i. 206 Πορλιδάς Δημήτριος 5