Rob's web

Drive draait door

Oude CD-ROM-drive speelt audio op commando

Dit project is ontstaan uit de wens om schaalmodellen op commando een realistisch geluid te kunnen laten produceren. Het commando zou daarbij afkomstig zijn van een drukknop of een naderingsdetector, maar we zijn er zeker van dat Elektuur-lezers talloze andere toepassingen kunnen bedenken.

In de modelbouw wordt voor het opnemen en weergeven van geluid meestal een geluids-IC uit de ISD25XX-serie gebruikt. Het nadeel daarvan is dat de audiobandbreedte maar 3 kHz is en dat er veel ruis en achtergrondgeluid is, dus voor realistische toepassingen zijn deze IC's minder geschikt. Daarvoor moeten we op zoek naar een betere oplossing.

Een andere aanpak

De afgelopen jaren hebben veel lezers ons gevraagd of het niet mogelijk is om een schakeling te ontwerpen waarmee een oude CD-ROM-drive als zelfstandige audiospeler kan worden gebruikt, dus zonder de hulp van een PC.

Soms kan dat heel eenvoudig door er spanning op te zetten, de plug van de hoofdtelefoon aan te sluiten, er een CD'tje in te doen en op de knop 'Play' te drukken. Veel moderne CD-ROM-drives hebben echter geen aparte playknop. Bovendien is het ook wel handig als je tracks kunnen kiezen of overslaan. Op die manier kan de oude CD-ROM-drive nog een nuttig tweede leven krijgen. Door de auteur is een schakeling ontworpen voor de sturing van ATAPI CD-ROM drives. Voor de duidelijkheid: ATAPI is geen merk, maar een type interface die op bijna alle in PC's gebruikte CD-ROM-drives wordt toegepast.

Het hart van de schakeling is een 40-pens PIC16F87X microcontroller met daarnaast nog enkele extra onderdelen. Het resultaat is een veelzijdige controller-module waarmee vrijwel iedere CD-ROM-drive kan worden aangestuurd. Als u zelf geen CD-ROM-drive meer over heeft, dan zijn er beslist wel kennissen of collega's die nog een exemplaar hebben liggen bij hun oude computerspullen.

Wat zijn de mogelijkheden?

De controller-module kan op twee manieren (modes) werken. Bij de eerste manier (single-trigger) wordt er slechts één startknop gebruikt, bij de tweede manier (multiple-trigger) kan een keuze worden gemaakt uit maximaal acht individuele startknoppen. In plaats van drukknoppen kunnen natuurlijk ook schakelsignalen worden gebruikt. Voor iedere mode zijn er een aantal opties die kunnen worden ingesteld met vier DIL-schakelaars. Tenslotte zijn er twee digitale uitgangen waarmee bijvoorbeeld verlichting of een motor kan worden geschakeld. Deze uitgangen worden automatisch actief tijdens de geluidsweergave. Omdat de werking van de uitgangen iets verschilt, kan afhankelijk van de toepassing de juiste uitgang worden gekozen.

Single-trigger-mode

Deze functie is heel eenvoudig. Door de knop in te drukken (of de trigger-ingang laag te maken) zal de module de CD-ROM-drive opdracht geven om een track van de CD te spelen. Er zijn daarbij vier opties die kunnen worden ingesteld met de DIL-schakelaars. Deze opties zijn:
DIL-schakelaar 1
off = maakcontact voor de startpuls.
on = verbreekcontact voor de startpuls.
DIL-schakelaar 2
off = pas na afloop van de track wordt op de startpuls gereageerd.
on = er wordt meteen op de startpuls gereageerd.
DIL-schakelaar 3
off = willekeurige track-selectie.
on = de tracks worden na elkaar afgespeeld.
DIL-schakelaar 4
off = de CD blijft continu draaien (de automatische time-out van de CD-ROM-drive wordt niet actief).
on = na time-out stopt het draaien.

