Το προφίλ μας στο Google Plus
3

Κατασκευάστε έναν υπολογιστή, μέρος 2: Από τη θεωρία στην πλακέτα

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

O κόσμος των PC γεννήθηκε με την έλευση του επεξεργαστή 8088, που είχε σχεδιάσει το ισραηλινό παράρτημα της Intel. (Ναι, αυτό το παράρτημα υπήρχε από τότε κι αν δεν σας λέει τίποτα, έχετε υπόψη ότι πρόκειται για την ομάδα που σχεδίασε τις αρχιτεκτονικές Nehalem, Sandy Bridge και Ivy Bridge, ενώ συμμετείχε και στη σχεδίαση του Haswell.) Η μαμά εταιρεία ήθελε έναν επεξεργαστή παρόμοιο με τον 8086, ο οποίος θα μπορούσε να τοποθετηθεί σε φθηνά και πιο εμπορικά μηχανήματα. Ξέρετε πώς κατάφεραν να εξασφαλίσουν το μειωμένο κόστος; Ο 8086 ήταν ένας 16μπιτος επεξεργαστής με 16μπιτο data bus. Αυτό σημαίνει ότι μπορούσε να κάνει πράξεις με αριθμούς των 16 bits, ενώ αντάλλασσε δεδομένα με τα περιφερειακά του μέσα από έναν δίαυλο δεδομένων των 16 γραμμών. Ο σημαντικότερος λόγος για τον οποίο ο 8088 αποτελούσε μια φτηνή εναλλακτική επιλογή, ήταν το εύρος του data bus. O 8088 ήταν 16μπιτος –μπορούσε να χειριστεί αριθμούς των 16 bits –, αλλά επικοινωνούσε μέσω ενός διαύλου των 8 bits. Ως εκ τούτου, οι αντίστοιχες μητρικές διέθεταν μικρότερο κύκλωμα και ήταν φτηνότερες. Σωστά διαβάσατε: Τα συστήματα με τον 8088 ήταν φτηνότερα από εκείνα με τον 8086, γιατί οι μητρικές διέθεταν data bus με λιγότερες γραμμές και κατασκευάζονταν ευκολότερα.

Αυτή η ιστορία μπορεί να μοιάζει άσχετη με την υλοποίηση του δικού μας υπολογιστή, αλλά δεν είναι. Όταν σταματήσαμε να σκεφτόμαστε το ποια χαρακτηριστικά θα θέλαμε να έχει κι αρχίσαμε να σκεφτόμαστε το πώς θα κατασκευαστεί, φτάσαμε γρήγορα σε μια ενοχλητική διαπίστωση (Σ.τ.Ε. “a disturbing realization”, όπως λένε και στο Mayday): Η επικοινωνία των επιμέρους συστημάτων προϋπέθετε την παρουσία κάποιου διαύλου κι αυτός, με τη σειρά του, απαιτούσε πάρα πολλές κολλήσεις. Για παράδειγμα, ένας δίαυλος δεδομένων των 8bit 8 bits προϋποθέτει οκτώ γραμμές, που θα ταξιδεύουν από το ένα υποσύστημα στο άλλο. Αν πάνω σε αυτό το δίαυλο τοποθετούσαμε και τη μνήμη RAM του υπολογιστή, θα χρειαζόμασταν αυτομάτως έναν πρόσθετο δίαυλο για τη μεταφορά των διευθύνσεων. Για παράδειγμα, για την πλήρη προσπέλαση μιας μνήμης των 32kB απαιτούνται διευθύνσεις των 15 bits κι αυτό μεταφράζεται σ’ έναν δίαυλο διευθύνσεων με 15 γραμμές. Όπως αντιλαμβάνεστε, η προοπτική του να κάνουμε μερικές εκατοντάδες κολλήσεις δεν μας ενθουσίαζε καθόλου. Ακριβώς γι’ αυτό, σε μια προσπάθεια να περιορίσουμε τη χαμαλοδουλειά πήραμε κάποιες αποφάσεις που μείωναν δραστικά τους διαύλους και τις κολλήσεις.

Μικροελεγκτές και επεξεργαστές
Κάθε οικογένεια μικροελεγκτών στηρίζεται σε διαφορετική αρχιτεκτονική και το ίδιο ισχύει για τους επεξεργαστές. Μη νομίζετε όμως ότι αυτή η πλούσια διαφοροποίηση “θολώνει” τη διαχωριστική γραμμή ανάμεσα στις δύο ομάδες ολοκληρωμένων. Οι μικροελεγκτές διαθέτουν όλη την απαραίτητη υποδομή για να εκτελούν κώδικα, όπως ακριβώς και οι επεξεργαστές, αλλά δεν περιορίζονται σ’ αυτήν. Οι μικροελεγκτές ενσωματώνουν μόνιμο αποθηκευτικό χώρο για το εκάστοτε πρόγραμμα (flash), προσωρινή μνήμη για τα δεδομένα που θα χειρίζεται το πρόγραμμα (SRAM), καθώς και διάφορα άλλα περιφερειακά, όπως τα κυκλώματα σειριακής επικοινωνίας (UART και SPI), ο μετατροπέας ADC κ.ά. Ως εκ τούτου, μέσα σε κάθε μικροελεγκτή υπάρχει ένα data bus για τη μεταφορά δεδομένων μεταξύ των υποσυστημάτων και τουλάχιστον δύο address buses, για τον προσδιορισμό των διευθύνσεων σε κάθε τύπο μνήμης. Οι επεξεργαστές δεν ενσωματώνουν τίποτ’ απ’ όλα αυτά. Η προσωρινή μνήμη (RAM), ένα μόνιμο αποθηκευτικό μέσο για το BIOS (η flash του BIOS), τα υπόλοιπα αποθηκευτικά μέσα καθώς και τα περιφερειακά, αποτελούν ξεχωριστά υποσυστήματα και βρίσκονται περιμετρικά του επεξεργαστή.

Σχεδιαστικές επιλογές
Πριν ακόμα σχεδιάσουμε οποιοδήποτε κύκλωμα, ήμασταν σίγουροι ότι θα χρειαζόμασταν παραπάνω από έναν μικροελεγκτή. Το όλο σύστημα θα χαρακτηριζόταν από μεγάλη πολυπλοκότητα κι αυτό μας προκαλούσε ανασφάλεια. Κάπως έτσι, επηρεασμένοι κι από τη δομή των “κανονικών” υπολογιστών, αποφασίσαμε να χωρίσουμε την κατασκευή σε τρία τμήματα: Το κύκλωμα ήχου, το κύκλωμα γραφικών και ένα ακόμα, που θα διέθετε τον κεντρικό επεξεργαστή και κάποια βασικά “περιφερειακά”. Τα τρία κυκλώματα θα ήταν ανεξάρτητα, με την έννοια ότι το καθένα θα μπορούσε να επιτελέσει όλες τις λειτουργίες του χωρίς τη βοήθεια των άλλων. Παρ’ όλα αυτά, πριν καταπιαστούμε με τη σχεδίαση του καθενός, έπρεπε να λύσουμε ένα γενικότερο πρόβλημα: Πώς θα πετυχαίναμε την επικοινωνία τους;

Μετά από έναν επανέλεγχο της λίστας με τις δυνατότητες που θα θέλαμε να έχει ο υπολογιστής, καταλήξαμε σε μερικές σημαντικές αποφάσεις. Κατ’ αρχάς, το κύκλωμα με τον κεντρικό επεξεργαστή θα είχε το γενικό πρόσταγμα και θα καθόριζε τι πρέπει να κάνουν τα άλλα δύο και πότε. Η “κάρτα γραφικών” δεν θα μιλούσε ποτέ με την “κάρτα ήχου”, ούτε το ανάποδο. Για την ακρίβεια, αυτά τα δύο κυκλώματα δεν θα μπορούσαν να στείλουν δεδομένα σε κανέναν. Για την κεντρική μνήμη του συστήματος δεν θα χρησιμοποιούσαμε κάποιο ξεχωριστό τσιπάκι μνήμης. Θα αξιοποιούσαμε τη μνήμη SRAM του μικροελεγκτή που είχε το ρόλο του κεντρικού επεξεργαστή. Αναρωτιέστε τι σημασία έχουν όλα αυτά;

Εφόσον θα χρησιμοποιούσαμε 8μπιτους μικροελεγκτές, η επικοινωνία μεταξύ των υποσυστημάτων μπορούσε να επιτευχθεί άνετα με έναν 8μπιτο δίαυλο δεδομένων. Το γεγονός ότι η μνήμη RAM του υπολογιστή θα βρισκόταν μέσα σε έναν από τους μικροελεγκτές, μας απάλλασσε από ένα μεγάλο βραχνά: Την κατασκευή ενός πρόσθετου διαύλου για τη μεταφορά των διευθύνσεων (address bus). Επιπρόσθετα, καθώς μόνο το ένα υποσύστημα θα μπορούσε να στέλνει δεδομένα, δεν υπήρχε λόγος να κατασκευάσουμε κάποιο κύκλωμα “διαιτησίας” (bus arbitration), το οποίο θα ρύθμιζε πότε και ποιος χρησιμοποιεί τους διαύλους του συστήματος. Παρεμπιπτόντως, σε ό,τι αφορά τη χρήση των διαύλων, τα παλιά PC δεν στηρίζονταν μόνο στο κύκλωμα του bus arbitration. Παρόμοια αποστολή είχε και το κύκλωμα DMA (Direct memory Access), που επέτρεπε την πρόσβαση στη μνήμη του συστήματος χωρίς τη μεσολάβηση του κεντρικού επεξεργαστή. Η διαφορά μεταξύ των δύο έγκειται στο γεγονός ότι το DMA ρύθμιζε την πρόσβαση στους διαύλους για ένα μικρό σύνολο επίλεκτων υποσυστημάτων, ενώ το bus arbitration ήταν υπεύθυνο για τους πάντες. Ακόμα και το DMA, πριν επιτρέψει σε κάποιο υποσύστημα να χρησιμοποιήσει τους διαύλους, έπρεπε να ζητήσει (και να πάρει!) την άδεια του κυκλώματος bus arbitration. Τα συγκεκριμένα κυκλώματα εφαρμόζουν ένα σύνθετο πλέγμα κανόνων και είναι εύκολο να προκαλέσουν δυσλειτουργίες σε ολόκληρο το σύστημα. Ακριβώς γι’ αυτό, η δυνατότητα να αποφύγουμε την κατασκευή τους μας ανακούφισε όσο τίποτα.

