Μετάβαση στο περιεχόμενο

Συστήματα Μικροϋπολογιστών — 2022

2022.docx

1ο θέμα να σχεδιασετε και να περιγραψετε την εντολή LD C 19H με 8 bit address bus , 16 bit data bus , Rom I/0 = rom address bus νομίζω

2ο θέμα Να σχεδιάσετε και να εξηγήσετε τον κύκλο της εντολής ~NMI

3ο θέμα να περιγράψετε πως κάνουμε επανεκίνιση σε έναν μικροελενκτή με εξωτερική λογική

4ο θέμα Σχεδιάστε και περιγράψτε τη λειτουργία του prescaler στον μικροελενκτή ATiny 2313

5ο θέμα Μια τράπεζα έχει σαν σύστημα συναγερμού 2 βιομετρικούς αισθητήρες , έναν για ενεργοποίηση του συναγερμού και ένα για απενεργοποίηση. Να σχεδιάσετε το σύστημα να γράψετε τη λειτουργία του (κωδικας) και να την εξηγήσετε αναλυτικά

Επιπλέον πηγές χωρίς μεταγραφή εδώ (λύσεις → 2022.solutions.md, ή διπλότυπες φωτογραφίες της ίδιας σελίδας): ../other/2023-02-01_163612.png

Λύσεις (⚪ AI, μη επαληθευμένο)

Κατάσταση: ⚪ AI, μη επαληθευμένο Πηγή: λύσεις AI (antigravity-gemini, gemini-3.7-flash, sonnet), ανεξάρτητη επανάληψη και αντιπαραβολή· καμία δεν έχει ελεγχθεί από άνθρωπο

Προσοχή

Λύση από AI — ελέγξτε την· δεν έχει επαληθευτεί από άνθρωπο. Η ένδειξη «δύο λύσεις συμφωνούν» δεν σημαίνει ότι η απάντηση είναι σωστή.

AI λύσεις — 2022

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

Θέμα 1

Αξιοπιστία: λύθηκε με βάση τις φωτογραφίες του θέματος· μία λύση AI

Στην εικόνα 2023-02-01_163612.png (και στο 2022.docx) καταγράφεται: «1ο θέμα να σχεδιασετε και να περιγραψετε την εντολή LD C 19H με 8 bit address bus, 16 bit data bus, Rom I/0 = rom address bus νομίζω».