De reden voor deze laatste optie is de volgende. In het eerste geval zal de drive vrijwel onmiddellijk gaan spelen, omdat de CD altijd draait. Maar door slijtage kan de drive sneller kapot gaan. In het tweede geval zal er, als de CD niet meer draait, een korte startvertraging zijn. Voor toepassingen waarbij slechts af en toe geluid nodig is, zal dat meestal geen bezwaar zijn.

Er kunnen maximaal 24 tracks op de CD staan, omdat de inhoudsopgave (table of contents) in het geheugen van de PIC wordt opgeslagen en de plaatsruimte daarvoor is beperkt. Bij gebruik van de enkelvoudige startknop moeten de acht individue ingangen 'open' blijven.

Multiple-trigger-mode

In deze mode kan gebruik worden gemaakt van bijvoorbeeld acht aparte drukknoppen (of acht digitale signalen) om een track te kiezen. Door op knop 1 te drukken wordt track 1 gespeeld, knop 2 laat altijd track 2 spelen, enz. tot en met track 8. De gebruikte drukknoppen moeten maakcontacten hebben. Als een CD minder dan acht tracks heeft, kan alleen uit het aantal aanwezige tracks worden gekozen. Stel dat er drie tracks zijn, dan heeft het drukken op de knoppen 4 ... 8 geen effect.
DIL-schakelaar 1, moet 'off' staan. De trigger-ingang moet open blijven.
DIL-schakelaar 2 heeft geen effect.
DIL-schakelaar 3 heeft dezelfde werking als eerder genoemd.
DIL-schakelaar 4 idem.

Digitale schakeluitgangen

De schakeling heeft twee digitale uitgangen waarmee externe schakelingen zoals claxons, lampen, versterkers, elektrische deuropeners enz. kunnen worden geschakeld. Het schakelsignaal is een eenvoudig TTL-signaal (0/5 V), zodat het te schakelen apparaat een compatibele ingang moet hebben. De maximale uitgangsstroom bedraagt circa 2 mA.
De 'Output Immediate' uitgang wordt na een druk op een startknop meteen hoog en blijft hoog tot het einde van de weergave.
De 'Output Delay' uitgang wordt pas hoog als het spelen begint (dus na een eventuele opstartvertraging) en blijft hoog tot het einde van de weergave.

Schema
Figuur 1. De schakeling bestaat uit een 40-pens microcontroller met enkele toebehoren, waaronder een aantal ciruktoetsen voor de track-selectie en vier spanningstabilisators.

Opzet en opbouw

Het schema dat in figuur 1 is te zien, bestaat voornamelijk uit een microcontroller die tussen een aantal drukknoppen, schakelaars en connectors zit. De microcontroller is een 40-pens PIC16F871, die voldoende I/0-pennen heeft om alle benodigde ATA-interfacelijnen aan te sluiten, plus de start-ingangen, de DIL-schakelaars en de schakeluitgangen. Uit het schema blijkt dat er verder maar weinig onderdelen nodig zijn. Wat in het schema niet is te zien, is dat bij de enkelvoudige startingang RBO (K3) en de ingangen voor de DIL-schakelaars RB1...B4 (S9) de inwendige pullup-weerstanden zijn geactiveerd. De overige poortlijnen van de PIC16F871 zijn verbonden met de IDE(ATAPI)-interface van de drive via K4. De weerstanden R3...R9 vormen samen met R2 een spanningsdeler-netwerk dat is aangesloten op AN0 van de PIC. Als een knop wordt ingedrukt, komt op ANO een unieke, bij deze knop behorende spanning te staan. Deze spanning wordt gemeten door de A/D-converter in de PIC. Hierbij wordt er wel van uit gegaan, dat het niet nodig is om knoppen die tegelijk worden ingedrukt van elkaar te onderscheiden. Als de acht individuele startknoppen Sl ... S8 niet nodig zijn, kunnen ze worden weggelaten samen met de weerstanden R3...R9. R2 mag niet worden weggelaten, die is nodig om ANO hoog te houden.