Γενική διάρθρωση
Έχοντας κατασκευάσει και στο παρελθόν κύκλωμα γραφικών, γνωρίζαμε ότι θα χρειαζόμασταν ένα τσιπάκι μνήμης που θα λειτουργούσε ως video RAM (frame buffer). Μήπως έπρεπε τελικά να φτιάξουμε κι ένα address bus, που θα συνέδεε τον κεντρικό επεξεργαστή με τη συγκεκριμένη μνήμη; Η απάντηση ήταν, ευτυχώς, όχι. Τα περιεχόμενα της συγκεκριμένης μνήμης διαβάζονται πολλές φορές το δευτερόλεπτο κι αποστέλλονται στην οθόνη για το σχηματισμό της εικόνας. Η πρόσβαση σε αυτή τη μνήμη, για οποιαδήποτε άλλη εργασία, έρχεται σε δεύτερη μοίρα κι εξελίσσεται με αργό ρυθμό. Αν επιδιώκαμε την πρόσβαση του κεντρικού επεξεργαστή στη video RAM θα προκαλούσαμε πολλές κι αισθητές καθυστερήσεις στη λειτουργία ολόκληρου του συστήματος. Έτσι, αποφασίσαμε ότι μόνον ένας μικροελεγκτής θα είχε πρόσβαση στη VRAM: Εκείνος που θα έπαιζε το ρόλο της GPU. Μήπως τώρα αναρωτιέστε πώς ξεπερνιόταν αυτή η δυσκολία στους παλιούς υπολογιστές; Στα πολύ παλιά μηχανήματα συνέβαινε ό,τι και στο δικό μας: Η πρόσβαση στη μνήμη οθόνης επιτρεπόταν μόνο στο κύκλωμα γραφικών. Αυτή η κατάσταση άλλαξε όταν οι μνήμες dual ported έγιναν φτηνότερες και πιο προσιτές. Οι συγκεκριμένες μνήμες διαθέτουν δύο εισόδους/εξόδους, οι οποίες μπορούν να λειτουργούν ταυτόχρονα. Έτσι, την ίδια στιγμή που μεταφέρονται δεδομένα από κάποια περιοχή της μνήμης προς την οθόνη, ο επεξεργαστής μπορεί να διαβάζει ή να γράφει σε μια άλλη περιοχή.

Στην εικόνα 1 φαίνεται ένα γενικό διάγραμμα του συστήματος.

Tο σύστημα διαθέτει ένα data bus που συνδέει τα τρία βασικά υποσυστήματα, όπως επίσης τη GPU με τη VRAM. Αυτός ο πολλαπλός ρόλος επέβαλε το διαχωρισμό του σε δύο ανεξάρτητα τμήματα.

Εικόνα 1. Tο σύστημα διαθέτει ένα data bus που συνδέει τα τρία βασικά υποσυστήματα, όπως επίσης τη GPU με τη VRAM. Αυτός ο πολλαπλός ρόλος επέβαλε το διαχωρισμό του σε δύο ανεξάρτητα τμήματα.

Καθένα από τα κουτιά με τις ονομασίες CPU, APU και GPU αντιστοιχεί σε έναν μικροελεγκτή, ενώ τα πλαίσια με τις διακεκομμένες γραμμές αντιστοιχούν στα τρία επιμέρους κυκλώματα του υπολογιστή. Η “διασωλήνωση” με το κίτρινο χρώμα αποτελεί το data bus του υπολογιστή. Παρατηρήστε ότι μια περιοχή του συγκεκριμένου διαύλου χρησιμοποιείται και για την επικοινωνία της GPU με τη VRAM. Τελικά, καθώς ένα τμήμα του data bus έχει πολλαπλές χρήσεις, υποχρεωνόμαστε να το χωρίσουμε στα δύο. Αυτός είναι και ο λόγος που στην “είσοδο” του κυκλώματος γραφικών υπάρχει μια βαθμίδα απομόνωσης. Θα πούμε περισσότερα γι’ αυτή τη βαθμίδα, όταν φτάσουμε να εξετάσουμε το κύκλωμα γραφικών.

Η χαρά των Τρολς
Ο υπολογιστής μας έχει πολλές αρχιτεκτονικές διαφορές από τα παλιά PC και οι περισσότερες οφείλονται σε αυθαίρετες επιλογές που αποσκοπούσαν στην απλοποίηση του κυκλώματος. Οι όποιες ιδέες μας, όμως, στηρίχτηκαν στις πλούσιες δυνατότητες των μικροελεγκτών. Σε αυτό το σημείο θα μπορούσε να πάρει την πάσα ένα Τρολ και να ξεκινήσει μια αντιπαράθεση για την πλάκα του: Ποια κατηγορία ολοκληρωμένων είναι καλύτερη; Οι μικροελεγκτές ή οι επεξεργαστές; Για να αποκτήσει έστω και το παραμικρό νόημα αυτή η σύγκριση, πρέπει να περιοριστούμε στους παλιούς επεξεργαστές. Οι περισσότεροι θα έκαναν το κλασικό λάθος να στηριχτούν στα MHz. Θα έλεγαν ότι οι 8086, για παράδειγμα, χρονίζονταν το πολύ στα 8MHz κι επομένως είναι χειρότεροι, αφού οι AVR χρονίζονται έως και στα 20MHz. Κάποιοι πιο ψαγμένοι θα κατέληγαν στο ίδιο συμπέρασμα, μόνο και μόνο γιατί οι 8086 διέθεταν λιγότερες εντολές (117) από τους ATMEGA (131). Η αλήθεια όμως βρίσκεται πολύ μακριά από αυτούς τους αριθμούς. Σκεφτείτε το εξής: Αν αποφασίζαμε ότι ο υπολογιστής μας πρέπει να έχει 128KB RAM, θα χρησιμοποιούσαμε υποχρεωτικά κάποιο τσιπάκι μνήμης. Αυτή η διασύνδεση επιτυγχάνεται εύκολα, αλλά θα είχε δύο αρνητικές συνέπειες: Οι επιδόσεις του αντίστοιχου μικροελεγκτή θα μειώνονταν δραματικά και οι ακροδέκτες που θα περίσσευαν δεν θα αρκούσαν για τη σύνδεση στο data bus. Μήπως οι ATMEGA δεν είναι και τόσο ισχυροί τελικά; Τα Τρολς θα έκαναν μεγάλο γλέντι.

Κεντρική διεύθυνση
Στην εικόνα 2 φαίνεται το κύκλωμα της “μητρικής”, δηλαδή του κυκλώματος που φιλοξενεί τον κεντρικό επεξεργαστή.

Πάρα πολλές συνδέσεις --ειδικά όταν γίνονται με το κολλητήρι και πάνω σε μια διάτρητη πλακέτα--, αλλά τίποτα το ιδιαίτερο. Το κύκλωμα του 'κεντρικού επεξεργαστή', σε αντίθεση με ό,τι θα περίμενε κανείς, ήταν το πιο απλό.

Εικόνα 2. Πάρα πολλές συνδέσεις –ειδικά όταν γίνονται με το κολλητήρι και πάνω σε μια διάτρητη πλακέτα–, αλλά τίποτα το ιδιαίτερο. Το κύκλωμα του “κεντρικού επεξεργαστή”, σε αντίθεση με ό,τι θα περίμενε κανείς, ήταν το πιο απλό.

Εδώ μπορεί να σας κινήσει την περιέργεια η επιλογή του μικροελεγκτή ATMEGA644, που έχει πολλαπλάσιο κόστος από τον δημοφιλή ATMEGA328. Όπως αναφέραμε νωρίτερα, η μνήμη του μικροελεγκτή που βρίσκεται στο συγκεκριμένο κύκλωμα θα έχει το ρόλο της κεντρικής μνήμης του υπολογιστή. Επομένως, τα 4ΚΒ SRAM του ATMEGA644, έναντι των 2ΚΒ του ATMEGA328, αποτελούν ένα πολύ ισχυρό κίνητρο για την επιλογή του πρώτου. Έναν πρόσθετο λόγο αποτελεί και το αυξημένο πλήθος των ακροδεκτών εισόδου/εξόδου. Θυμηθείτε ότι ο υπολογιστής θα παρέχει οκτώ προγραμματιζόμενους ακροδέκτες GPIO. Όπως υποψιάζεστε, οι συγκεκριμένοι ακροδέκτες θα παρέχονται απευθείας από τον “κεντρικό μικροελεγκτή”, εφόσον αυτός θα εκτελεί τον parser της BASIC και θα είναι άμεσα προγραμματιζόμενος από το χρήστη. Αρκετούς ακροδέκτες απαιτεί και η επικοινωνία των κυκλωμάτων. Για την ομαλή διεξαγωγή της, ο μικροελεγκτής πρέπει να διαθέσει οκτώ ακροδέκτες για το (8μπιτο) data bus και τέσσερεις επιπλέον. Ας δούμε το γιατί.

Εφόσον το σύστημα διαθέτει ένα data bus, κάθε φορά που ο επεξεργαστής “τοποθετεί” νέα δεδομένα πρέπει να ενημερώνει τον παραλήπτη με κάποιο σήμα του τύπου “Το νου σου, φίλε! Αυτά προορίζονται για ‘σένα!”. Κάθε παραλήπτης θα έχει τη δική του γραμμή ειδοποιήσεων και άρα χρειάζονται δύο σήματα. Στο κύκλωμα αναφέρονται ως to_GPU και to_APU. Φυσικά, το γεγονός ότι ο επεξεργαστής αποφάσισε να στείλει κάτι, δεν αποτελεί λόγο για τα περιφερειακά να διακόψουν την τρέχουσα εργασία τους. Στο κάτω κάτω, όταν η GPU παράγει το σήμα VGA ή όταν η APU παράγει κάποιο ηχητικό σήμα, μπορεί να κάνει ελάχιστα διαλείμματα και μόνο σε συγκεκριμένες χρονικές στιγμές. Πρακτικά, αυτό σημαίνει ότι ο επεξεργαστής δεν γνωρίζει αν τα δεδομένα που έστειλε ελήφθησαν και, κατ’ επέκταση, δεν μπορεί να προχωρήσει στις επόμενες εργασίες του. Για την επίλυση αυτού του προβλήματος χρησιμοποιούνται δύο πρόσθετα σήματα τα οποία προέρχονται από τα περιφερειακά κυκλώματα και περιλαμβάνουν ένα μήνυμα του στιλ “Τα παρέλαβα! Ευχαριστώ πολύ!”. Τα συγκεκριμένα σήματα αναφέρονται στο κύκλωμα σαν from_GPU και from_APU.

