ΑΣΚΗΣΗ 2 ίοδοι Εκποµπής Φωτός
Σκοπός της άσκησης Εξαγωγή δεδοµένων στο περιβάλλον µέσω LED (Light Emitter Diode) ιασύνδεση LED Έλεγχος κατάστασης LED Χρόνος εκτέλεσης εντολών της MCU Υλοποίηση τεχνητής καθυστέρησης Ανάπτυξη & χρήση υπορουτίνας
Πρόβληµα Στον ακροδέκτη PTD4 του µικροελεγκτή είναι συνδεδεµένο ένα led. Να γραφεί πρόγραµµα που θα ανάβει το led και θα το διατηρεί αναµµένο για τη χρονική διάρκεια του ενός δευτερολέπτου και στη συνέχεια να σβήνει το led και να το διατηρεί στην κατάσταση αυτή για τον ίδιο χρόνο. Η διαδικασία αυτή να εκτελείται αενάως.
Χαρακτηριστικά LED Σύµβολο LED Επαφή p-n Εκποµπή φωτός κατά την ορθή πόλωση Εκποµπή στο ορατό ή υπέρυθρο Κόκκινο, πράσινο, πορτοκαλί, κ.ά. Ένταση φωτός συνάρτηση ρεύµατος Τυπικές Χαρακτηριστικές LED I LED min =10mA V Th =1,5V
Συνδεσµολογία LED VDD R PTX MCU R PTX MCU Θετικής λογικής Αρνητικής λογικής
Υπολογισµός της R VLED VDD V = V + V DD R LED V V = I R I R DD LED R = I LED VR IR R R = V I DD LED LED V R typical : 330Ω / 470Ω
Κύκλωµα άσκησης PTD4 MCU R 470R
Κύκλος µηχανής FEXT=20MHz Clk FOP= 5MHz PTD4 MCU R T OP =1/F OP =200nS Κύκλος Μηχανής = 0,2uS Για Delay 1s 5.000.000 Κύκλοι Μηχανής
Καθυστέρηση µε χρήση µετρητή (RAM) Μέγιστη τιµή µετρητή = 255 10 MEMORY MAP $0040 1 1 1 1 1 1 1 1 I/O REGISTER 64 BYTES $0000 $003F Loop Μετρητής=255 10 RAM 512 BYTES... $0040 $023F Όχι Μείωση κατά 1 Μετρητής=0 FLASH MEMORY 32.256 BYTES... RESET VECTOR HIGH BYTE RESET VECTOR LOW BYTE $8000 $FDFF $FFFE $FFFF Ναι
Η εντολή DBNZ Εντολή DBNZ (Decrement & Branch if Not Zero) Σύνταξη DBNZ ADRRESS, Ετικέτα Παράδειγµα DBNZ $0040,LOOP DBNZ COUNTER,LOOP Αποτέλεσµα Μειώνει κατά 1 µονάδα το περιεχόµενο µιας διεύθυνσης µνήµης και στέλνει τη ροή του προγράµµατος σε µια ετικέτα αν το αποτέλεσµα της µείωσης είναι 0
Η εντολή DBNZA Εντολή DBNZA (Decrement & Branch if Not Zero - Accumulator) Σύνταξη DBNZA Ετικέτα Παράδειγµα DBNZA LOOP Αποτέλεσµα Μειώνει κατά 1 µονάδα το περιεχόµενο του καταχωρητή Acc και στέλνει τη ροή του προγράµµατος σε µια ετικέτα αν το αποτέλεσµα της µείωσης είναι 0
Η εντολή DBNZX Εντολή Σύνταξη DBNZX (Decrement & Branch if Not Zero - IndeX) DBNZX Ετικέτα Παράδειγµα DBNZX LOOP Αποτέλεσµα Μειώνει κατά 1 µονάδα το περιεχόµενο του καταχωρητή IndeX και στέλνει τη ροή του προγράµµατος σε µια ετικέτα αν το αποτέλεσµα της µείωσης είναι 0
Ηεντολές DEC, DECA, DECX Εντολή DEC (DECrement) DECA (DECrement Accumulator) DECX (DECrement index register) Σύνταξη DEC ADRRESS DECA DECX Παράδειγµα DEC $0040 DEC COUNTER Αποτέλεσµα Μειώνει κατά 1 µονάδα το περιεχόµενο µιας διεύθυνσης µνήµης
Η εντολές INC, INCA, INCX Εντολή INC (INCrement) INCA (INCrement Accumulator) INCX (INCrement index register) Σύνταξη INC ADRRESS INCA INCX Παράδειγµα INC $0040 INC COUNTER Αποτέλεσµα Αυξάνει κατά 1 µονάδα το περιεχόµενο µιας διεύθυνσης µνήµης
Η εντολές BNE, BEQ Εντολή BNE (Branch if Not Equal) BEQ (Branch if Equal) Σύνταξη BNE Ετικέτα BEQ Ετικέτα Παράδειγµα BNE DELAY.LOOP BEQ MAIN.LOOP Αποτέλεσµα Μεταπήδηση στο σηµείο του προγράµµατος που δείχνει η ετικέτα εφόσον η ισχύει η συνθήκη 0 ή =0 αντίστοιχα (zero flag)
Μέγιστη καθυστέρηση µε χρήση ενός µετρητή Εντολές προγράµµατος Κ.Μ. t(µs) MOV #!255,COUNTER1 4 0,8 LOOP DBNZ COUNTER,LOOP 5 1 Loop Όχι Μετρητής=255 10 Μείωση κατά 1 Μετρητής=0 Ναι 0,2uS tdbnz = 5k 255 = 255uS k 0,2uS tmov = 4k = 0,8uS k t = t + t = 255,8uS Delay DBNZ MOV
Αύξηση του χρόνου καθυστέρησης Loop2 Μετρητής 2=y 10 MOV #!y,counter2 Loop1 Όχι Όχι Μετρητής 1=x 10 Μείωση κατά 1 του µετρητή 1 Μετρητής 1=0 Ναι Μείωση κατά 1 του µετρητή 2 Μετρητής 2=0 Ναι Loop2 MOV #!x,counter1 Loop1 DBNZ COUNTER1,Loop1 DBNZ COUNTER2,Loop2 ( x) t = t + t Delay DBNZ MOV 1 1 1 ( ) t = t + t y + t Delay Delay1 DBNZ MOV 2 2 2
Καθυστέρηση 1sec Μετρητής 3=z 10 Loop2 Μετρητής 2=y 10 Μείωση κατά 1 του µετρητή 3 Loop3 Loop1 Μετρητής 1=x 10 Μετρητής 3=0 Όχι Μείωση κατά 1 του µετρητή 1 Ναι Όχι Μετρητής 1=0 ΤΕΛΟΣ Ναι Μείωση κατά 1 του µετρητή 2 Όχι Μετρητής 2=0 Ναι
Υπολογισµός µετρητών 3 εξισώσεις, 3 αγνώστων d1 = (5 DBNZ c1) + 4 MOV c1 = d2 = (d1 + 5 DBNZ ) c2 + 4 MOV d = (d2 + 5 DBNZ ) c3 + 4 MOV d = 5.000.000 (Για Delay 1s 5.000.000k) c2 c3 = = 0, 255 0, 255 0,255 255 3 Συνδυασµοί
Υπολογισµός µε Mathematica (Για Delay 1s 4.999.999 κύκλοι)
Κώδικας καθυστέρησης 1 SEC MOV #!55,COUNTER3 LOAD.COUNTER2 MOV #!100,COUNTER2 LOAD.COUNTER1 MOV #!180,COUNTER1 DELAY.LOOP DBNZ COUNTER1,DELAY.LOOP DBNZ DBNZ COUNTER2,LOAD.COUNTER1 COUNTER3,LOAD.COUNTER2
ιάγραµµα ροής Αρχή Main Loop Ορισµός του ακροδέκτη PTD4 ως έξοδο Οδήγηση του ακροδέκτη PTD4 για την ενεργοποίηση του led Καθυστέρηση ενός sec Οδήγηση του ακροδέκτη PTD4 για την απενεργοποίηση του led BSET 4,PORTD.DIRECTION LOOP BSET 4,PORTD.DATA Κώδικας delay 1sec BCLR 4,PORTD.DATA Κώδικας delay 1sec JMP LOOP Καθυστέρηση ενός sec
Εντολή Οι εντολές JSR & RTS JSR (Jump to SubRoutine) RTS (ReTurn from Subroutine) Σύνταξη JSR Ετικέτα RTS (χωρίς όρισµα) Παράδειγµα JSR DELAY JSR LOOP RTS Αποτέλεσµα Η εντολή JSR χρησιµοποιείται για την κλήση µιας υπορουτίνας, ενώ η RTS για την επιστροφή µετά την κλήση της υπορουτίνας
ηµιουργία & κλήση υπορουτίνας BSET 4,PORTD.DIRECTION LOOP BSET 4,PORTD.DATA JSR DELAY.1SEC BCLR 4,PORTD.DATA JSR DELAY.1SEC JMP LOOP DELAY.1SEC MOV #!55,COUNTER3 LOAD.COUNTER2 MOV #!100,COUNTER2 LOAD.COUNTER1 MOV #!180,COUNTER1 DELAY.LOOP DBNZ COUNTER1,DELAY.LOOP DBNZ COUNTER2,LOAD.COUNTER1 DBNZ COUNTER3,LOAD.COUNTER2 RTS
Πρόγραµµα PORTD.DATA EQU $0003 PORTD.DIRECTION EQU $0007 Απαραίτητεs εντολές COUNTER1 EQU $0040 αρχικοποίησης του µc COUNTER2 EQU $0041 (ανάλυση σε επόµενη ενότητα) COUNTER3 EQU $0042 ROM.START EQU $8000 BSET 0,$001F RESET.VECTOR EQU $FFFE MOV #$1F,$003C ORG ROM.START BSET 4,PORTD.DIRECTION LOOP BSET 4,PORTD.DATA JSR DELAY.1SEC BCLR 4,PORTD.DATA JSR DELAY.1SEC JMP LOOP DELAY.1SEC MOV #!55,COUNTER3 LOAD.COUNTER2 MOV #!100,COUNTER2 LOAD.COUNTER1 MOV #!180,COUNTER1 DELAY.LOOP DBNZ COUNTER1,DELAY.LOOP DBNZ COUNTER2,LOAD.COUNTER1 DBNZ COUNTER3,LOAD.COUNTER2 RTS ORG FDB RESET.VECTOR ROM.START
Ανακεφαλαίωση Κύκλος µηχανής Τεχνητή καθυστέρηση µε µετρητή Χρήση της µνήµης RAM Εντολή DBNZ Μεγάλες καθυστερήσεις µε αρκετούς µετρητές Υπολογισµός τιµής µετρητών Εντολές JSR & RTS ηµιουργία & κλήση υπορουτίνας Delay.1sec
Εργασία στους Η/Υ Συγγραφή του προγράµµατος Προσοµοίωση του κώδικα Προγραµµατισµός του µc Αφαίρεση της χρονοκαθυστέρησης από το πρόγραµµα Επαναπρογραµµατισµός του µc Παρατηρήσεις στη λειτουργία του κυκλώµατος
Εργασία για το σπίτι Στους ακροδέκτες PTD4, PTD5 του µc είναι συνδεδεµένα 2 led ένα κόκκινο και ένα πράσινο αντίστοιχα. Να γραφεί πρόγραµµα που θα προσοµοιώνει τα σήµατα ενός φωτεινού σηµατοδότη για τους πεζούς. Αναλυτικά, το φανάρι των αυτοκινήτων θα ανάβει για 10 sec, έπειταθασβήνεικαιθα ανάβει το φανάρι των πεζών για 7 sec. Η διαδικασία αυτή να επαναλαµβάνεται συνεχώς. Να βρεθεί τρόπος επίλυσης του προβλήµατος χωρίς να γίνεται χρήση τριών διαφορετικών υπορουτίνων καθυστέρησης µέσα στο πρόγραµµα.