De PIC wordt door kristal X1 (en de bijbehorende condensatoren C7 en C8) geklokt op 4 MHz. De opties die door de gebruiker met DIL-schakelaars S9.1...S9.4 kunnen worden ingesteld, worden ingelezen door RB1...RB4. Verder is er een LED (D1) die dient als 'PIC-actief' indicator, iets dat zeker nuttig is. Voor de ontkoppeling van de 5-V-voedingsspanning van de PIC dienen twee condensatoren van 100 nF, C5 en C6.

De schakeling is ontworpen om op een enkelvoudige voedingsspanning van 15...18 VDC te kunnen werken. De voeding moet zwaar genoeg zijn om ook de 12V aansluiting van de CD-ROM-drive te voeden. Twee parallel geschakelde 7805-spanningsregelaars (IC3, IC4) zorgen voor de 5V spanning voor de PIC en de 5V spanning voor de CD-ROM-drive. Voor de 12V spanning worden twee parallel geschakelde 7812-regelaars gebruikt. Als alternatief kan een oude PC-voeding worden gebruikt, waarop de CD-ROM-drive direct kan worden aangesloten. De twee 7812-stabilisators kunnen dan worden weggelaten en de 12V spanning van de PC-voeding wordt dan aangesloten op het +12V punt van de schakeling. De 7805's verzorgen dan de +5 V voor de schakeling. Maar ook dan is extra koeling door een koelvin nodig.

Door de weerstanden R10 en R11 die in het schema een waarde van 1 kΩ hebben, wordt de stroom van de digitale uitgangen begrensd. De PIC kan op iedere uitgang maximaal 25 mA leveren (sink en source), dus de waarde van R10 en R11 kan worden verlaagd als meer stroom nodig is. De maximale waarde van 25 mA mag natuurlijk niet worden overschreden. Met een waarde van 1 kΩ kan in ieder geval via een stuurtransistor een relais worden bekrachtigd.

print layout
Figuur 2. De print is enkelzijdig en bevat 7 draadbruggen.

De print die in figuur 2 is te zien, is zo ontworpen dat hij gemakkelijk is op te bouwen en heel simpel is aan te sluiten. Ze is kant en klaar verkrijgbaar onder EPS-bestelnummer 030402-1, maar kan natuurlijk ook zelf worden gemaakt. De print-layout kan gratis worden gedownload van de Elektuur-website.

De print bevat in feite maar weinig onderdelen en het bestukken zal geen problemen opleveren. Toch weten we uit ervaring dat de meest eenvoudige onderdelen vaak worden vergeten en dan werkt de schakeling toch echt niet. We hebben het hier over de beruchte draadbruggen waarvan er zeven op de print aanwezig moeten zijn. Monteer ze als eerste, dan kunnen ze niet meer worden vergeten. Schroef de spanningsregelaars vast tegen een gemeenschappelijke koelplaat (zie figuur 3 en de onderdelenlijst). Isolatieplaatjes zijn niet nodig omdat de metalen basis van elke stabilisator met massa is verbonden.

De PIC is een vrij duur onderdeel dat beter niet kan worden gesoldeerd. Zet hem in een 40-pens voet van goede kwaliteit.

Prototype
Figuur 3. Het prototype geeft een goed idee van de opbouw van de interface.

Uit het schema zou men kunnen afleiden dat er heel wat aansluitdraden nodig zijn, maar in werkelijkheid is dat niet het geval zoals figuur 4 aantoont. Voor de verbinding van de interface met de CD-ROM-drive wordt een flatcable gebruikt die kant-en-klaar te koop is. Veel lezers hebben er nog wel een liggen of kunnen hem misschien uit een niet meer gebruikte computer halen.


Figuur 4. Zo wordt de interface aangesloten.

Het programma

Het programma dat in de PIC draait, is in assembler geschreven. De broncode en de HEX-file zijn verkrijgbaar op diskette (EPS 030402-11) en kunnen ook gratis worden gedownload van de Elektuur-website. Als men zelf in staat is om de PIC te programmeren, dan kan dat dus. Als alternatief is een geprogrammeerde PIC verkrijgbaar onder EPS-nr. 030402-41.