Για τα κυκλώματα
Τα κυκλώματα για τα υποσυστήματα του υπολογιστή σχεδιάστηκαν στο EAGLE (www.cadsoftusa.com/download-eagle). Πρόκειται για ένα σχεδιαστικό πρόγραμμα που παρέχεται δωρεάν και λειτουργεί χωρίς περιορισμούς –τουλάχιστον για σχετικά μικρές πλακέτες–, ενώ αποτελεί το αγαπημένο εργαλείο των απανταχού makers. Όσοι το γνωρίζουν ήδη, ενδέχεται να παρατηρήσουν ότι τα σύμβολα για τους ATMEGA644 και ATMEGA328 δεν προέρχονται από την “εργοστασιακή” βιβλιοθήκη. Αυτό συμβαίνει γιατί τα σχεδιάσαμε ξανά! Τα πρωτότυπα σύμβολα ήταν παραφορτωμένα με πολλές (και μάλλον περιττές) πληροφορίες για τους ακροδέκτες, με συνέπεια να καταντούν κουραστικά. Στη βιβλιοθήκη που δημιουργήσαμε προσθέσαμε κι ένα σύμβολο για τo τσιπάκι μνήμης του κυκλώματος γραφικών. Αν θέλετε να μελετήσετε τα κυκλώματα ή να φτιάξετε την “τυπωμένη” εκδοχή τους για να κατασκευάσετε πλακέτες, μπορείτε να κατεβάσετε τα αρχεία του EAGLE από εδώ. Στο πακέτο θα βρείτε τα τρία κυκλώματα, καθώς και την βιβλιοθήκη μας.

Κάθε φορά που προκύπτει οποιοδήποτε πρόβλημα (πάτημα του backspace ενώ ο δρομέας βρίσκεται ήδη στην αρχή της γραμμής, πάτημα πλήκτρου ενώ η buffer του πληκτρολογίου έχει γεμίσει κ.λπ.), όπως και κατά την εκκίνηση του συστήματος, ακούγεται ένα τυπικό μπιπ. Αν ο ήχος κριθεί ενοχλητικός, ο χρήστης μπορεί να επιλέξει την ενεργοποίηση ενός LED, αντί του buzzer. Η σχετική ρύθμιση (ενεργοποίηση του λεγόμενου “visible bell”) πραγματοποιείται από ένα jumper. Μπορεί ο υπολογιστής μας να μην παίρνει βραβείο ευχρηστίας, αλλά πρέπει να του αναγνωρίσετε ότι προσπαθεί.

Στη φωτογραφία της πλακέτας με το κύκλωμα του επεξεργαστή (εικόνα 3) μπορείτε να διακρίνετε την υποδοχή PS2, ένα κόκκινο κουμπάκι πάνω από τον μικροελεγκτή, ένα σύμπλεγμα κίτρινων καλωδίων κι ένα ολόκληρο κύκλωμα “USB to serial”.

Μεταξύ άλλων, στη φωτογραφία της 'μητρικής' φαίνεται κι ένα κύκλωμα USB-to-Serial. Υποτίθεται ότι η παρουσία του θα ήταν προσωρινή, αλλά ξέρετε πώς είναι αυτά. Το αξιοποιήσαμε σαν είσοδο δεδομένων, πριν προστεθεί ο κώδικας για τη σύνδεση του πληκτρολογίου, αλλά παρέμεινε.

Εικόνα 3. Μεταξύ άλλων, στη φωτογραφία της “μητρικής” φαίνεται κι ένα κύκλωμα USB-to-Serial. Υποτίθεται ότι η παρουσία του θα ήταν προσωρινή, αλλά ξέρετε πώς είναι αυτά. Το αξιοποιήσαμε σαν είσοδο δεδομένων, πριν προστεθεί ο κώδικας για τη σύνδεση του πληκτρολογίου, αλλά παρέμεινε.

Το διακοπτάκι προστέθηκε στη φάση της αποσφαλμάτωσης του parser της BASIC και λειτουργεί σαν σήμα διακοπής του εκτελούμενου προγράμματος. Μπορείτε να το φαντάζεστε σαν το ισοδύναμο του συνδυασμού πλήκτρων [CTLR+C]. Βέβαια το πάτημα αυτού του κουμπιού λαμβάνεται υπόψη άμεσα, χωρίς τη μεσολάβηση του κώδικα που “διαβάζει” το πληκτρολόγιο. Το κύκλωμα “USB to serial” αποτελεί ένα ακόμα απομεινάρι της διαδικασίας αποσφαλμάτωσης του firmware. Το συγκεκριμένο κύκλωμα αποτελούσε το μοναδικό αξιόπιστο μέσο εισόδου, πριν τελειοποιηθεί η επικοινωνία με το πληκτρολόγιο PS2. Σε εκείνο το στάδιο, ο μόνος τρόπος αλληλεπίδρασης με τον parser της BASIC ήταν μέσα από μια απλή σειριακή σύνδεση. Τέλος, τα κίτρινα καλώδια καταλήγουν σε ένα pin header για τον εύκολο προγραμματισμό του μικροελεγκτή (ISP από το In-System Programming). Όπως αντιλαμβάνεστε, τα συγκεκριμένα στοιχεία του κυκλώματος θα μπορούσαν και να λείπουν, χωρίς να αλλάζει κάτι σημαντικό στη λειτουργία του υπολογιστή. Το ακριβώς αντίθετο ισχύει για το μεταλλικό κουτάκι, στα αριστερά του μικροελεγκτή. Πρόκειται για έναν ταλαντωτή που παράγει τετραγωνικούς παλμούς στα 20MHz. Με άλλα λόγια, αποτελεί το “ρολόι” του επεξεργαστή.

Ο υπολογιστής μας συνδέεται με το πληκτρολόγιο μέσω μιας τυπικής υποδοχής PS2. Το γενικό όνομα αυτών των υποδοχών είναι mini-DIN 6 και στην εικόνα έχουμε επισημάνει τους ακροδέκτες που αξιοποιούνται από το πρωτόκολλο PS2. Το 'λογικό' μέρος της σύζευξης θα μας απασχολήσει όταν καταπιαστούμε με το software.

Εικόνα 4. Ο υπολογιστής μας συνδέεται με το πληκτρολόγιο μέσω μιας τυπικής υποδοχής PS2. Το γενικό όνομα αυτών των υποδοχών είναι mini-DIN 6 και στην εικόνα έχουμε επισημάνει τους ακροδέκτες που αξιοποιούνται από το πρωτόκολλο PS2. Το “λογικό” μέρος της σύζευξης θα μας απασχολήσει όταν καταπιαστούμε με το software.

Μα, τι κάνει επιτέλους αυτό το “ρολόι”;
Φανταστείτε ένα σύνθετο ψηφιακό κύκλωμα με δεκάδες πύλες, που η έξοδος της μίας μπορεί να τροφοδοτεί άλλες δύο-τρεις, ενώ κάποιες από αυτές ενδέχεται να επιστρέφουν το σήμα της εξόδου τους σε κάποια προηγούμενη πύλη και πάει λέγοντας. Σε ένα τέτοιο σύστημα προκύπτει το εξής πρόβλημα: Πότε μπορούμε να θεωρήσουμε ότι τα σήματα που παράγονται είναι έγκυρα; Οι πύλες, βλέπετε, δεν λειτουργούν ακαριαία. Αυτό σημαίνει ότι τα σήματα που φτάνουν σε μια βαθμίδα του κυκλώματος ενδέχεται να μην έχουν οριστικοποιηθεί ακόμα, καθώς οι προηγούμενες πύλες δεν έχουν ολοκληρώσει την εργασία τους. Αυτή η ασάφεια αποφεύγεται με τη χρήση ενός ειδικού παλμού, ο οποίος ενημερώνει τις πύλες για το πότε θεωρούνται έγκυρα τα διάφορα σήματα. Ο εν λόγω παλμός ονομάζεται παλμός συγχρονισμού (synchronization pulse ή clock) και το ειδικό κύκλωμα που τον παράγει είναι το περίφημο ρολόι (clock source). Το πόσο μπορεί να αυξηθεί η συχνότητα αυτού του παλμού καθορίζεται από την ταχύτητα των επιμέρους στοιχείων που απαρτίζουν ένα κύκλωμα και, σε τελική ανάλυση, από την ταχύτητα λειτουργίας των λογικών πυλών. Με τη σειρά της, αυτή η ταχύτητα καθορίζεται από το χρόνο που απαιτεί ένα σήμα για να ολοκληρώσει τη διαδρομή του εντός της πύλης (propagation delay time).

Παραγωγή ήχου
Όπως μπορείτε να διαπιστώσετε από την εικόνα 5, το κύκλωμα του ήχου είναι εξίσου μικρό με εκείνο της μητρικής.

Το κύκλωμα της 'κάρτας ήχου' είναι το μικρότερο απ' όλα, αλλά παρουσιάζει αρκετό ενδιαφέρον. Πάνω από τον επεξεργαστή δεσπόζει ένα δικτύωμα αντιστάσεων R/2R, που συμπεριφέρεται σαν DAC των 6 bits.

Εικόνα 5. Το κύκλωμα της “κάρτας ήχου” είναι το μικρότερο απ’ όλα, αλλά παρουσιάζει αρκετό ενδιαφέρον. Πάνω από τον επεξεργαστή δεσπόζει ένα δικτύωμα αντιστάσεων R/2R, που συμπεριφέρεται σαν DAC των 6 bits.

Αυτή τη φορά, εφόσον οι απαιτήσεις σε ακροδέκτες ήταν ελάχιστες, χρησιμοποιήσαμε τον ATMEGA328. Ο μεγάλος ATMEGA644 θα αύξανε το κόστος και δεν θα προσέφερε τίποτα. Στη φωτογραφία του κυκλώματος (εικόνα 6) ξεχωρίζει αμέσως η απόληξη του data bus του συστήματος, που έχει υλοποιηθεί με τα κίτρινα καλώδια.