Πρόκειται για κλασική ερώτηση χρονοδιαγράμματος και περιγραφής εκτέλεσης εντολής άμεσης φόρτωσης 8-bit σταθεράς σε καταχωρητή στον επεξεργαστή Z80 (κατ' αντιστοιχία με την εντολή LD E, A5H των διαφανειών του μαθήματος).

Περιγραφή και Ανάλυση της εντολής LD C, 19H

Η εντολή LD C, 19H φορτώνει την άμεση τιμή 19H στον 8-bit καταχωρητή C. - Κωδικός εντολής (Opcode): 0EH (στο Z80: μορφή 00 rrr 110, όπου για τον καταχωρητή C είναι rrr = 001, άρα 00001110b = 0EH). - Άμεσο όρισμα (Operand): 19H. - Μέγεθος εντολής: 2 bytes (0EH, 19H). - Κύκλοι μηχανής: Απαιτούνται 2 κύκλοι μηχανής συνολικής διάρκειας 7 περιόδων ρολογιού (7 T-states = 4T + 3T).


1. Κύκλος Μηχανής M1: Προσκόμιση Εντολής (Opcode Fetch — 4T: T1, T2, T3, T4)

  • Κύκλος T1:
  • Το σήμα \(\overline{M1}\) ενεργοποιείται (χαμηλή στάθμη), δηλώνοντας ότι ο κύκλος αφορά προσκόμιση κωδικού εντολής.
  • Το περιεχόμενο του απαριθμητή προγράμματος (PC) τοποθετείται στον δίαυλο διευθύνσεων (Address Bus).
  • Σταθεροποιείται η διεύθυνση και μισό κύκλο αργότερα ενεργοποιείται το σήμα \(\overline{MREQ}\) (έλεγχος μνήμης).
  • Ενεργοποιείται το σήμα ανάγνωσης \(\overline{RD}\).
  • Κύκλος T2:
  • Η μνήμη αποκρίνεται τοποθετώντας τον κωδικό της εντολής (0EH) στον δίαυλο δεδομένων (Data Bus).
  • Κύκλος T3:
  • Στη θετική ακμή του ρολογιού του T3, η CPU δειγματοληπτεί τον κωδικό 0EH από τον δίαυλο δεδομένων.
  • Απενεργοποιούνται τα σήματα \(\overline{RD}\) και \(\overline{MREQ}\).
  • Ο PC αυξάνεται κατά 1 (\(\text{PC} \leftarrow \text{PC} + 1\)).
  • Κατά τη διάρκεια των T3 και T4, η CPU εκτελεί εσωτερικά την αποκωδικοποίηση της εντολής και παράλληλα παράγει κύκλο ανανέωσης δυναμικών μνημών (DRAM Refresh): ενεργοποιείται το σήμα \(\overline{RFSH}\) σε συνδυασμό με το \(\overline{MREQ}\), και στα χαμηλά 7 bits του διαύλου διευθύνσεων τοποθετείται ο καταχωρητής ανανέωσης \(R\).
  • Κύκλος T4:
  • Ολοκληρώνεται η ανανέωση και η αποκωδικοποίηση του opcode (LD C, n).

2. Κύκλος Μηχανής M2: Ανάγνωση Δεδομένου από τη Μνήμη (Memory Read — 3T: T1, T2, T3)

  • Κύκλος T1:
  • Ο αυξημένος PC τοποθετείται στον δίαυλο διευθύνσεων, δείχνοντας τη θέση της άμεσης σταθεράς 19H.
  • Το σήμα \(\overline{M1}\) παραμένει ανενεργό (υψηλή στάθμη).
  • Ενεργοποιούνται τα σήματα \(\overline{MREQ}\) και \(\overline{RD}\).
  • Κύκλος T2:
  • Η μνήμη τοποθετεί το byte δεδομένου (19H) στον δίαυλο δεδομένων.
  • Κύκλος T3:
  • Στη θετική ακμή του T3, η CPU διαβάζει την τιμή 19H από τον δίαυλο δεδομένων και την αποθηκεύει στον καταχωρητή C.
  • Απενεργοποιούνται τα σήματα \(\overline{RD}\) και \(\overline{MREQ}\).
  • Ο PC αυξάνεται κατά 1 (\(\text{PC} \leftarrow \text{PC} + 1\)).

Χρονοδιάγραμμα Σημάτων (Timing Diagram)

Σήμα         | T1   T2   T3   T4   | T1   T2   T3   |
-------------------------------------------------------
CLK          | _/¯\_/¯\_/¯\_/¯\_/¯\ | _/¯\_/¯\_/¯\_/¯\ |
             | <---- Κύκλος M1 ----> | <-- Κύκλος M2 --> |
             |                      |                  |
Address Bus  |===== PC =====|== R ==|==== PC+1 ====|   |
             |                      |                  |
/M1          |¯\___________/¯¯¯¯¯¯¯¯|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
             |                      |                  |
/MREQ        |¯¯¯\_______/¯¯\____/¯¯|¯¯¯\_______/¯¯¯¯¯¯|
             |                      |                  |
/RD          |¯¯¯\_______/¯¯¯¯¯¯¯¯¯¯|¯¯¯\_______/¯¯¯¯¯¯|
             |                      |                  |
/RFSH        |¯¯¯¯¯¯¯¯¯¯¯\_______/¯¯|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|
             |                      |                  |
Data Bus     |------|=== 0EH ===|---|------|=== 19H ===|
             |      (Opcode Fetch)  |      (Operand)   |

(Σημείωση: Στην ανάκληση φοιτητή αναφέρεται παραλλαγή με δίαυλο 8-bit/16-bit ή σύνδεση ROM. Σε οποιαδήποτε διαμόρφωση του συστήματος, τα σήματα ελέγχου \(\overline{MREQ}, \overline{RD}, \overline{M1}\) και η ακολουθία M1 (4T) + M2 (3T) παραμένουν τα θεμελιώδη σήματα προσκόμισης και ανάγνωσης του επεξεργαστή).

Θέμα 2

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια

Κύκλος αναγνώρισης \(\overline{NMI}\) στο Z80 (11 T = 5 + 3 + 3): - Η \(\overline{NMI}\) είναι ευαίσθητη σε πτώση ακμής, δεν μπορεί να απενεργοποιηθεί και δεν περιμένει το IFF1. Ο CPU την δειγματοληπτεί στο τέλος της τρέχουσας εντολής και την «κλειδώνει» εσωτερικά. - IFF1 ← 0 (IFF2 διατηρεί την προηγούμενη τιμή του IFF1, για να την ξαναφορτώσει η RETN). - M1 (5 T): όπως ο κύκλος προσκόμισης, αλλά το byte που διαβάζεται αγνοείται (εκτελείται σαν NOP) και το PC δεν αυξάνεται· είναι 5 T αντί για 4. Το \(\overline{IORQ}\) δεν ενεργοποιείται (σε αντίθεση με την INT), δεν δίνεται διάνυσμα. - M2 (3 T): εγγραφή PCH στη στοίβα (SP←SP−1, \(\overline{MREQ}\), \(\overline{WR}\)). - M3 (3 T): εγγραφή PCL (SP←SP−1). - PC ← 0066H: εκτελείται η ρουτίνα NMI και τελειώνει με RETN (IFF1←IFF2).

Σχέδιο: κυματομορφές CLK, A15–A0 (PC, μετά SP−1, SP−2), \(\overline{M1}\) (ενεργό μόνο στον πρώτο κύκλο), \(\overline{MREQ}\), \(\overline{RD}\) (στον M1), \(\overline{WR}\) (στους M2, M3), D7–D0 (PCH, PCL). Οι ακριβείς ακμές είναι από μνήμη.

Θέμα 3

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια

Επανεκκίνηση (reset) μικροελεγκτή με εξωτερική λογική, π.χ. ATtiny2313: ο ακροδέκτης \(\overline{RESET}\) είναι ενεργός στο 0. Αρκεί παλμός χαμηλής στάθμης με διάρκεια μεγαλύτερη του ελάχιστου (τάξης μsec) για να μηδενιστεί ο μετρητής προγράμματος και οι καταχωρητές I/O και να ξεκινήσει η εκτέλεση από το διάνυσμα reset (0000H). - Πρόσφορο κύκλωμα: αντίσταση ανύψωσης (π.χ. 10 kΩ) από \(\overline{RESET}\) σε VCC, κουμπί μεταξύ \(\overline{RESET}\) και GND (χειροκίνητο reset), πυκνωτής (π.χ. 100 nF) για την απόσβεση αναπηδήσεων / RC power-on reset. - Με εξωτερική λογική: η έξοδος πύλης ή άλλου ελεγκτή (open-collector/open-drain) οδηγεί τη γραμμή σε 0 και την αφήνει με την αντίσταση ανύψωσης ώστε να γίνει επανεκκίνηση προγραμματισμένα· ή ειδικό κύκλωμα επίβλεψης τάσης (supervisor) που δίνει παλμό όταν η VCC πέσει. - Άλλες πηγές reset στο ATtiny2313: power-on, brown-out, watchdog (εσωτερικά).

Θέμα 4

Αξιοπιστία: δύο ανεξάρτητες λύσεις συμφωνούν · εμπιστοσύνη λύτη: μέτρια

Prescaler στο ATtiny2313 (Timer/Counter0, αντίστοιχα Timer1): ένας ελεύθερος διαιρέτης συχνότητας (μετρητής 10 bit) που διαιρεί το ρολόι I/O (\(clk_{I/O}\)) και δίνει στον timer το ρολόι \(clk_{T}\) = \(f_{clk}/N\). Η επιλογή γίνεται με τα bit CS02:0 του TCCR0B:

CS02:0 ρολόι timer
000 σταματημένος
001 \(clk/1\)
010 \(clk/8\)
011 \(clk/64\)
100 \(clk/256\)
101 \(clk/1024\)
110 / 111 εξωτερική T0, πτώση / άνοδος

Σχέδιο: oscillator → μετρητής 10 bit με εξόδους /8, /64, /256, /1024 → πολυπλέκτης (MUX) ελεγχόμενος από CS0 → είσοδος ρολογιού του TCNT0 (8 bit) → σύγκριση/υπερχείλιση (OCR0, TOV0). Παράδειγμα: 8 MHz, N=64 → 125 kHz, περίοδος 8 μs· υπερχείλιση 8-bit κάθε 256·8 μs = 2,048 ms.

Θέμα 5

Αξιοπιστία: 2 από 3 ανεξάρτητες λύσεις συμφωνούν (η άλλη διαφωνούσε) · εμπιστοσύνη λύτη: υψηλή

1. Σχεδίαση Συστήματος

Χρησιμοποιούμε έναν μικροελεγκτή AVR (π.χ. ATtiny2313): - Αισθητήρας Ενεργοποίησης (Sensor ARM): Συνδέεται στην ακίδα PD2 (εξωτερική διακοπή INT0). Όταν αναγνωριστεί έγκυρο βιομετρικό στοιχείο, δίνει παλμό υψηλής στάθμης ή ενεργοποιεί τη γραμμή σε λογικό '0' (active low με pull-up). - Αισθητήρας Απενεργοποίησης (Sensor DISARM): Συνδέεται στην ακίδα PD3 (εξωτερική διακοπή INT1), active low. - Έξοδος Συναγερμού (Σειρήνα / Relay): Συνδέεται στην ακίδα PB0 (1 = Ενεργοποιημένη σειρήνα, 0 = Απενεργοποιημένη). - Ενδεικτικό LED Κατάστασης (Status LED): Συνδέεται στην ακίδα PB1 (1 = Σύστημα Οπλισμένο, 0 = Σύστημα Αφοπλισμένο).

                  +-------------------+
                  |    ATtiny2313     |
[Αισθητήρας 1]--->| PD2 (INT0)    PB0 |---> Relay / Σειρήνα
  (Ενεργοποίηση)  |                   |
                  |                   |
[Αισθητήρας 2]--->| PD3 (INT1)    PB1 |---> LED Κατάστασης (Armed)
 (Απενεργοποίηση) |                   |
                  +-------------------+

2. Λειτουργία του Συστήματος

  1. Το σύστημα αρχικοποιεί τις εισόδους με εσωτερικές αντιστάσεις pull-up και ρυθμίζει τις εξωτερικές διακοπές INT0 και INT1 να ενεργοποιούνται με κατερχόμενη ακμή (falling edge).
  2. Μία μεταβλητή κατάστασης system_armed (flag) καταγράφει αν ο συναγερμός είναι οπλισμένος:
  3. Όταν ενεργοποιηθεί ο Αισθητήρας 1 (INT0), το σύστημα τίθεται σε κατάσταση Οπλισμένο (system_armed = 1), ανάβει το LED (PB1 = 1) και ενεργοποιείται η σειρήνα/συναγερμός (PB0 = 1).
  4. Όταν ενεργοποιηθεί ο Αισθητήρας 2 (INT1), το σύστημα τίθεται σε κατάσταση Αφοπλισμένο (system_armed = 0), σβήνει το LED (PB1 = 0) και απενεργοποιείται η σειρήνα (PB0 = 0).

3. Κώδικας (AVR C)

#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>

#define ALARM_PIN   PB0   // Έξοδος σειρήνας
#define STATUS_LED  PB1   // Έξοδος κατάστασης οπλισμού

volatile uint8_t system_armed = 0;

// Διακοπή από Αισθητήρα 1: Ενεργοποίηση / Όπλιση
ISR(INT0_vect) {
    system_armed = 1;
    PORTB |= (1 << STATUS_LED); // Ανάβει το LED όπλισης
    PORTB |= (1 << ALARM_PIN);  // Ενεργοποίηση σειρήνας
}

// Διακοπή από Αισθητήρα 2: Απενεργοποίηση / Αφόπλιση
ISR(INT1_vect) {
    system_armed = 0;
    PORTB &= ~(1 << STATUS_LED); // Σβήνει το LED όπλισης
    PORTB &= ~(1 << ALARM_PIN);  // Απενεργοποίηση σειρήνας
}

int main(void) {
    // Ρύθμιση PB0, PB1 ως εξόδων
    DDRB |= (1 << ALARM_PIN) | (1 << STATUS_LED);
    PORTB &= ~((1 << ALARM_PIN) | (1 << STATUS_LED)); // Αρχικά κλειστά

    // Ρύθμιση PD2 (INT0), PD3 (INT1) ως εισόδων με pull-up
    DDRD &= ~((1 << PD2) | (1 << PD3));
    PORTD |= (1 << PD2) | (1 << PD3);

    // Ρύθμιση εξωτερικών διακοπών για ενεργοποίηση σε κατερχόμενη ακμή (Falling Edge):
    // ISC01=1, ISC00=0 (για INT0) και ISC11=1, ISC10=0 (για INT1)
    MCUCR |= (1 << ISC01) | (1 << ISC11);
    MCUCR &= ~((1 << ISC00) | (1 << ISC10));

    // Ενεργοποίηση των διακοπών INT0 και INT1
    GIMSK |= (1 << INT0) | (1 << INT1);

    // Καθολική ενεργοποίηση διακοπών
    sei();

    while (1) {
        // Η λειτουργία εκτελείται πλήρως μέσω διακοπών (χαμηλή κατανάλωση)
    }

    return 0;
}

4. Εξήγηση Κώδικα

  • Αρχικοποίηση: Μέσω των καταχωρητών κατεύθυνσης DDRB και DDRD, ορίζονται οι ακίδες εισόδου/εξόδου. Οι ακίδες των αισθητήρων έχουν ενεργοποιημένες τις pull-up αντιστάσεις ώστε να βρίσκονται σε σταθερό δυναμικό High όταν οι αισθητήρες είναι αδρανείς.
  • Διακοπές (MCUCR, GIMSK): Χρησιμοποιούνται διακοπές ακμής ώστε κάθε πάτημα/ενεργοποίηση αισθητήρα να καταγράφεται ακριβώς μία φορά άμεσα, χωρίς καθυστερήσεις polling.
  • Ασφάλεια και Αξιοπιστία: Ο χειρισμός εντός των ρουτινών εξυπηρέτησης (ISR) εγγυάται ακαριαία απόκριση σε καταστάσεις ασφαλείας.

✔ Επιβεβαίωσε · ✖ Βρήκα λάθος


✖ Βρήκα λάθος στη μεταγραφή