Voor geïnteresseerden is het zeker de moeite waarde om de broncode te bestuderen, zelfs als men niet van plan is om de schakeling te bouwen. Door de auteur is ruimschoots commentaar toegevoegd en als men iets afweet van assembler-taal zal het mogelijk zijn het programma te begrijpen, ondanks het feit dat de code zelf hier en daar wat ondoorzichtig is.

Stroomdiagram
In figuur 5 is het stroomdiagram van het hoofdprogramma te zien, dat in wezen vrij eenvoudig is.

De ATAPI-commando's waarvan door de PIC gebruik wordt gemaakt, zijn:
PLAY AUDIO MSF (speel van het opgegeven start- tot eindpunt. MSF = Minuten, Seconden, FVames; 75 Fkames = 1 seconde).
READ TOC (lees de TOC, table of contents).
READ SUBCHANNEL (opvragen van momentele audiostatus).
SEEK (positioneer de kop aan het begin van track 1, heeft tevens tot gevolg dat de CD gaat draaien en wordt daarom ook gebruikt om de drive continu te laten draaien).
Het READ SUBCHANNEL commando wordt op meerdere plaatsen in het programma gebruikt, namelijk steeds als het programma moet weten of er nog gespeeld wordt of dat het afspelen is afgelopen.

Testen

Het is een goede gewoonte om de 5V spanning voor de PIC te controleren voordat hij in het voetje wordt gezet. Dan kan de module worden getest zonder dat een CD-ROM-drive is aangesloten. Sluit de spanning aan en kijk of de LED aan pen RA4 een paar keer knippert. Verder gebeurt er niets, maar dit is het teken dat de PIC werkt en het programma draait. Schakel de spanning af, sluit een CD-ROM-drive op de interface aan en sluit de spanning weer aan. De LED moet weer een paar keer knipperen en dan blijven knipperen tot een CD in de drive wordt gedaan en de TOC (table of contents) correct is gelezen. Als de LED ophoudt met knipperen, is de module klaar om op een startsignaal te reageren. Vervolgens kunnen de diverse opties worden uitgeprobeerd. De CD-ROM-drive moet zijn ingesteld als MASTER device. Let ook op dat pen 1 van K4 op de print verbonden is met pen 1 van ATA-connector op de CD-ROM-drive (meestal is dat de rood gemerkte draad van de flatcable). Als een 12V voeding wordt gebruikt, moet die minimaal 1,2 A kunnen leveren. Het audiosignaal kan worden afgenomen van de analoge uitgang achterop de CD-ROM-drive of van de koptelefoon-aansluiting aan de voorkant (die reageert bovendien op de volumeregelaar). Om de totale kosten laag te houden, kunnen voor de weergave een paar actieve multimedia-luidsprekers worden gebruikt, maar ook een zelfgebouwde versterker met een paar kwaliteits weergevers hoort tot de mogelijkheden.

Onderdelenlijst

Weerstanden:
R1,R2,R6 = 10 k
R3,R10..12 = 1 k
R4 = 3k3
R5 = 6k8
R7 = 22k
R8 = 33k
R9 = 68k

Condensatoren:
C1,C2 = 47 µ/16 V radiaal
C3...C6,C9...C14 = 100 n
C7,C8 = 22p

Halfgeleiders:
D1 = LED rood, low current
IC1,IC2 = 7812
IC3,IC4 = 7805
IC5 - PIC 16F871/P (geprogrammeerd, EPS 030402-41)

