Sommario:

Costruisci un computer con conoscenze di base sull'elettronica: 9 passaggi (con immagini)
Costruisci un computer con conoscenze di base sull'elettronica: 9 passaggi (con immagini)

Video: Costruisci un computer con conoscenze di base sull'elettronica: 9 passaggi (con immagini)

Video: Costruisci un computer con conoscenze di base sull'elettronica: 9 passaggi (con immagini)
Video: GUARDATE COSA è successo in classe! Ho promesso di mettere 10 a chi stacca i quaderni #shorts 2024, Dicembre
Anonim
Costruisci un computer con una conoscenza di base dell'elettronica
Costruisci un computer con una conoscenza di base dell'elettronica

Hai mai voluto fingere di essere davvero intelligente e costruire il tuo computer da zero? Non sai nulla di ciò che serve per realizzare un computer minimo? Bene, è facile se conosci abbastanza l'elettronica per mettere insieme alcuni circuiti integrati correttamente. Questo istruibile presumerà che tu sia bravo in quella parte, oltre ad alcune altre cose. E in caso contrario, non dovrebbe essere troppo difficile da seguire se sai come viene eseguita la breadboard/prototipazione. Lo scopo di questo tutorial è di procurarti un "computer" funzionante senza sapere molto su come funzionano. Tratterò il cablaggio e le basi della programmazione, oltre a fornirti un programma molto breve. Quindi iniziamo.

Passaggio 1: parti e cose

Parti e cose
Parti e cose
Parti e cose
Parti e cose

Un "computer" richiede: alimentazione, input, elaborazione, memoria e output. Tecnicamente avremo tutte queste cose. Tratterò queste cose in quest'ordine.

Per l'alimentazione, avrai bisogno di una sorgente da 5 volt (qui di seguito etichettata come 5V). Si raccomanda che sia una fonte regolamentata in modo da non friggere accidentalmente parti nel circuito. Il nostro input saranno i pulsanti. Il trattamento è autoesplicativo; stiamo usando un processore. La memoria consisterà solo di ROM. I registri interni generici del processore saranno sufficienti per essere utilizzati come RAM. L'uscita sarà LED.

1 LM7805C - Regolatore 5V

1 ZYLOG Z80 - Processore

1 AT28C64B - EEPROM

1 74LS273 - Infradito Ottale D

1 74HC374E - Infradito Ottale D

3 CD4001BE - Cancello NOR quadruplo

1 NE555 - Generatore di clock

Resistenza da 2 1K Ohm

1 resistore da 10K Ohm

1 rete di resistori da 10K Ohm; 8 con bus o 8 resistori aggiuntivi da 10K

1 condensatore da 1uF

1 condensatore da 100uF

1 pulsante

1 matrice di pulsanti 3x4 OPPURE 8 pulsanti aggiuntivi

8 LED - La scelta del colore non ha importanza

8 resistori da 330 Ohm o rete di resistori

1 tagliere davvero grande o più piccole

Tanto e tanto filo

Nel mio schema ho installato uno stick di SRAM. Non devi nemmeno preoccuparti di questo. L'ho aggiunto allo schema solo per riflettere accuratamente il mio circuito reale e l'ho aggiunto al circuito per un uso futuro. Inoltre è stato aggiunto allo schema un gate OR quad (74LS36). Gli ingressi delle due porte non utilizzate sono legati a VCC e le loro uscite sono lasciate flottanti (non disegnate). Inoltre non sono stati disegnati né elencati sopra due condensatori sul circuito di alimentazione.

Sto alimentando 12V regolati nel regolatore 5V per alimentare l'intera breadboard. Fa piuttosto caldo, quindi ho attaccato un dissipatore di calore per raffreddarlo. Se usi meno di 12V per alimentare il regolatore (usa almeno 7V), dovrebbe funzionare più fresco.

Lo Z80 è il luogo in cui avviene la magia. Prende le istruzioni memorizzate nella ROM e le esegue. La EEPROM memorizza il nostro programma per l'esecuzione del processore.

Il flip-flop ottale che è il nostro dispositivo di output che aggancia i dati sul bus dati alla propria uscita. Questo ci permette di cambiare cosa c'è sul bus, che è un passaggio molto importante fatto più volte per istruzione, senza cambiare ciò che l'utente/spettatore vede. Il flip-flop non può pilotare la corrente necessaria per accendere i LED di uscita, quindi si alimentano in due dei chip quadrupli NOR che agiscono per bufferizzare le 8 linee dati per pilotare i LED. Poiché le uscite dei gate sono invertite, dobbiamo anche cablare i LED da invertire, ma ci arriveremo quando arriveremo a questo. L'altro chip NOR viene utilizzato per la decodifica logica ma vengono utilizzate solo tre porte.