Τα κίτρινα καλώδια αποτελούν τμήμα του data bus, που συνδέει τη CPU με την APU, το τσιπάκι του ήχου! Τα δύο πράσινα καλώδια χρησιμοποιούνται επικουρικά, για την ομαλή μεταφορά δεδομένων μέσω του διαύλου.

Εικόνα 6. Τα κίτρινα καλώδια αποτελούν τμήμα του data bus, που συνδέει τη CPU με την APU, το τσιπάκι του ήχου! Τα δύο πράσινα καλώδια χρησιμοποιούνται επικουρικά, για την ομαλή μεταφορά δεδομένων μέσω του διαύλου.

Οι δύο συνδέσεις που ξεκινούν από τον μικροελεγκτή και καταλήγουν στο αριστερό Pin header, μεταφέρουν τα σήματα ελέγχου που ρυθμίζουν την επικοινωνία με τον κεντρικό επεξεργαστή. Στο κύκλωμα της μητρικής τα εν λόγω σήματα ονομάζονταν TO_APU και FROM_APU, ενώ σε αυτό το κύκλωμα έχουν βαφτιστεί FROM_CPU και TO_CPU αντίστοιχα. Αυτή η μεταβολή στην ονομασία των σημάτων μοιάζει παραπλανητική, αλλά στην πράξη αποδείχθηκε χρήσιμη. Όταν γράφαμε τον κώδικα και ρυθμίζαμε τους ακροδέκτες του μικροελεγκτή, ήταν προτιμότερο να βλέπουμε τη φορά των σημάτων σε σχέση με τον ίδιο και όχι σε σχέση με τον κεντρικό επεξεργαστή. Όλα αυτά όμως έχουν πολύ λιγότερο ενδιαφέρον από το κύκλωμα των αντιστάσεων που βρίσκεται πάνω από τον μικροελεγκτή. Η συγκεκριμένη διάταξη ονομάζεται R/2R και αποτελεί έναν μετατροπέα ψηφιακών σημάτων σε αναλογικά (DAC). Η δική μας υλοποίηση μπορεί να μετατρέπει ψηφιακά σήματα των 6bit. Αναρωτιέστε από πού προέκυψε αυτό το έξι; Η απάντηση προϋποθέτει μια μικρή ανάλυση.

Στο εισαγωγικό άρθρο της σειράς μας αναφέραμε ότι ο υπολογιστής μας διαθέτει τέσσερα κανάλια ήχου. Η συγκεκριμένη επιλογή ήταν αυθαίρετη αλλά όχι και τυχαία. Μερικοί διάσημοι υπολογιστές της δεκαετίας του 80 είναι ο Atari ST, ο οποίος διέθετε τρία κανάλια ήχου, η Amiga 500 με τέσσερα κανάλια κι ο Commodore 64 με επίσης τέσσερα κανάλια ήχου. Όπως υποψιάζεστε, αυτό που επιδιώκαμε ήταν να μιμηθούμε τα θρυλικά μηχανήματα του παρελθόντος. Βέβαια κάθε κανάλι συνεπάγεται την ύπαρξη ενός synthesizer και, εν προκειμένω, θα χρειαζόμασταν τέσσερα synthesizers. Τα ψηφιακά synthesizers δημιουργούν ήχους υπολογίζοντας τα κατάλληλα δείγματα (αριθμητικές τιμές), που όταν “μπουν στη σειρά” σχηματίζουν τη ζητούμενη κυματομορφή. Ακριβώς γι’ αυτό, ένα θεμελιώδες χαρακτηριστικό των ψηφιακών synthesizers αποτελεί το πλήθος των bits που χρησιμοποιούν για την περιγραφή των δειγμάτων. Ουσιαστικά, το πλήθιος των bits καθορίζει την ακρίβεια με την οποία μπορεί το synthesizer να περιγράφει τις διαδοχικές στάθμες σε μια κυματομορφή. Για τα δικά μας synthesizers, που θα υλοποιούνται στο software και δεν υπάρχουν πολλά περιθώρια, επιλέξαμε το εύρος των 4 bits. Κρατήστε τα όλα αυτά κι ας πάμε λίγο παραπέρα. Η ψηφιακή μίξη του ήχου μερικών synthesizers επιτυγχάνεται με την αριθμητική πρόσθεση των δειγμάτων που παράγονται κάθε στιγμή. Για να ακούσουμε το τελικό σήμα του μίκτη πρέπει να δώσουμε τις διαδοχικές τιμές που υπολογίζει σε κάποιον DAC. Στη συνέχεια, οι αντίστοιχες στάθμες τάσης που δημιουργεί ο DAC οδηγούνται σε κάποιον ενισχυτή και τελικά στα ηχεία. Προσέξτε τώρα το εξής: Η μέγιστη τιμή που μπορεί να πάρει η έξοδος του μίκτη καθορίζει το πλήθος των bits που πρέπει να είναι σε θέση να δεχτεί ο DAC. Στον δικό μας υπολογιστή, κάθε κανάλι είναι τετράμπιτο και άρα η μέγιστη τιμή για τα δείγματα είναι ο αριθμός 15. Συνεπώς, εφόσον έχουμε τέσσερα συνθεσάιζερ (ένα για κάθε κανάλι), η μέγιστη τιμή στην έξοδο του μίκτη είναι ο αριθμός 60. Τώρα θα σας ρωτούσαμε πόσα bits απαιτούνται για την αναπαράσταση αυτού του αριθμού στο δυαδικό, αλλά σας έχουμε δώσει την απάντηση ήδη. Χρειάζονται έξι – όσα είναι και τα bits που δέχεται στην είσοδό του ο DAC ;)

Τι εστί μετατροπή;
Η συζήτηση γύρω από το πλήθος των bits (δηλαδή γύρω από το εύρος) του DAC, είναι πιθανό να δημιούργησε μια απορία: Γιατί μας ενδιαφέρει το πλήθος των bits που δέχεται στην είσοδό του; Σε τελική ανάλυση, τι ακριβώς πετυχαίνει ένας DAC; Αυτά τα ερωτήματα μοιάζουν αρκετά απλά, αλλά μη νομίζετε ότι γνωρίζουν όλοι τις απαντήσεις. Ας πάρουμε τα πράγματα με τη σειρά. Οι DAC δέχονται στην είσοδό τους αριθμούς, εκφρασμένους στο δυαδικό σύστημα. Αυτοί οι αριθμοί ανήκουν στο κλειστό διάστημα από μηδέν έως 2^{n} - 1, όπου το n είναι το πλήθος των bits που δέχεται ο εκάστοτε DAC. Για κάθε αριθμό σε αυτό το διάστημα ο DAC παράγει μια ανάλογη τάση στο διάστημα από 0 έως K volt, όπου το K αποτελεί την τάση τροφοδοσίας του κυκλώματος. Στην περίπτωση του κυκλώματος ήχου του δικού μας υπολογιστή, ο DAC δέχεται αριθμούς των 6bits (από μηδέν έως 63) και παράγει μια ανάλογη τάση στο διάστημα από 0 έως 5Volt. Για παράδειγμα, αν τον τροφοδοτήσουμε με τον αριθμό 31 θα δημιουργήσει μια τάση 2.5Volt, αν δεχτεί τον αριθμό 26 θα δημιουργήσει μια τάση κοντά στα 2Volt, ενώ αν του δώσουμε τον αριθμό 1 θα δημιουργήσει μια τάση κοντά στα 0.078V, το ένα εξηκοστό τέταρτο των 5V.

Παραγωγή εικόνας
Το κύκλωμα γραφικών φαίνεται στην εικόνα 7 κι εκ πρώτης όψης φαντάζει αρκετά περίπλοκο. Στην πραγματικότητα η περισσότερη δουλειά πραγματοποιείται πάλι στο software και το κύκλωμα ακολουθεί μια πολύ απλή λογική.

Το κύκλωμα της 'κάρτας γραφικών' είναι μεγάλο κι εξίσου ενδιαφέρον. Ενσωματώνει το μηχανισμό (74HC573) που χωρίζει το data bus του συστήματος στα δύο, τη μνήμη οθόνης (TC551001BPL) και έναν DAC, που μετατρέπει τα δεδομένα των pixels σε τρεις αναλογικές τάσεις -- μία για κάθε χρωματική συνιστώσα.

Εικόνα 7. Το κύκλωμα της “κάρτας γραφικών” είναι μεγάλο κι εξίσου ενδιαφέρον. Ενσωματώνει το μηχανισμό (74HC573) που χωρίζει το data bus του συστήματος στα δύο, τη μνήμη οθόνης (TC551001BPL) και έναν DAC, που μετατρέπει τα δεδομένα των pixels σε τρεις αναλογικές τάσεις — μία για κάθε χρωματική συνιστώσα.

Αυτό που ενδέχεται να σας τρομάζει είναι το πλήθος των συνδέσεων. Πιστεύουμε ότι το διάγραμμα της εικόνας 8 ξεκαθαρίζει το τοπίο σε μεγάλο βαθμό.

Η σύνδεση της GPU με τη μνήμη οθόνης προϋποθέτει δύο διαύλους (data και address). Ο ένας από αυτούς (data) χρησιμοποιείται και για την επικοινωνία με τον επεξεργαστή, όπως επίσης και για την έξοδο των δεδομένων προς την οθόνη. Οι διακεκομμένες γραμμές αναπαριστούν τα σήματα ελέγχου που ανοιγοκλείνουν τις δύο 'στρόφιγγες'.

Εικόνα 8. Η σύνδεση της GPU με τη μνήμη οθόνης προϋποθέτει δύο διαύλους (data και address). Ο ένας από αυτούς (data) χρησιμοποιείται και για την επικοινωνία με τον επεξεργαστή, όπως επίσης και για την έξοδο των δεδομένων προς την οθόνη. Οι διακεκομμένες γραμμές αναπαριστούν τα σήματα ελέγχου που ανοιγοκλείνουν τις δύο “στρόφιγγες”.