Diversen:
S1...S8 = drukknop, 1 x maak
S9 = 4-voudige DIL-schakelaar
X1 = kristal 4,000 MHz
K1,K2,K3 = 2-voudige printkroonsteen, steek 5mm
K4 = 2x20-pensboxheader
K5 = voedingsconnector voor CD-ROM drive
oude CD-ROM-drive
Print EPS 030402-1 (zie Service-pagina's)
Koelvin, bijv. Fisher SK59 (6 K/W)
Source- en hex-files: EPS 030402-11
Print-layout en software zijn ook beschikbaar op www.elektuur.nl

ATAPI protocol in het kort

ATAPI (AT Attachment Packet Interface) apparaten gebruiken dezelfde interface als ATA (AT Attachment) apparaten zoals een hard-disk. Daarom is het eerst nodig om te weten hoe deze laatste werkt.

Een ATA-apparaat heeft een aantal 8-bits registers (bijvoorbeeld COMMAND, STATUS) en een 16-bits dataregister. Het is een parallelle interface met 16 bidirectionele datalijnen, waarbij de acht lage datalijnen worden gebruikt voor het lezen/schrijven van/naar de 8-bits registers. ATAPI-apparaten gebruiken dezelfde registerset, maar sommige registers hebben een andere naam en een andere functie. Jammer genoeg bood dit niet genoeg mogelijkheden voor de vereiste extra commando's, dus werd het concept van een 'command packet' geïntroduceerd samen met een nieuw ATA-commando, het 'ATAPI packet command'. De standaard procedure om een commando naar een ATAPI-apparaat te sturen is om eerst het (generieke) ATAPI-packet-commando naar het COMMAND-register van het apparaat te schrijven en vervolgens het commando-packet door meerdere keren naar het dataregister van het apparaat te schrijven. Bij CD-ROM-drives is het commando-packet 12 bytes lang en dus moet er 6 maal achter elkaar naar het dataregister worden geschreven, steeds 2 bytes per keer. Het commando-packet bevat een op-code voor het specifieke ATAPI-commando met alle parameters die nodig zijn.

Hier is een voorbeeld van het packet voor het commando PLAY AUDIO MSF:

Byte 0: Operation code (0x47)
Byte 1: Reserved
Byte 2: Reserved
Byte 3: Start Location Minutes
Byte 4: Start Location Seconds
Byte 5: Start Location Frames
Byte 6: End Location Minutes
Byte 7: End Location Seconds
Byte 8: End Location Frames
Byte 9: Reserved
Byte 10: Reserved
Byte 11: Reserved

Zoals in het voorbeeld is te zien zijn in het commando-packet waar nodig opvul-bytes (reserved) opgenomen om de vereiste lengte van 12 bytes te krijgen. Uitvoerige documentatie kan op het Internet worden gevonden. www.t13.org is een goed adres om de zoektocht te beginnen. Wees er wel op bedacht dat er vrij zware kost bij zit.

ATA Interface pinning

Pin no. Label Description
1HRESETReset
2GNDGround
3HD7Data bus bit 7
4HD8Data bus bit 8
5HD6Data bus bit 6
6HD9Data bus bit 9
7HD5Data bus bit 5
8HD10Data bus bit 10
9HD4Data bus bit 4
10HD11Data bus bit 11
11HD3Data bus bit 3
12HD12Data bus bit 12
13HD2Data bus bit 2
14HD13Data bus bit 13
15HD1Data bus bit 1
16HD14Data bus bit 14
17HD0Data bus bit 0
18HD15Data bus bit 15
19GNDGND
20N/CKey pin
21DMARQDMA request
22GNDGround
23HWRI/O write
24GNDGND
25HRDI/O read
26GNDGround
27IORDYI/O channel ready
28SPSYNC:CSELSpindle sync or cable select
29DMACKDMA acknowledge
30GNDGround
31INTRQInterrupt request
32IOCS1616 BIT I/O
33HAIAddress bus bit 1
34PDIAGPassed diagnostics
35HA0Address bus bit 0
36HA2Address bus bit 2
37CS1FXChip select 0
38CS3FXChip select 1
39DASPDrive active/drive I present
40GNDGround

Mogelijkheden genoeg

Het aantal toepassingen van deze schakeling is in feite ongelimiteerd, alleen de eigen fantasie vormt een beperking. Als reactie op een commando kan de drive een bepaald geluid produceren. Ter illustratie zijn hier enkele toepassingsvoorbeelden:

Bij alle hierboven genoemde toepassingen zal men zelf de geluiden op audio-CD's moeten branden. Er zijn veel PC-programma's om geluid te bewerken; CoolEdit is een bekend voorbeeld. Het is echter niet mogelijk om MP3-files te gebruiken, daarvoor is geen decoder aanwezig in de schakeling.