Il flip-flop ottale utilizzato per l'input è essenzialmente la stessa cosa. I flip-flop di uscita mantengono la loro uscita alta o bassa, quindi non può essere utilizzata per pilotare il bus; conterrebbe i dati sul bus. Il flip-flop utilizzato per l'input sostituisce il pin /RESET con /EN, che più o meno disconnette le uscite del (e dal) chip in modo che non conservi i dati (uscite a tre stati).

Passaggio 2: cablaggio dei circuiti di alimentazione, clock e ripristino

Cablaggio dei circuiti di alimentazione, clock e reset
Cablaggio dei circuiti di alimentazione, clock e reset
Cablaggio dei circuiti di alimentazione, clock e reset
Cablaggio dei circuiti di alimentazione, clock e reset
Cablaggio dei circuiti di alimentazione, clock e reset
Cablaggio dei circuiti di alimentazione, clock e reset

NOTA: per tutte le parti, cablare prima i binari di alimentazione. Di tutte le cose da dimenticare di cablare, è molto meno probabile che i chip sopravvivano alle connessioni di alimentazione dimenticate.

Il circuito di alimentazione è il circuito più semplice da cablare, seguito rispettivamente dai circuiti di reset e di clock. Nella foto, l'ingresso a 12V si trova sulla ciabatta all'estrema destra. Il filo marrone, nascondendone uno giallo sotto, alimenta il 12V al regolatore. L'uscita del regolatore alimenta ogni altra ciabatta sulla breadboard e ogni ciabatta condivide un terreno comune perché è così che funziona l'elettronica.

Il processore richiede un circuito di clock per funzionare. Senza di esso, rimarrà semplicemente lì nel suo stato inizializzato e non farà nulla. L'orologio gestisce i registri a scorrimento interni del processore in modo che possa generare i segnali per fare cose. Qualsiasi ingresso di clock andrà bene, anche un semplice resistore e pulsante. Ma ci vogliono molti cicli di clock per eseguire le istruzioni. L'istruzione per scrivere sull'uscita richiede di per sé 12 cicli. Probabilmente non vuoi sederti lì e premere un pulsante più di 100 volte per ottenere solo un ciclo del codice (i numeri effettivi sono alla fine dell'istruzione). Ecco a cosa serve il NE555. Fa il cambio per te e lo fa a una velocità (relativamente) veloce.

Prima di iniziare a cablare qualsiasi cosa, potresti voler andare avanti e capire come vuoi che i tuoi componenti siano disposti sulla scheda. Il mio circuito di clock è un po' appena messo nella parte inferiore della scheda in modo da non intralciare gli altri componenti. Supponiamo che tu sappia come creare un orologio di base con il timer. Se non lo fai, ti consigliamo di cercare "555 Astable" e seguire un tutorial. Utilizzare il resistore da 1K per passare tra il binario 5V e il pin 7 del timer (R1) e il 10K tra il pin 7 e il pin 2 (R2). Assicurati di legare il pin di ripristino, pin 4, alla guida 5V in modo che il timer possa funzionare. Ho messo un LED sull'uscita del mio in modo da poter verificare che l'orologio funzionasse davvero, ma non è necessario.

Un'altra opzione con il NE555 è configurarlo come una porta NOT e utilizzare un resistore da 1K per ricollegare l'uscita all'ingresso. Di solito si consiglia di utilizzare 3 timer per farlo, ma ho scoperto che solo 1 dovrebbe funzionare bene. Sappi solo che se lo fai, oscillerà a una velocità molto elevata e sarà molto difficile, persino impossibile, dire che i LED di uscita stanno lampeggiando. Questa configurazione è chiamata "oscillatore ad anello".

Tieni presente che non stiamo ancora collegando l'orologio al processore. Lo stiamo semplicemente preparando. Notare anche il chip logico appena sopra l'orologio nell'immagine. È stato aggiunto molto più tardi e quello era l'unico posto semi-ragionevole rimasto per posizionarlo. Viene utilizzato per la selezione della RAM/ROM. Questa istruzione ignora la RAM, quindi non avrai questo chip sulla tua scheda.