Όπως είπαμε νωρίτερα, το κύκλωμα γραφικών περιλαμβάνει ένα τσιπάκι μνήμης που έχει το ρόλο της μνήμης οθόνης. Στο συγκεκριμένο κύκλωμα, λοιπόν, το data bus αποκτά διπλή αποστολή: Συνδέει τον μικροελεγκτή του κυκλώματος με τον κεντρικό επεξεργαστή κι επιπρόσθετα με τη video RAM. Για την πρώτη σύνδεση προβλέπεται μόνο η μία φορά κίνησης των δεδομένων (από τον επεξεργαστή προς τη GPU), ενώ για τη δεύτερη σύνδεση προβλέπεται η αμφίδρομη μεταφορά δεδομένων (ο μικροελεγκτής μπορεί να διαβάζει αλλά και να γράφει δεδομένα στη μνήμη). Η πολλαπλή χρήση του διαύλου διευκολύνει την κατασκευή του κυκλώματος –φανταστείτε τι θα γινόταν να είχαμε δύο data buses–, αλλά εισάγει ένα πρόβλημα: Τι θα συμβεί στην περίπτωση που ο επεξεργαστής τοποθετήσει δεδομένα στο data bus, την ίδια στιγμή που η GPU προσπαθεί να διαβάσει ή να γράψει κάτι στη μνήμη; Αυτό το ζήτημα αντιμετωπίζεται εύκολα με τo “σπάσιμο” του διαύλου σε δύο ανεξάρτητα τμήματα. Για το σκοπό αυτό επιστρατεύσαμε το ολοκληρωμένο 75HC573. Το εν λόγω τσιπάκι ενσωματώνει έναν προσωρινό αποθηκευτικό χώρο (latch) καθώς και μια βαθμίδα εξόδου, η οποία μπορεί να θέτει τους ακροδέκτες της σε τρεις καταστάσεις: Low, High και Hi-Z. Η τρίτη κατάσταση ισοδυναμεί με την αποσύνδεση του αντίστοιχου ακροδέκτη από το κύκλωμα. Ένας ακροδέκτης που έχει τεθεί σε αυτή την κατάσταση δεν επηρεάζει την κατάσταση των ακροδεκτών με τους οποίους συνδέεται. Προσέξτε τώρα το εξής: Όταν ο επεξεργαστής θέλει να στείλει δεδομένα στο κύκλωμα γραφικών, τα τοποθετεί στο data bus και στέλνει μια σχετική ειδοποίηση στη GPU. Η ίδια ειδοποίηση (το ίδιο σήμα) αξιοποιείται και για την ενεργοποίηση του latch του 74HC573. Με αυτόν τον τρόπο τα δεδομένα του επεξεργαστή αποθηκεύονται πλέον στο εσωτερικό του 74HC573 κι ο δίαυλος μπορεί να αξιοποιηθεί για άλλες δουλειές, π.χ., για την αποστολή δεδομένων στο κύκλωμα ήχου. Όταν η GPU αποφασίσει ότι μπορεί να παραλάβει τα δεδομένα του επεξεργαστή, αρκεί να ενεργοποιήσει τις εξόδους του 74HC573 και, φυσικά, να ειδοποιήσει τον επεξεργαστή ότι παρέλαβε το πακετάκι. Με αυτή τη διαδικασία ο επεξεργαστής μπορεί να στέλνει οτιδήποτε στο κύκλωμα γραφικών, χωρίς να παρεμβαίνει στην επικοινωνία μεταξύ GPU και video RAM.

Το ολοκληρωμένο 74HC541 αποτελεί μια απλουστευμένη εκδοχή του 74HC573. Για την ακρίβεια ενσωματώνει μια βαθμίδα εξόδου τριών καταστάσεων, αλλά στερείται του εσωτερικού αποθηκευτικού χώρου. Η ύπαρξή του επιβάλλεται από τις προδιαγραφές του σήματος VGA. Σύμφωνα με αυτές, όταν δεν εκπέμπεται πληροφορία εικόνας (αυτό συμβαίνει στην αρχή και στο τέλος κάθε γραμμής σάρωσης, όπως επίσης στην αρχή και στο τέλος κάθε frame), τότε τα τρία σήματα για το χρώμα πρέπει να μηδενίζονται. Στο δικό μας κύκλωμα αυτά τα σήματα μεταφέρονται από το data bus, το οποίο γενικά μεταφέρει διάφορα άλλα δεδομένα. Εδώ έρχεται να μας βοηθήσει το 74HC541, που λειτουργεί σαν στρόφιγγα. Όταν οι έξοδοί του ενεργοποιούνται –κάτι που αποφασίζει η GPU–, τα δεδομένα του data bus προχωρούν προς τo DAC κι από ‘κεί προς την οθόνη. Διαφορετικά, ανεξάρτητα από το τι γίνεται στο data bus, η οθόνη δεν λαμβάνει τίποτα.

Σε αυτό το κύκλωμα χρησιμοποιήσαμε μπλε καλώδια για το data bus και κίτρινα για το address bus. Πριν σκεφτείτε ότι η κατασκευή αυτού του κυκλώματος απαιτεί πολύ κόπο, σημειώστε ότι ένα τμήμα του address bus βρίσκεται στην άλλη όψη της πλακέτας.

Εικόνα 9. Σε αυτό το κύκλωμα χρησιμοποιήσαμε μπλε καλώδια για το data bus και κίτρινα για το address bus. Πριν σκεφτείτε ότι η κατασκευή αυτού του κυκλώματος απαιτεί πολύ κόπο, σημειώστε ότι ένα τμήμα του address bus βρίσκεται στην άλλη όψη της πλακέτας.

Μα, τι γίνεται εκεί μέσα;
Είμαστε σίγουροι ότι η παρουσίαση του κυκλώματος ήχου έχει αφήσει αναπάντητο ένα μεγάλο ερώτημα: Πώς καταφέρνει ένας σωρός αντιστάσεων να μετατρέπει ένα αριθμητικό μέγεθος σε μια τάση; Στην εικόνα 10 φαίνεται το κύκλωμα ενός τετράμπιτου DAC. Ο συγκεκριμένος μετατροπέας είναι σχεδιασμένος λίγο διαφορετικά, αλλά πέρα από το μειωμένο πλήθος των εισόδων (4 αντί για 6) δεν έχει καμία διαφορά από τον μετατροπέα του κυκλώματος ήχου. Για να κατανοήσουμε τη λειτουργία του πρέπει να δούμε τη σχέση που συνδέει την τάση εξόδου με την κατάσταση των εισόδων. Καθεμία από τις εισόδους μπορεί να πάρει δύο διακριτές τιμές (0 και 1). Με άλλα λόγια, κάθε είσοδος μπορεί να αντιμετωπισθεί σαν μια πηγή τάσης, που παρέχει 0 ή 5V (ή όποια άλλη τάση αντιστοιχεί στη λογική κατάσταση 1). Έχοντας αυτό κατά νου, η έξοδος του μετατροπέα προκύπτει από την ακόλουθη σχέση:

V_{out} = \frac{V_{bit0}}{16} + \frac{V_{bit1}}{8} + \frac{V_{bit2}}{4} + \frac{V_{bit3}}{2}

Η σχέση δείχνει ξεκάθαρα ότι κάθε είσοδος του τετράμπιτου DAC επιδρά στην έξοδο με τόση “ένταση”, όση είναι και η αξία του αντίστοιχου bit σε σχέση με τα υπόλοιπα. Τώρα όμως μπορεί να γεννήθηκε ένα νέο ερώτημα: Πώς προκύπτει αυτή η –ομολογουμένως βολική– σχέση; Ο υπολογισμός της εξόδου του κυκλώματος πραγματοποιείται εύκολα, με τη βοήθεια των θεωρημάτων της υπέρθεσης (ή επαλληλίας) και του Thevenin. Σύμφωνα με το θεώρημα της υπέρθεσης, σε ένα κύκλωμα σαν αυτό που εξετάζουμε (γραμμικό), η τάση εξόδου που παράγεται από την επίδραση πολλών διαφορετικών πηγών τάσης (τα επιμέρους bits), προκύπτει από το άθροισμα των επιμέρους τάσεων εξόδου που θα παρήγαγε κάθε πηγή τάσης αν επιδρούσε μόνη της (αν οι υπόλοιπες ήταν βραχυκυκλωμένες). Η παραπάνω παρουσίαση του θεωρήματος είναι πολύ απλουστευμένη, αλλά είναι επαρκής για τις ανάγκες του άρθρου. Στην εικόνα 11 βλέπουμε τα βήματα για τον υπολογισμό της τάσης εξόδου που δημιουργεί η πηγή V_{b1}, όταν όλες οι υπόλοιπες είναι βραχυκυκλωμένες. Στην πορεία της ανάλυσης εφαρμόζουμε το θεώρημα Thevenin τρεις φορές, για την περαιτέρω απλοποίηση του κυκλώματος. Εν τέλει, όπως φαίνεται και στo τελευταίο καρέ της εικόνας, καταλήγουμε στην ακόλουθη σχέση:

Vout_{1} = \frac{V_{b1}}{8}

Με παρόμοιο τρόπο μπορούμε να υπολογίσουμε και την τάση εξόδου που δημιουργεί καθεμία από τις υπόλοιπες πηγές (εισόδους). Στη συνέχεια, αρκεί να αντικαταστήσουμε τα ευρήματά μας στη μαθηματική έκφραση του θεωρήματος της υπέρθεσης:

V_{out} = V_{out0} + V_{out1} + V_{out2} + V_{out3}

Αν γίνουν σωστά οι υπολογισμοί, θα φτάσουμε στη σχέση που χρησιμοποιήσαμε αρχικά για την περιγραφή της συμπεριφοράς του DAC.

Ένα δικτύωμα R/2R, παρόμοιο με εκείνο που χρησιμοποιείται στο κύκλωμα ήχου. Η μόνη τους διαφορά έγκειται στο πλήθος των εισόδων και στον τρόπο που έχουν σχεδιαστεί. Θέλουμε να πιστεύουμε ότι αυτό 'διαβάζεται' ευκολότερα.

Εικόνα 10. Ένα δικτύωμα R/2R, παρόμοιο με εκείνο που χρησιμοποιείται στο κύκλωμα ήχου. Η μόνη τους διαφορά έγκειται στο πλήθος των εισόδων και στον τρόπο που έχουν σχεδιαστεί. Θέλουμε να πιστεύουμε ότι αυτό “διαβάζεται” ευκολότερα.

Το θεώρημα της υπέρθεσης (superposition) επιτρέπει να υπολογίσουμε την έξοδο του κυκλώματος, αθροίζοντας την επίδραση που έχει κάθε είσοδος ξεχωριστά. Με τη μπλε γραμμή έχουμε μαρκάρει τα τμήματα στα οποία εφαρμόσαμε το θεώρημα Thevenin. Τα πορτοκαλί πλαίσια περιλαμβάνουν τα αντίστοιχα 'ισοδύναμα Thevenin', δηλαδή τα προϊόντα από την εφαρμογή του ομώνυμου θεωρήματος.

Εικόνα 11. Το θεώρημα της υπέρθεσης (superposition) επιτρέπει να υπολογίσουμε την έξοδο του κυκλώματος, αθροίζοντας την επίδραση που έχει κάθε είσοδος ξεχωριστά. Με τη μπλε γραμμή έχουμε μαρκάρει τα τμήματα στα οποία εφαρμόσαμε το θεώρημα Thevenin. Τα πορτοκαλί πλαίσια περιλαμβάνουν τα αντίστοιχα “ισοδύναμα Thevenin”, δηλαδή τα προϊόντα από την εφαρμογή του ομώνυμου θεωρήματος.

Αληθινό χρώμα
Η σκέψη ότι όσα βλέπουμε στην οθόνη υπάρχουν αποθηκευμένα και στη video RAM, δεν μας προκαλεί καμία αίσθηση. Το κόστος της μνήμης είναι τόσο χαμηλό πλέον, που ακόμα και τα πιο “μικρά” κυκλώματα γραφικών έχουν πρόσβαση σε εκατοντάδες MB μνήμης. Σήμερα, ακόμα και στην περίπτωση των μεγάλων αναλύσεων, υπάρχει άφθονος χώρος για την αποθήκευση του χρώματος κάθε pixel. Αρκεί να σκεφτεί κανείς ότι για εικόνα ανάλυσης 1920×1200 και με 24bit χρώμα, αρκούν λιγότερα από 7MB. Ωστόσο, μερικές δεκαετίες πριν τα πράγματα ήταν εντελώς διαφορετικά. Τα τσιπάκια μνήμης προσέφεραν πολύ μικρότερο χώρο και σε εξαιρετικά υψηλότερο κόστος, ενώ και τα κυκλώματα γραφικών ήταν τόσο αργόστροφα που δεν θα μπορούσαν να χειριστούν μεγαλύτερους όγκους δεδομένων. Για να πάρετε μια ιδέα, τα κυκλώματα γραφικών CGA και EGA χρησιμοποιούσαν 4bit για την περιγραφή κάθε pixel. Αυτό σημαίνει ότι κάθε στιγμή μπορούσαν να προβάλλουν εικόνες των 16 χρωμάτων μόλις. Ε, λοιπόν, ο δικός μας υπολογιστής χρησιμοποιεί 8 bits για κάθε pixel κι αυτό σημαίνει ότι μπορεί να προβάλλει 256 διαφορετικές αποχρώσεις. Επιπρόσθετα, το δικό μας κύκλωμα γραφικών είναι true color! Τι, δεν μας πιστεύετε;

Σε ορισμένα παλιά συστήματα, τα δεδομένα που αποθηκεύονταν στη μνήμη οθόνης δεν περιέγραφαν το χρώμα του αντίστοιχου pixel. Τα αποθηκευμένα bits λειτουργούσαν ως δείκτης προς την περιγραφή κάποιου χρώματος, που βρισκόταν σε μια άσχετη περιοχή της μνήμης. Αυτή η περιοχή της μνήμης ονομαζόταν παλέτα, ενώ η τεχνική ονομασία της ήταν Color Look-Up Table (CLUT). Σε αυτό το σύστημα στηρίζονταν και τα κυκλώματα EGA: Διέθεταν μια ειδική περιοχή της μνήμης, στην οποία βρίσκονταν αποθηκευμένες 64 διαφορετικές αποχρώσεις. Αυτά τα χρώματα ήταν χωρισμένα σε τέσσερεις ομάδες των δεκαέξι και το κύκλωμα γραφικών μπορούσε να χρησιμοποιήσει μόνο μια ομάδα για κάθε καρέ (frame). Τελικά, αν και η παλέτα ήταν εξάμπιτη (2^{6} = 64), η μνήμη οθόνης περιλάμβανε μόνο 4 bits για κάθε pixel. Αυτή η τετράδα λειτουργούσε σαν δείκτης προς μια από τις δεκαέξι αποχρώσεις της επιλεγμένης ομάδας. Έτσι, η οθόνη μπορούσε να προβάλλει μόνο 16 χρώματα σε κάθε frame, αν και η παλέτα του συστήματος διέθετε συνολικά 64. Στο δικό μας κύκλωμα γραφικών, όπως και στα περισσότερα, τα bits που αποθηκεύονται για κάθε pixel είναι μοιρασμένα στις τρεις χρωματικές συνιστώσες (Red, Green, Blue). Επομένως, τα δεδομένα της μνήμης οθόνης προσδιορίζουν “απευθείας” τις διάφορες αποχρώσεις, χωρίς την ανάγκη κάποιας παλέτας. Στο παρελθόν, αυτό το σύστημα ονομαζόταν true color.

Μια σύνδεση VGA απαρτίζεται από πέντε κρίσιμα σήματα. Τα πρώτα τρία μεταφέρουν τη χρωματική πληροφορία για κάθε pixel, ενώ τα άλλα δύο σηματοδοτούν την έναρξη κάθε γραμμής σάρωσης (HSYNC) και κάθε πλαισίου (VSYNC). Στον υπολογιστή μας, τα δύο τελευταία παράγονται από τη GPU και τα τρία πρώτα από τον DAC, που συνδέεται στην έξοδο της μνήμης οθόνης.

Εικόνα 12. Μια σύνδεση VGA απαρτίζεται από πέντε κρίσιμα σήματα. Τα πρώτα τρία μεταφέρουν τη χρωματική πληροφορία για κάθε pixel, ενώ τα άλλα δύο σηματοδοτούν την έναρξη κάθε γραμμής σάρωσης (HSYNC) και κάθε πλαισίου (VSYNC). Στον υπολογιστή μας, τα δύο τελευταία παράγονται από τη GPU και τα τρία πρώτα από τον DAC, που συνδέεται στην έξοδο της μνήμης οθόνης.

Κρυμμένη αντίσταση
Το δίκτυο αντιστάσεων που λειτουργεί σαν DAC για τα δεδομένα της video RAM, μοιάζει πολύ διαφορετικό από εκείνο που συναντήσαμε στο κύκλωμα ήχου. Βέβαια, όπως θα δούμε και στη συνέχεια του άρθρου, το κύκλωμα γραφικών διαθέτει έξι διαφορετικούς μετατροπείς των 2 bits, ενώ το κύκλωμα ήχου διαθέτει έναν μετατροπέα των 8 bits. Παρ’ όλα αυτά, ακόμα κι αν εστιάσουμε σε έναν από τους έξι “δίμπιτους” μετατροπείς, η σύνδεση των αντιστάσεων μοιάζει να μην έχει κανένα νόημα. Αυτό συμβαίνει γιατί οι DAC του κυκλώματος γραφικών συμπληρώνονται από μια αντίσταση που δεν υπάρχει στο δικό μας κύκλωμα. Πρόκειται για τη λεγόμενη αντίσταση εισόδου (input impedance) του κυκλώματος της οθόνης, η οποία ανέρχεται στα 75Ω. Σημειώστε ότι αυτή η αντίσταση υπάρχει εις τριπλούν, αφού η οθόνη διαθέτει μία τέτοια σε κάθε είσοδο χρώματος. Λαμβάνοντας υπόψη την ύπαρξη αυτής της αντίστασης, το κύκλωμα καθενός από τους “δίμπιτους” DAC αποκτά τη μορφή της εικόνας 13. Εφαρμόζοντας το θεώρημα της υπέρθεσης μπορούμε να υπολογίσουμε εύκολα την επίδραση κάθε εισόδου στην τάση εξόδου και, ακολούθως, τη σχέση που συνδέει τη “συνολική” τάση εξόδου με τις δύο εισόδους. Η εξίσωση στην οποία καταλήγουμε έχει ως εξής:

V_{out} = 69.7 \cdot \frac{V_{bit0}}{2069.7} + 72.3 \cdot \frac{V_{bit1}}{1072.3}

Από την παραπάνω σχέση προκύπτουν δύο συμπεράσματα. Αφενός, η είσοδος V_{bit1} έχει σχεδόν τη διπλάσια επίδραση από την είσοδο V_{bit0} κι αυτό είναι απολύτως επιθυμητό, αφού το bit1 έχει τη διπλάσια αξία από το bit0. Αφετέρου, η τάση εξόδου δεν ξεπερνά ποτέ τα 0,5V. Αυτό μοιάζει να αποτελεί πρόβλημα, αλλά η “σμίκρυνση” των τάσεων πραγματοποιείται επίτηδες. Βλέπετε, σύμφωνα με τις προδιαγραφές του σήματος VGA, η τάση για κάθε χρωματική συνιστώσα πρέπει να κυμαίνεται μεταξύ 0 και 0,7V. Πρόκειται για έναν παράξενο περιορισμό, αλλά δεν τον επιβάλαμε εμείς. Ποιος ξέρει τι προσπαθούσαν να λύσουν οι μηχανικοί που σχεδίασαν το πρότυπο.

Καθένας από τους έξι 'δίμπιτους' DAC που ενσωματώνει η 'κάρτα γραφικών', ολοκληρώνεται σαν κύκλωμα με την αντίσταση εισόδου της οθόνης. Για την ανάλυση επιστρατεύουμε μόνο το θεώρημα της υπέρθεσης, αφού το κύκλωμα είναι αρκετά απλό και δεν χρειάζεται κάποια απλοποίηση.

Εικόνα 13. Καθένας από τους έξι “δίμπιτους” DAC που ενσωματώνει η “κάρτα γραφικών”, ολοκληρώνεται σαν κύκλωμα με την αντίσταση εισόδου της οθόνης. Για την ανάλυση επιστρατεύουμε μόνο το θεώρημα της υπέρθεσης, αφού το κύκλωμα είναι αρκετά απλό και δεν χρειάζεται κάποια απλοποίηση.

Δίκαιη κατανομή
Προηγουμένως αναφέραμε ότι το κύκλωμα γραφικών του υπολογιστή μας αποθηκεύει 8 bits για κάθε pixel, ενώ λίγο αργότερα είπαμε ότι αυτά τα bits μοιράζονται στις τρεις χρωματικές συνιστώσες. Δεν σας φαίνεται παράξενο αυτό; Πώς μπορεί να γίνει αυτή η διαίρεση, χωρίς να αλλοιωθούν τα χρώματα;

Η προφανής λύση θα ήταν να χρησιμοποιήσουμε δύο bits για τη μία χρωματική συνιστώσα κι από τρία bits για καθεμία από τις άλλες. Σε όσα συστήματα γινόταν κάτι τέτοιο, το κόκκινο και το πράσινο έπαιρναν από 3 bits, ενώ το μπλε έπαιρνε το περίσσευμα (2 bits). Παραδόξως, αυτό το χρωματικό σύστημα (RRR-GGG-BB) έδινε μια σχετικά ομοιόμορφη παλέτα, καθώς το ανθρώπινο μάτι είναι λιγότερο ευαίσθητο στο μπλε. Εμείς πάντως ακολουθήσαμε έναν διαφορετικό δρόμο, αφού η σκέψη και μόνο αυτής της ανισόρροπης κατανομής μας ενοχλούσε αφάνταστα. Η λύση που υλοποιήσαμε βασίζεται στον τρόπο λειτουργίας των κυκλωμάτων που διέθεταν 4 bits χρώματος. Σε αυτά τα κυκλώματα, τα πρώτα τρία bits αντιστοιχούσαν στις τρεις χρωματικές συνιστώσες, ενώ το τέταρτο bit ρύθμιζε την ένταση και των τριών. Το συγκεκριμένο χρωματικό σύστημα ονομαζόταν RGBI και μας έδωσε την ιδέα ενός συστήματος RR-GG-BB-II. Έτσι, αποφασίσαμε να δώσουμε από δύο bits σε κάθε χρωματική συνιστώσα και να χρησιμοποιήσουμε τα υπόλοιπα δύο για τη ρύθμιση της έντασης ολόκληρης της τριάδας. Με αυτόν τον καταμερισμό έχουμε 4 διαβαθμίσεις για κάθε χρωματική συνιστώσα και 4 στάθμες έντασης (ή φωτεινότητας) για το χρώμα που περιγράφουν τα πρώτα έξι bits. Το συγκεκριμένο σύστημα επιτρέπει την αξιοποίηση και των οκτώ διαθέσιμων bits, χωρίς να εισάγει την παραμικρή αλλοίωση στα χρώματα — αντιληπτή ή όχι!

Πολλαπλές μετατροπές
Το χρωματικό σύστημα RR-GG-BB-II δημιουργεί μια ομοιόμορφη παλέτα, αλλά καταφέρνει να περιπλέξει ελαφρώς την κατασκευή του κυκλώματος. Βλέπετε, το σήμα VGA είναι αναλογικό κι αυτό σημαίνει ότι τα 8 bits χρώματος πρέπει με κάποιον τρόπο να μετατραπούν σε τρεις αναλογικές τάσεις, μία για κάθε χρωματική συνιστώσα. Η μετατροπή των πρώτων έξι bits αποτελεί απλή υπόθεση: Αρκούν τρεις διαφορετικοί DAC, καθένας από τους οποίους θα διαθέτει μια είσοδο των δύο bits. Οι έξοδοι αυτών των DAC θα παρέχουν το αναλογικό σήμα για το κόκκινο, το πράσινο και το μπλε. Τι πρέπει να γίνει όμως με τα υπόλοιπα δύο bits; Εφόσον περιγράφουν τη συνολική ένταση του τελικού χρώματος, τα συγκεκριμένα bits πρέπει να μετατραπούν σε μια αναλογική τάση κι αυτή να προστεθεί σε καθεμία από τις τάσεις των τριών συνιστωσών. Η πρόσθεση όμως πρέπει να γίνει κατά τέτοιον τρόπο, ώστε να μη βραχυκυκλωθούν οι έξοδοι των DAC. Αν συμβεί αυτό το βραχυκύκλωμα, είναι άγνωστο το πώς θα συνδυαστούν οι τιμές για κάθε χρωματική συνιστώσα. Με άλλα λόγια, το χρώμα των διαφόρων pixels θα είναι εντελώς απρόβλεπτο. Για να αποφύγουμε το πρόβλημα του βραχυκυκλώματος, τα δύο τελευταία bits μετατρέπονται από *τρεις ξεχωριστούς* DAC, οι οποίοι απομονώνονται μεταξύ τους με τη βοήθεια μερικών διόδων. Με την ευκαιρία, να σημειώσουμε ότι χρησιμοποιήσαμε απλές “διόδους σήματος”, όπως είναι οι 1N4148, κι όχι διόδους ανόρθωσης. Η επιλογή έγινε με το σκεπτικό ότι οι δίοδοι σήματος είναι αρκετά πιο γρήγορες από τις υπόλοιπες και θα μπορούν να ανταποκρίνονται πιο σωστά στις ταχύτατες μεταβολές των δεδομένων για τα pixels.

Στην πράξη
Ο διαχωρισμός του υπολογιστή σε τρία ξεχωριστά συστήματα δεν έγινε μόνο για θεωρητικούς λόγους, αλλά για να διευκολύνει τη σχεδίαση. Από την αρχή κιόλας του εγχειρήματος μας προβλημάτιζε η υλοποίηση και η (ισχυρή) πιθανότητα του να γίνουν λάθη. Πώς θα εντοπίζαμε τα bugs σε ένα τόσο μεγάλο κύκλωμα, αν το υλοποιούσαμε πάνω σε μία μόνο πλακέτα; Όπως υποψιάζεστε, όταν αποφασίσαμε να “σπάσουμε” τον υπολογιστή σε τρία τμήματα, αποφασίσαμε ταυτόχρονα ότι το καθένα θα βρισκόταν στη δική του πλακέτα. Φυσικά, οι εν λόγω πλακέτες θα έπρεπε κάπως να κουμπώνουν κι αυτός είναι ο λόγος που σε όλα τα κυκλώματα εμφανίζεται ένα ζεύγος από pin headers. Τα συγκεκριμένα εξαρτήματα φαίνονται στη δεξιά πλευρά της εικόνας 14 κι όπως μπορείτε να δείτε έχουν επιμήκεις ακροδέκτες: είναι τύπου stackable. Έτσι, οι πλακέτες που συνθέτουν τον υπολογιστή μπορούν να κουμπώνουν η μία πάνω στην άλλη, θυμίζοντας ένα πολυώροφο κτίριο. Οι ακροδέκτες που φαίνονται στα αριστερά της ίδιας φωτογραφίας χρησιμοποιήθηκαν μόνο σε μία πλακέτα, η οποία θα έπαιζε το ρόλο του “ισογείου”. Η συγκεκριμένα πλακέτα θέλαμε να πατάει σε ειδικά πόδια και όχι πάνω στους ακροδέκτες της.

Τα pin headers που φαίνονται στα δεξιά έχουν επιμήκεις ακροδέκτες και μπορούν να κουμπώνουν ο ένας πάνω στον άλλο, ακόμα κι όταν έχουν προσαρτηθεί σε πλακέτες. Ακριβώς γι' αυτό ονομάζονται και stackable.

Εικόνα 14. Τα pin headers που φαίνονται στα δεξιά έχουν επιμήκεις ακροδέκτες και μπορούν να κουμπώνουν ο ένας πάνω στον άλλο, ακόμα κι όταν έχουν προσαρτηθεί σε πλακέτες. Ακριβώς γι’ αυτό ονομάζονται και stackable.

Όπως θα έχετε προσέξει, δεν κατασκευάσαμε τυπωμένα κυκλώματα. Το όλο εγχείρημα ξεκίνησε σαν ένα πείραμα και δεν γνωρίζαμε εξ’ αρχής αν θα ολοκληρωνόταν με επιτυχία ή όχι. Έτσι, αποφασίσαμε να υλοποιήσουμε τον υπολογιστή σε διάτρητες πλακέτες (prototyping boards), πραγματοποιώντας τις συνδέσεις με καλώδια. Παρεμπιπτόντως, το καλώδιο που χρησιμοποιήσαμε είναι μονόκλωνο και ο αγωγός του έχει διάμετρο 0.6mm (22AWG). Εσείς θα μπορούσατε να χρησιμοποιήσετε και καλώδιο διαφορετικής διαμέτρου, αλλά αυτό αποδείχτηκε αρκετά βολικό και σταθερό.

Στη μέχρι τώρα μελέτη είναι πιθανό να παρατηρήσατε τη χρήση αρκετών πυκνωτών, οι οποίοι συνδέονται στους ακροδέκτες της τροφοδοσίας. Οι κεραμικοί πυκνωτές των 100nF προορίζονται για την εξομάλυνση της τροφοδοσίας των ολοκληρωμένων κυκλωμάτων, ενώ ειδικά για τους μικροελεγκτές έχουμε επιστρατεύσει και από έναν πυκνωτή τανταλίου των 6.8μF. Εδώ υπάρχουν δύο κρίσιμες λεπτομέρειες. Αφενός οι πυκνωτές τανταλίου έχουν συγκεκριμένη πολικότητα (όπως και οι ηλεκτρολυτικοί), γεγονός που σημαίνει ότι η τοποθέτησή τους απαιτεί προσοχή. Αφετέρου όλοι οι πυκνωτές που αναφέραμε πρέπει να τοποθετηθούν όσο πιο κοντά γίνεται στους ακροδέκτες τροφοδοσίας των ολοκληρωμένων. Στις φωτογραφίες των κυκλωμάτων θα δείτε ότι τους έχουμε τοποθετήσει ακριβώς δίπλα στα ολοκληρωμένα, ενώ σε ορισμένες περιπτώσεις δεν θα τους δείτε καθόλου, αφού τους τοποθετήσαμε ανάμεσα στην πλακέτα και στο εκάστοτε τσιπ. Οι συγκεκριμένοι πυκνωτές έχουν σαν αποστολή την “απορρόφηση” των ρευμάτων που προκύπτουν από τις απότομες μεταβολές στα διάφορα ψηφιακά σήματα. Αυτά τα ρεύματα ονομάζονται transient currents και μολονότι έχουν σύντομο χρόνο ζωής, έχουν σχετικά μεγάλη ένταση. Ένα καλώδιο που διαρρέεται από τέτοια ρεύματα μπορεί εύκολα να λειτουργήσει σαν κεραία κι αυτός είναι ο λόγος που οι πυκνωτές πρέπει να βρίσκονται όσο πιο κοντά γίνεται στους ακροδέκτες τροφοδοσίας των ολοκληρωμένων. Εξετάζοντας τις φωτογραφίες θα διαπιστώσετε ότι έχουμε επιστρατεύσει και από έναν πυκνωτή πολυεστέρα (τους λεγόμενους “πλαστικούς”), για την εξομάλυνση της τροφοδοσίας κάθε πλακέτας. Οι συγκεκριμένοι πυκνωτές έχουν τοποθετηθεί δίπλα στους ακροδέκτες του pin header, οι οποίοι μεταφέρουν την τάση τροφοδοσίας του συστήματος. Πάντως, η αλήθεια είναι ότι η ύπαρξη αυτών των πυκνωτών αποτελεί υπερβολή.

Εν είδει στέγης για τις πλακέτες που απαρτίζουν τον υπολογιστή χρησιμοποιήσαμε μια ακόμα πλακέτα, των ίδιων διαστάσεων. Για αυτήν δεν σχεδιάσαμε κάποιο κύκλωμα, αφού επάνω της κουμπώσαμε ένα τροφοδοτικό των 5V / 3A και συνδέσαμε σε σειρά έναν διακόπτη. Το μόνο που χρειάστηκε να προσέξουμε σε αυτό τον “όροφο” του υπολογιστή ήταν να συνδέσουμε την τροφοδοσία στους σωστούς ακροδέκτες του pin header και φυσικά με τη σωστή πολικότητα.

Σε αυτό το σημείο πιστεύουμε ότι μπορούμε να σταματήσουμε την ακατάσχετη πολυλογία. Πλέον, γνωρίζετε όλα τα μυστικά του hardware του υπολογιστή μας και μπορείτε να τον αναπαράγετε. Μα, γιατί κάθεστε; Δεν θα βάλετε το κολλητήρι στην πρίζα;

Κρύσταλλοι και κεραμικά
Η τεχνική ονομασία για τα κυκλώματα που παράγουν τους παλμούς συγχρονισμού είναι “ταλαντωτές” (oscillators). Αυτά τα κυκλώματα περιλαμβάνουν έναν ενισχυτή σήματος, του οποίου η έξοδος ανατροφοδοτείται στην είσοδο. Προσέξτε τώρα το εξής: Σε αυτόν το βρόχο ανάδρασης βρίσκεται ένα φίλτρο που επιτρέπει τη διέλευση ηλεκτρικών ταλαντώσεων μιας συγκεκριμένης συχνότητας. Όταν ενεργοποιείται το κύκλωμα ο ενισχυτής δέχεται στην είσοδό του τις τυχαίες ηλεκτρικές ταλαντώσεις που προκαλούνται από το θερμικό θόρυβο και τις ενισχύει. Από όλες αυτές τις ταλαντώσεις, στην είσοδο του ενισχυτή επιστρέφει μόνο εκείνη που επέτρεψε το φίλτρο κι έτσι ενισχύεται ξανά! Με αυτό το μηχανισμό, μέσα σε ελάχιστο χρονικό διάστημα το κύκλωμα καταλήγει να παράγει μια ταλάντωση σταθερής συχνότητας και μεγάλου πλάτους.

Οι περισσότεροι μικροελεγκτές ενσωματώνουν όλα τα τμήματα ενός ταλαντωτή, εκτός από το φίλτρο. Αναρωτιέστε για ποιο πράγμα μιλάμε; Μα, φυσικά, για τους κρυστάλλους και τα αντίστοιχα κεραμικά. Τα εν λόγω εξαρτήματα παίζουν το ρόλο του φίλτρου, στο βρόχο ανάδρασης ενός ενισχυτή. Για παράδειγμα, ένας κρύσταλλος των 16MHz λειτουργεί σαν φίλτρο που επιτρέπει τη διέλευση μόνο των ηλεκτρικών ταλαντώσεων με συχνότητα 16MHz. Το πώς επιτυγχάνεται αυτό το φιλτράρισμα σχετίζεται με ένα φαινόμενο που ονομάζεται πιεζοηλεκτρικό, καθώς και με τις διαστάσεις του κρυστάλλου. Οι κρύσταλλοι θεωρούνται πολύ αξιόπιστοι για την παραγωγή παλμών σταθερής συχνότητας. Κάτι παρόμοιο ισχύει και για τα αντίστοιχα κεραμικά εξαρτήματα, αν κι αυτά παρουσιάζουν μεγαλύτερη ευαισθησία στις μεταβολές της θερμοκρασίας. Πάντως, για τον υπολογιστή μας,προτιμήσαμε να στηριχτούμε σε μια ακόμα πιο αξιόπιστη λύση: Τους ολοκληρωμένους κρυσταλλικούς ταλαντωτές που, εκτός από τον ενισχυτή και τον κατάλληλο κρύσταλλο, ενσωματώνουν σύστημα αντιστάθμισης των μεταβολών της θερμοκρασίας.

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

Εικόνα 15. Στην εικόνα βλέπουμε δύο κρυστάλλους και ένα κεραμικό στοιχείο, που χρησιμοποιούνται ως φίλτρα στους βρόχους ανάδρασης των ταλαντωτών. Οι κρύσταλλοι παρουσιάζουν μεγαλύτερη σταθερότητα, αλλά η χρήση τους απαιτεί και την παρουσία δύο πυκνωτών. Στα αντίστοιχα κεραμικά εξαρτήματα οι πυκνωτές είναι ενσωματωμένοι.

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

Εικόνα 16. Η συσκευασία αυτών των εξαρτημάτων θυμίζει τους κρυστάλλους. Πρόκειται για ολοκληρωμένους ταλαντωτές που, εκτός από τον κρύσταλλο, περιλαμβάνουν τον απαιτούμενο ενισχυτή και ένα κύκλωμα αντιστάθμισης των μεταβολών της θερμοκρασίας.

Πολλά από τα εξαρτήματα του υπολογιστή υπήρχαν ήδη στα συρτάρια μας, ενώ κάποια άλλα τα αγοράσουμε κατά δεκάδες, αφού αυτή η ποσότητα συνέφερε πολύ περισσότερο. Έτσι καταφέραμε να κατασκευάσουμε τον υπολογιστή και ταυτόχρονα να ανανεώσουμε το απόθεμα των εξαρτημάτων μας. Τελικά, το κόστος για τον υπολογιστή και μόνο ήταν πολύ χαμηλότερο από τα 81€ που υπονοεί ο πίνακας.

Πολλά από τα εξαρτήματα του υπολογιστή υπήρχαν ήδη στα συρτάρια μας, ενώ κάποια άλλα τα αγοράσουμε κατά δεκάδες, αφού αυτή η ποσότητα συνέφερε πολύ περισσότερο. Έτσι καταφέραμε να κατασκευάσουμε τον υπολογιστή και ταυτόχρονα να ανανεώσουμε το απόθεμα των εξαρτημάτων μας. Τελικά, το κόστος για τον υπολογιστή και μόνο ήταν πολύ χαμηλότερο από τα 81€ που υπονοεί ο πίνακας.

3 Responses to “Κατασκευάστε έναν υπολογιστή, μέρος 2: Από τη θεωρία στην πλακέτα”

  1. ouga | 11/10/2016 at 01:20

    μερικά υλικά είτε δεν υπάρχουν είτε υπάρχουν πιο ακριβά και σε διάσπαρτους προμηθευτές (το γνωστό πρόβλημα των ηλεκτρονικών εξαρτημάτων).
    στείλε μερικές προτάσεις-λύσεις όποτε βολεύεσαι.
    ωραίο άρθρο ζουμερότατο.

    • Spir@lEvolution | 07/11/2016 at 15:28

      Είναι πολύ ενοχλητικό το πρόβλημα με τα εξαρτήματα. Κάθεσαι να φτιάξεις κάτι με όλο σου το μεράκι και ξαφνικά διαπιστώνεις οτι σου λείπει ένα εξάρτημα, το οποίο ωστόσο δεν υπάρχει σε κανένα κατάστημα της περιοχής σου — για να μην πω της χώρας. Υποθέτω οτι αυτό που δυσκολεύεσαι να βρεις είναι η μνήμη κι ενδεχομένως τα “stackable pin header”. Το πρώτο υπάρχει μόνο στο eBay. Εγώ τουλάχιστον, δεν το έχω βρει πουθενά αλλού. Το δεύτερο διατίθεται σε πολλά καταστήματα, αλλά θα σου πρότεινα και πάλι το eBay. Οι υπόλοιποι το δίνουν σε αδικαιολόγητα υψηλές τιμές. Κάτι παρόμοιο ισχύει και για τις πλακέτες — ψάξε στο eBay. Τα υπόλοιπα δεν θα σε δυσκολέψουν. Υπάρχουν σε όλα τα μεγάλα *ηλεκτρονικά* καταστήματα…

  2. ouga | 07/11/2016 at 22:17

    ευχαριστούμε για την απάντηση,
    όσον αφορά την μνήμη (την toshiba) βρήκα μια παραπλήσια με τα ίδια χαρακτηριστικά.
    Για τα “stackable pin header” έψαξα παντού και δεν βρήκα παρά μόνο στο ebay, μήπως
    έχεις κάποιους από εδώ να μας αναφέρεις, γιατί που να περιμένει κάποιος (είναι και τα μόνα
    που λείπουν και δεν θέλω να βάλω μεταλλικά στηρίγματα/βάσεις όπως γίνεται στους η/υ
    και αλλού).
    Τα βασικότερα εξαρτήματα τα βρήκα από “ντόπιους εντός χώρας” και σε “ξυριστικές” τιμές
    (δυστυχώς δεν ήξερα την κατάληξη για να τα πάρω όλα απέξω).
    Τον προγραμματιστή τον πήρα “εντός χώρας” στα 52 ευρώ και είναι τελικά “αντίγραφο”
    των atmel, αναγνωρίζεται μέχρι και το avr studio 4.18, αν δε υπάρξει πρόβλημα θα
    χρησιμοποιήσω τον arduino (σύμφωνα με τα “ιερά γραπτά κείμενα” μεταξύ των οποίων
    και το άρθρο του τεύχους 25 του περιοδικού).
    Αν δεν σου κάνει κόπο, απάντησε όποτε μπορείς σε πιθανές μελλοντικές ερωτήσεις, σχετικά
    με διευκρινίσεις ή διαφοροποιήσεις ή και επεκτάσεις της κατασκευής.
    Τα άρθρα της κατασκευής είναι “ζουμερότατα” καθώς και “άκρως διδακτικά”.

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων