Dit artikel beschrijft een hardwareproject waarbij de openingsriff van 'At Doom's Gate' wordt gereproduceerd zonder gebruik van microcontrollers of software. Het circuit is opgebouwd uit vijf hoofdonderdelen:
- Tempoklok: Een NE555 astabiele oscillator die het ritme bepaalt (ca. 7,33 Hz).
- Sequentie-teller en decoder: Een 74LS161 binaire teller en een 74LS154 decoder die de 15 stappen van de riff doorlopen.
- Diode-notematrix: Een matrix van 1N4148-diodes die de 15 posities koppelt aan zes specifieke toonhoogtes.
- Audio-oscillator: Een tweede 555-timer die de daadwerkelijke tonen genereert op basis van de selectie.
- Audioversterker: Een PAM8302 die het signaal naar de luidspreker stuurt.
Het resultaat is een volledig analoge/digitale implementatie die een muziekfragment afspeelt door gebruik te maken van basiscomponenten uit de 7400-serie en timers.
Doom spelen op 555-timers
Inleiding
Door de jaren heen zijn mensen erin geslaagd om Doom op vrijwel alles te draaien. Rekenmachines, camera's, geldautomaten, printers en talloze andere apparaten die nooit bedoeld waren voor een first-person shooter, zijn in dienst genomen. Daarom besloot ik te kijken of ik Doom kon spelen op een paar 555-timers.
Nou ja, bijna.
Dit project draait niet daadwerkelijk het spel Doom. In plaats daarvan speelt het de openingsriff van "At Doom's Gate", de muziek uit het eerste level van het originele spel. Dit gebeurt zonder microcontroller, computer of enige vorm van software.
Het circuit maakt gebruik van twee 555-timers, enkele 7400-serie logische chips, een diode-matrix, analoge schakelaars en een kleine audioversterker. Eén 555-timer bepaalt het tempo, terwijl de tweede de eigenlijke noten genereert. Alles daartussen houdt bij waar het circuit zich in de riff bevindt en vertelt de audio-oscillator welke toonhoogte hij moet genereren.
Hoe het werkt
Het circuit kan worden onderverdeeld in vijf hoofdonderdelen:
- Tempoklok
- Sequentie-teller en decoder
- Diode-notematrix
- Toonhoogteselectie en audio-oscillator
- Audioversterker
Het volledige signaalpad ziet er als volgt uit:
- 555 tempoklok
- → 74LS161 binaire teller
- → 74LS154 4-naar-16 decoder
- → 1N4148 diode-matrix
- → 74HCT14
- → 2 x CD4066 analoge schakelaars
- → 555 audio-oscillator
- → PAM8302
- → luidspreker
Het tempo instellen
De eerste NE555 is geconfigureerd als een astabiele oscillator. Een condensator laadt herhaaldelijk op en ontlaadt via een paar weerstanden, waardoor de output op pin 3 continu schakelt tussen hoog en laag.
Deze oscillator draait op ongeveer 7,33 Hz, wat betekent dat er elke 136 milliseconden een nieuwe klokpuls wordt gegenereerd. Op dit punt produceert de 555 nog geen audio; zijn enige taak is het bepalen van de timing van de riff.
Een trimmer-potentiometer in het timingnetwerk maakt het mogelijk om de klokfrequentie nauwkeurig af te stellen. Dit is gedaan door pin 3 te meten met een logic analyzer.
Tellen door de noten
De klokoutput gaat direct naar een 74LS161N, een vierbits synchrone binaire teller. Elke klokpuls verhoogt de teller met één:
- 0000
- 0001
- 0010
- 0011
- 0100
- ...
Vier bits zorgen voor 16 mogelijke toestanden, wat goed uitkomt aangezien dit circuit 15 posities nodig heeft voor het gedeelte van de riff dat wordt afgespeeld.
De vier teller-outputs voeden een 74LS154N 4-naar-16 decoder. In plaats van elders in het circuit met een vierbits binair getal te moeten werken, levert de decoder een individuele output voor elke tel. Wanneer de teller op nul staat, wordt Y0 geselecteerd; bij één wordt Y1 geselecteerd, enzovoort.
De 74LS154-outputs zijn 'active-low', wat betekent dat de momenteel geselecteerde output laag wordt, terwijl alle andere hoog blijven. Hierdoor heeft het circuit één fysieke draad die correspondeert met elke positie in de sequentie.
Een teller van 15 stappen maken
Er zijn 16 mogelijke tellertoestanden, maar er zijn er slechts 15 nodig. De laatste decoder-output, Y15, wordt daarom gebruikt om de teller te resetten in plaats van een nieuwe noot te spelen.
Y15 bestuurt een klein inverter/driver-circuit dat is opgebouwd uit twee 2N3904 NPN-transistoren. Wanneer Y15 actief wordt, trekt het transistorcircuit de active-low CLEAR-ingang van de 74LS161 laag. De teller keert onmiddellijk terug naar nul. Een drukknop die is aangesloten op de CLEAR-ingang zorgt daarnaast voor een handmatige reset.
De muziek opslaan met diodes
De teller weet nu waar hij zich in de riff bevindt, maar er is iets nodig dat bepaalt welke toonhoogte bij elke positie hoort. Dit wordt afgehandeld door 15 1N4148-diodes.
Er zijn 15 nootposities in de sequentie, maar slechts zes verschillende toonhoogtes. Er zijn zes noot-bussen gecreëerd die corresponderen met deze toonhoogtes. Elke output van de 74LS154 is via een diode verbonden met de bus voor de betreffende toonhoogte.
Doom spelen op 555-timers
Inleiding
Door de jaren heen zijn mensen erin geslaagd om Doom op vrijwel alles te draaien. Rekenmachines, camera's, geldautomaten, printers en talloze andere apparaten die nooit bedoeld waren voor een first-person shooter, zijn in dienst genomen. Daarom besloot ik te kijken of ik Doom kon spelen op een paar 555-timers.
Nou ja, bijna.
Dit project draait niet daadwerkelijk het spel Doom. In plaats daarvan speelt het de openingsriff van "At Doom's Gate", de muziek uit het eerste level van het originele spel. Dit gebeurt zonder microcontroller, computer of enige vorm van software.
Het circuit maakt gebruik van twee 555-timers, enkele 7400-serie logische chips, een diode-matrix, analoge schakelaars en een kleine audioversterker. Eén 555-timer bepaalt het tempo, terwijl de tweede de eigenlijke noten genereert. Alles daartussen houdt bij waar het circuit zich in de riff bevindt en vertelt de audio-oscillator welke toonhoogte hij moet genereren.
Hoe het werkt
Het circuit kan worden onderverdeeld in vijf hoofdonderdelen:
- Tempoklok
- Sequentie-teller en decoder
- Diode-notematrix
- Toonhoogteselectie en audio-oscillator
- Audioversterker
Het volledige signaalpad ziet er als volgt uit:
- 555 tempoklok
- → 74LS161 binaire teller
- → 74LS154 4-naar-16 decoder
- → 1N4148 diode-matrix
- → 74HCT14
- → 2 x CD4066 analoge schakelaars
- → 555 audio-oscillator
- → PAM8302
- → luidspreker
Het tempo instellen
De eerste NE555 is geconfigureerd als een astabiele oscillator. Een condensator laadt herhaaldelijk op en ontlaadt via een paar weerstanden, waardoor de output op pin 3 continu schakelt tussen hoog en laag.
Deze oscillator draait op ongeveer 7,33 Hz, wat betekent dat er elke 136 milliseconden een nieuwe klokpuls wordt gegenereerd. Op dit punt produceert de 555 nog geen audio; zijn enige taak is het bepalen van de timing van de riff.
Een trimmer-potentiometer in het timingnetwerk maakt het mogelijk om de klokfrequentie nauwkeurig af te stellen. Dit is gedaan door pin 3 te meten met een logic analyzer.
Tellen door de noten
De klokoutput gaat direct naar een 74LS161N, een vierbits synchrone binaire teller. Elke klokpuls verhoogt de teller met één:
- 0000
- 0001
- 0010
- 0011
- 0100
- ...
Vier bits zorgen voor 16 mogelijke toestanden, wat goed uitkomt aangezien dit circuit 15 posities nodig heeft voor het gedeelte van de riff dat wordt afgespeeld.
De vier teller-outputs voeden een 74LS154N 4-naar-16 decoder. In plaats van elders in het circuit met een vierbits binair getal te moeten werken, levert de decoder een individuele output voor elke tel. Wanneer de teller op nul staat, wordt Y0 geselecteerd; bij één wordt Y1 geselecteerd, enzovoort.
De 74LS154-outputs zijn 'active-low', wat betekent dat de momenteel geselecteerde output laag wordt, terwijl alle andere hoog blijven. Hierdoor heeft het circuit één fysieke draad die correspondeert met elke positie in de sequentie.
Een teller van 15 stappen maken
Er zijn 16 mogelijke tellertoestanden, maar er zijn er slechts 15 nodig. De laatste decoder-output, Y15, wordt daarom gebruikt om de teller te resetten in plaats van een nieuwe noot te spelen.
Y15 bestuurt een klein inverter/driver-circuit dat is opgebouwd uit twee 2N3904 NPN-transistoren. Wanneer Y15 actief wordt, trekt het transistorcircuit de active-low CLEAR-ingang van de 74LS161 laag. De teller keert onmiddellijk terug naar nul. Een drukknop die is aangesloten op de CLEAR-ingang zorgt daarnaast voor een handmatige reset.
De muziek opslaan met diodes
De teller weet nu waar hij zich in de riff bevindt, maar er is iets nodig dat bepaalt welke toonhoogte bij elke positie hoort. Dit wordt afgehandeld door 15 1N4148-diodes.
Er zijn 15 nootposities in de sequentie, maar slechts zes verschillende toonhoogtes. Er zijn zes noot-bussen gecreëerd die corresponderen met deze toonhoogtes. Elke output van de 74LS154 is via een diode verbonden met de bus voor de betreffende toonhoogte.