Ora colleghiamo il circuito di ripristino. Per prima cosa devi trovare un posto sulla tua tavola per questo. Ho scelto proprio accanto all'orologio. Aggiungi il tuo pulsante alla lavagna. Utilizzare un resistore da 1K per collegare un lato del pulsante al binario 5V. I nostri pin RESET sono attivi bassi, il che significa che dobbiamo tenerli alti. Ecco a cosa serve la resistenza. Questa giunzione è anche il punto in cui si collegano i pin di ripristino. L'altro lato del pulsante va dritto a terra. Se vuoi resettare all'accensione, aggiungi anche il condensatore da 10uF a questa giunzione. Manterrà la tensione sui pin di ripristino bassa abbastanza a lungo da attivare il circuito di ripristino all'interno del processore e del flip-flop.

Passaggio 3: cablaggio dello Z80

Ora arriviamo al nocciolo della questione. Collegheremo la bestia che è la Z80. Sulla mia scheda, ho messo lo Z80 in alto sulla stessa sezione della scheda del circuito di reset. Come affermato in precedenza, cablare prima i binari di alimentazione. 5V va al pin 11 a sinistra e la massa è un pin in basso ma a destra. Potresti aver notato anche la larghezza dispari del chip. Ti farà avere 3 connettori aperti su un lato sulla breadboard e 2 sull'altro. Rende solo meno conveniente collegare cose aggiuntive se si sceglie di farlo.

I seguenti numeri di pin - presumo che tu sappia come contare i pin su un circuito integrato - sono ingressi inutilizzati e devono essere collegati alla guida 5V: 16, 17, 24, 25.

Ricordi il nostro orologio? La sua uscita va al pin 6 dello z80. Il circuito di reset si collega al pin 26. Senza avere gli altri componenti sulla scheda, questo è quanto posso ottenere con il cablaggio dello stesso z80. Ulteriori cablaggi verranno eseguiti nei passaggi successivi.

Poiché avevo già costruito il circuito prima ancora di prendere in considerazione la possibilità di scrivere questo istruibile, terrò a bada l'immagine fino al passaggio successivo.

Passaggio 4: cablaggio della ROM

Cablaggio della ROM
Cablaggio della ROM

NOTA: potresti voler evitare di posizionarlo effettivamente sulla scacchiera se ha ancora bisogno di essere programmato (ne parleremo più avanti).

Per la ROM, l'ho posizionato accanto allo Z80 a destra e l'ho anche spostato di un perno verso il basso sulla breadboard. Questo mi ha permesso di collegare direttamente il bus degli indirizzi, ma ne parleremo più avanti. L'AT28C64B è una EEPROM, il che significa che può essere programmato più volte spegnendo e riaccendendo alcuni pin. Non vogliamo che la nostra EEPROM si riprogramma accidentalmente quando è nel circuito. Quindi, una volta collegati i binari di alimentazione, collegare il pin 27 (/WE) al binario 5V per disabilitare del tutto la funzione di scrittura.

Il mio programma è così piccolo che avevo solo bisogno di collegare le 5 linee di indirizzo inferiori (A0-A4), ma ho comunque cablato A5, A6 e A7 in modo da poter scrivere programmi più grandi senza lavoro aggiuntivo. Le linee di indirizzo aggiuntive (A8-A12) sono collegate direttamente a terra per impedire l'accesso indesiderato agli indirizzi superiori da ingressi flottanti. Con gli ingressi di indirizzo non utilizzati collegati a terra e il controllo di scrittura collegato a 5 V, il cablaggio del resto è piuttosto semplice. Trova A0 sul processore e collegalo ad A0 sulla ROM. Quindi trova A1 sul processore e collegalo ad A1 sulla ROM. Fallo finché non hai collegato tutti gli indirizzi insieme. Nell'immagine, il mio bus di indirizzi alla ROM è realizzato in cablaggio blu. Il bus degli indirizzi che va alla RAM è realizzato in cablaggio rosso. Questi cavi sono stati tutti pretagliati e spellati come forniti in un kit di cablaggio breadboard ed erano perfetti per questo cablaggio.

Dopo aver cablato gli indirizzi (questo è chiamato bus degli indirizzi), fai la stessa identica cosa per i pin etichettati D0, quindi D1, D2, ecc. Fallo per tutti i pin di dati (D0 - D7) e hai il tuo bus dati cablato. Abbiamo quasi finito di cablare la ROM. Trova il pin /CE (abilitazione chip) della ROM e collegalo al pin 19 del processore, /MREQ (richiesta di memoria), quindi trova /OE (abilitazione uscita) della ROM e collegalo al pin 21, /RD (leggi) del processore. Abbiamo finito. Tutti questi sono fatti con cavi jumper perché devono andare dall'altra parte del processore e una breadboard non offre spazio sufficiente per utilizzare un cablaggio ordinato come quello.

Passaggio 5: cablaggio dell'uscita

Cablaggio dell'uscita
Cablaggio dell'uscita
Cablaggio dell'uscita
Cablaggio dell'uscita

Poiché non era popolato, ho scelto la sezione della scheda a sinistra dello Z80 per l'output. Posiziona il flip-flop lì e collegali ai binari di alimentazione. Il pin 1, /MR (reset) può essere collegato direttamente al pin di ripristino del processore, ma è possibile lasciarlo legato alla guida 5V. In questo modo verranno visualizzati solo dati spazzatura fino alla prima scrittura. Nota come il chip ha un ingresso di clock sul pin 11. Questo ingresso è strano in quanto viene attivato quando il pin diventa alto. Si noti inoltre che questo pin NON è lo stesso clock che guida il processore. Questo orologio blocca i dati asseriti sul bus dati.

Ricordi come abbiamo collegato D0 - D7 sulla ROM agli stessi pin del processore? Fai esattamente lo stesso per questo chip. Il suo D0 va a D0 sul bus dati e così via. I pin che iniziano con una "Q" sono uscite. Prima di collegarli, dobbiamo aggiungere altri chip. Ho usato le porte quadruple NOR perché ne ho un tubo e ne avevo già bisogno, ma su qualsiasi chip funzionerà se lo colleghi correttamente. Avrei potuto collegare a massa un ingresso su tutte le porte e utilizzare anche gli altri ingressi, ma ho scelto di collegare entrambi gli ingressi per semplicità.

Ho posizionato i chip sotto il flip-flop per rendere più semplice il cablaggio diretto senza ponticelli, ma a questo punto stavo esaurendo il filo, quindi alla fine non importava. Il Q0, Q1….. Q7 del flip-flop va agli ingressi delle singole porte. Con 4 porte in ogni pacchetto/chip, avevo bisogno di 2 pacchetti e ho usato tutte le porte. Se trovi una versione del flip-flop in grado di pilotare i LED senza bisogno di buffer come questo, questi due chip non sono necessari. Se usi le porte come buffer che non hanno uscite invertite (AND/OR/XOR), puoi cablare i LED come ti aspetteresti. Se stai usando le mie stesse parti e/o le uscite sono invertite, i LED dovrebbero essere cablati come descritto di seguito. La prima immagine mostra la parte IC dell'output.

Utilizzare i resistori da 330 Ohm per collegare i LED positivi (anodo) alla guida 5V e collegare il negativo (catodo) all'uscita dei gate. Puoi vedere nella seconda immagine che ho usato due bus di resistori, ciascuno con solo cinque resistori interni. Il cablaggio dei LED in questo modo li farà illuminare quando l'uscita è disattivata. Lo facciamo perché l'uscita è disattivata quando l'ingresso è attivo. Assicurati assolutamente di tenere traccia di quali gate controllano le tue uscite dal controllo flip-flop. A meno che i tuoi LED non siano sparsi o il loro ordine non abbia senso, perderne traccia può causare confusione in seguito quando ti chiedi perché l'output è sbagliato.

Passaggio 6: cablaggio dell'ingresso

Cablaggio dell'ingresso
Cablaggio dell'ingresso

Prendi quell'infradito 74HC374 e mettilo da qualche parte. Il mio era da qualche parte sotto lo Z80 verso il fondo della scheda. Ricordi l'ultima volta quando abbiamo collegato D0 a D0 e D1 a D1 e così via? Questa volta colleghiamo Q0 a D0 e Q1 a D1 e così via. Per fortuna questa volta non dobbiamo aggiungere alcun chip buffer, ahah. Invece collegheremo un 10K Ohm a ciascun pin "D" (D0-D7) e terra e quindi un pulsante agli stessi pin e alla guida 5V. Oppure puoi usare un bus resistore e ridurre molto il conteggio delle tue parti. Anche una matrice di pulsanti 3x4 (senza un output a matrice!!) Aiuterà. L'immagine mostra l'intero circuito di ingresso insieme alla logica della colla (quella parte è successiva).

Passaggio 7: logica della colla

Abbiamo un'ultima cosa da collegare. Si chiama "glue logic" perché serve a decodificare i segnali di controllo per far funzionare tutto; è ciò che tiene insieme il circuito. Quando il processore vuole scrivere dati sull'uscita, sia /IORQ che /WR (rispettivamente 20 e 22) diventano bassi e i dati inviati vengono asseriti sul bus di dati. Il pin dell'orologio su entrambi i flip-flop è attivo alto, il che significa che i dati vengono bloccati quando il pin riceve un segnale alto. Usiamo un gate NOR e colleghiamo /IORQ a un ingresso del gate e /WR all'altro ingresso. Quando uno dei due è alto, il che significa che i circuiti IO non vengono selezionati o non viene eseguita un'operazione di scrittura, l'uscita che alimenta il clock del flip-flop rimane bassa. Quando entrambi gli ingressi sono bassi, e solo quando, l'uscita diventa alta e il flip-flop aggancia i dati.

Ora dobbiamo cablare il flip-flop di ingresso. Possiamo cablare il pin dell'orologio più o meno allo stesso modo del precedente, ma usando /IORQ e /RD. Ma a differenza degli altri flip-flop, abbiamo anche un pin /OE che deve essere abbassato solo quando /IORQ e /RD sono bassi. Potremmo usare un cancello OR. Oppure potremmo semplicemente prendere il segnale che abbiamo già per l'orologio e invertirlo con una delle due porte invertenti che abbiamo già a disposizione. Al momento della dichiarazione di questo istruibile, non avevo un cancello OR disponibile, quindi ho usato quest'ultima opzione. L'utilizzo di quest'ultima opzione significava che non avevo comunque bisogno di aggiungere parti aggiuntive.

Passaggio 8: programmazione

Se il tuo cablaggio è corretto e la mia spiegazione chiara, non resta che programmare la ROM. Ci sono alcuni modi per farlo. Potresti prendere la via più semplice e ordinare un nuovo chip da Digikey. Quando ordini la parte, avrai la possibilità di caricare un file HEX e loro lo programmeranno prima di spedirlo. Usa i file HEX o OBJ allegati a questa istruzione e aspetta solo che arrivi per posta. L'opzione 2 è costruire un programmatore con un Arduino o qualcosa del genere. Ho provato quella rotta e non è riuscito a copiare correttamente determinati dati e mi ci sono volute settimane per capirlo. Ho finito per fare l'opzione 3, che è programmarlo a mano e capovolgere gli interruttori per controllare l'indirizzo e le linee dati.

Una volta convertito direttamente nel codice OP del processore, l'intero programma si trova in soli 17 byte di spazio di indirizzamento, quindi la programmazione manuale non era troppo terribile. Il programma carica nel registro generico B il valore 00. Il registro B viene utilizzato per memorizzare un risultato della somma precedente. Poiché il registro A è il luogo in cui avviene la matematica, non lo useremo per memorizzare i dati.

Parlando del registro A, eseguiamo un comando IN, che legge l'input e memorizziamo i dati letti in A. Quindi aggiungiamo il contenuto del registro B e emettiamo il risultato.

Successivamente, il registro A viene copiato nel registro B. E poi eseguiamo una serie di comandi di salto. Poiché tutti i salti puntano al byte inferiore delle linee di indirizzo e poiché il byte superiore dell'istruzione di salto è fornito nel secondo argomento ed è "00", possiamo forzare ogni salto a essere seguito da un NOP. Lo facciamo per dare tempo tra la visualizzazione dell'output e la lettura dell'input per evitare input accidentali. Ogni salto usa dieci cicli di clock e ogni NOP ne usa quattro. Se il ciclo impiega troppo tempo per i tuoi gusti, puoi aumentare la velocità di clock o puoi riprogrammarlo per utilizzare un salto in meno.

Passaggio 9: test

Se hai cablato tutto correttamente e la tua ROM è programmata correttamente, c'è un ultimo passaggio da compiere: collegarlo e vedere se funziona. Premi un pulsante e attendi qualche secondo. Sono necessari 81 cicli di clock affinché il programma raggiunga il suo primo ciclo e ogni ciclo richiede 74 cicli di clock.

Se non funziona, verifica la presenza di cortocircuiti e pin non collegati (apre) e altri problemi di cablaggio. Se hai disattivato il ripristino all'accensione, dovrai eseguire un ripristino manuale prima che il processore esegua qualsiasi operazione. Puoi anche collegare i LED al bus degli indirizzi per vedere se si comportano correttamente. Anch'io avevo problemi con questo, quindi li ho attaccati direttamente al bus dati. Questo mi ha permesso di vedere cosa veniva comunicato tra il processore e la ROM senza dovermi preoccupare se la ROM veniva letta correttamente, il che avrebbe richiesto diagrammi temporali e semplicemente non volevo coinvolgerlo. Si è rivelata una buona scelta perché alla fine ho catturato i codici OP problematici che sono stati memorizzati in modo errato.

Consigliato: