Dr.Godfried-Willem RAES
Kursus Experimentele Muziek: Boekdeel 2: Live electronics
Hogeschool Gent - Departement Muziek en Drama
Naar: Latches, Buffers, Geheugens, ROM, FIFOS, Analoge geheugens , Bucket Memory
2050:
LATCHES, BUFFERS, GEHEUGENS
Meestal doet zich bij ontwerp en bouw van interface schakelingen de noodzaak voor de verkregen gegevens minstens net zolang vast te houden, tot ze door de aangesloten informatieverwerkende machine zijn ingelezen. Voor dit doel bestaat een ruime keus aan specifieke chips, die bijna steeds twee funkties in zich verenigen: enerzijds fungeren zij als tussengeheugen , anderzijds als buffer. Een buffer nu, is een logische schakeling die in staat is een groot aantal andere chips, of een relatief lange 'bus' of flatcable, van signalen te voorzien. Door de kapaciteit eigen aan lange kabels of uitgebreide bussen, dient het signaal in staat te zijn een relatief zware belasting te weerstaan. De meeste moderne latches/buffers zijn bovendien nog uitgerust met een zgn. Tri-State uitgang. Hierin mag men beslist niet een afwijking zien van het basis-binair principe van digitale schakelingen ! Het betekent alleen dat de uitgang van een schakeling een aangesloten lijn ofwel in een logisch gedefinieerde 0 of 1 toestand kan brengen, ofwel , dat zij zo ingesteld kan worden dat het lijkt alsof ze helemaal niet op de lijn aanwezig is. Deze laatste toestand noemt men de Tri-State of Hi-Z toestand. Om dit te bereiken is op Tri_State chips steeds een pin aanwezig , bvb. OE, wat staat voor 'output enable'. Wanneer deze pin 0 of 1 is (al naargelang de vereisten voor die bepaalde chip), zal de chip ofwel de aangesloten lijnen uitsturen, ofwel zullen zijn uitgangen in een zeer hoogohmige toestand komen waarbij ze deze laatste niet belasten noch beinvloeden. Het grote voordeel van deze techniek schuilt in het feit dat het nu mogelijk wordt verschillende chips een gemeenschappelijk aantal lijnen te laten besturen. Het bestaan van zoiets als een komputerbus is geheel en al aan de uitvinding van dit Tri-State principe te danken.
Voorbeeld 1:
Gedetaileerde bespreking van een Latch-chip 74LS573
Deze chip is voorzien van in totaal 20 aansluitpinnen. Twee ervan zijn op elke chip aanwezig : de massa aansluiting en de aansluiting voor de positieve voedingsspanning. Voorts zijn er 8 data-ingangen evenals 8 data uitgangen. Men zegt daarom dat de latch een byte (8 bits) breed is.
Om de werking goed te kunnen volgen, volstaat het, het logisch diagram voor de chip aandachtig te bestuderen :
Waar in het diagram een x staat, betekent dit dat de logische toestand van dit signaal er helemaal niet toe doet. Waar H staat, komt dit steeds overeen met +5 Volt (logisch 1 bij positieve logika , logisch 0 bij negatieve logika ), en omgekeerd is L steeds 0 Volt. Hi-Z (soms staat er gewoonweg Z) slaat op de Tri-State toestand van de uitgangen.
pin nr.: funktie: |
1 OE |
11 Enable |
2 tot 9 Data IN |
19 tot 12 Data Out |
H |
X |
X |
Hi-Z |
|
L |
L |
H |
H |
|
L |
L |
L |
L |
|
L |
H |
X |
Previous state |
Uit dit diagram blijkt duidelijk dat de chip alleen wanneer OE en E beide laag zijn, het aan de uitgang beschikbare byte gelijk zal zijn aan datgene wat we op de dataingang aanbieden. Zolang deze situatie behouden blijft, volgt de uitgang de ingang. Om deze reden noemen we deze latch 'transparant'. Willen we een byte op de uitgang vasthouden los van wat er op de ingang verder nog aangeboden wordt, dan volstaan het de E pin hoog te maken. Willen we alle uitgangen in een Tri-State toestand brengen , dan kan dit onafhankelijk van wat we met de E pin doen, door de OE pin hoog te maken.
In een praktische toepassing zullen we deze chip dus inzetten, door zijn data ingangen te verbinden met het informatieleverende toestel . Dit laatste zal telkens het nieuwe data ter beschikking heeft, pin E eventjes laag moeten maken.
De aan de uitgangspinnen aangesloten komputer of welkdanig ander toestel ook zal , wanneer het deze gegevens wil lezen, eerst de OE pin laag moeten maken, waarna het het beschikbare byte zal kunnen inlezen. Daarna dient het lezende toestel de 'bus' opnieuw vrij te maken, door OE terug hoog te brengen. Om nu mogelijke botsingen te voorkomen - in het geval het lezende toestel bytes zou willen lezen net op het moment dat het bytes-leverende toestel E laagmaakt, kunnen we een logische poort toevoegen die ofwel verhindert dat er bytes geschreven worden tijdens leesoperaties, ofwel, die verhindert dat er bytes gelezen worden tijdens schrijfoperaties. De keuze tussen een van beide strategieen ligt geheel en al in de handen van de ontwerper.
In figuur 205/1 staan , onder een algemene tekening van de chip met zijn aansluitingen, eerst de versie waarbij lezen voorgaat op schrijven ( merk op dat door de toevoeging van een inverterpoort, de originele waarheidstabel behouden kon blijven), en vervolgens de versie waarbij schrijven van nieuwe data, voorgaat op lezen ervan. In deze laatste versie , is door het ontbreken van een extra inverter-poort de logika van het OE signaal omgekeerd. (van negatieve logika naar positieve logika).
Een variant op deze chip luistert naar de naam 74574 en komt nagenoeg geheel met de 74373 overeen, op het ene feit na, dat hij genoegen neemt met een opgaande flank op de Enable pin om data in te lezen. Hierdoor is deze latch niet transparant, dit wil zeggen, nadat de enable pin van laag naar hoog is gegaan, veranderen de uitgangsbits niet verder in funktie van de ingangen. Om met deze chip nieuwe data in te lezen, dient de enable pin dan ook eerst opnieuw laag te worden en opnieuw een stijgende flank te vertonen. Deze versie leent zich uitstekend in kombinatie met zgn. strobe-signalen. In de gangbare elektronische terminologie noemt dit soort latch ook wel een flip-flop.
Dit type flip-flop en latch bestaat eveneens in een inverterende uitvoering onder de typenummers 74563 (latch) en 74564 (flipflop). Het byte op de uitgang is daarbij steeds de negatie van het ingangsbyte. In vele gevallen spaart ons dit extra inverters verder in de schakeling uit.
Naast latches kunnen we soms ook wel behoefte hebben aan doodgewone buffers, nml. chips die niets aan ons eigenlijke signaal veranderen, maar het wel in staat stellen een bus of lange flatcable aan te sturen. Buffers zijn aanzienlijk goedkoper dan latches. In het gebruik zijn ze werkelijk de eenvoud zelf. Gangbare byte-brede buffers zijn o.m. :
Wanneer we meer dan een byte tegelijk willen opslaan, kunnen we niet langer eenvoudig en goedkoop gebruik maken van latches. In dergelijke gevallen lenen zich zgn. dual-ported RAM-chips zich veel beter. Dit zijn geheugenchips die, net zoals latches, over zowel een dataingang als een datauitgang beschikken en die daareenboven voorzien zijn van nogal wat extra pinnen om adressering van het geheugen mogelijk te maken. Geheugenchips kunnen algemeen gesproken in twee kwa werking fundamenteel verschillende kategorien worden verdeeld:
1. Statische geheugens
2. Dynamische geheugens
Dynamische geheugens zijn geheugens die fundamenteel zijn opgebouwd als matrixen van piepkleine kondensatoren, waarin de bits als elektrische ladingen worden opgeslagen. Deze kondensatoren verliezen echter eigenlijk doorlopend hun lading en daarom dient deze zo'n 1000 maal per sekonde ververst te worden. Omdat deze geheugens erg vergeetachtig en vluchtig zijn, dienen ze met aangepaste 'refresh'-elektronika te worden gebruikt. De enige reden waarom deze geheugentypes ondanks hun vergeetachtigheid toch de meest gebruikte zijn in komputersystemen, is dat ze relatief eenvoudig en goedkoop kunnen worden vervaardigd. Voor zelfbouwprojekten valt hun gebruik eigenlijk nauwelijks te overwegen. Een van de weinige echt kreatieve toepassingen ervan in de sektor van de experimentele muziek, ligt op het vlak van de sensors : wanneer we een dynamische RAM chip onthoofden zodat de eigenlijke chip bloot komt te liggen, dan blijkt deze in hoge mate lichtgevoelig te zijn. Een optisch beeld dat erop geprojekteerd wordt, kan dan via de geheugenmatrix uitgelezen worden. Het is zowat de goedkoopste oplossing voor een zelfbouw 'video'-camera, die bovendien ook nog subminiatuur kan worden gebouwd.
DRAM-chips luisteren naar namen zoals :
4164 65536 x 1 bit
41256 262144 x 1 bit
411000 1048576 x 1 bit (megabit DRAM-chip)
Statische RAM is intern opgebouwd uit een matrix van flip-flop geheugencellen. De geprogrammeerde geheugeninhoud blijft bestaan zolang de voedingsspanning niet wordt onderbroken. Normale statische RAM heeft een aantal adres-lijnen ( overeenkomstig hun geheugenformaat) en een bepaalde data-breedte ( 1 bit, 4 bits, 1 byte zijn gangbaar). Voorts zijn er R/W of I/O lijnen evenals chip-select of output-enable ingangen voorzien. Industriele klassiekers luisteren naar volgende chipnummers :
6116 2048 x 8 bits
6264 8192 x 8 bits
6267 16384 x 1 bit
62256 32768 x 8 bits (het grootste koerant verkrijgbare maat in 1989)
Hun aansluitschema ziet eruit alsvolgt :
Dual-ported RAM wordt eigenlijk bijna uitsluitend toegepast bij allerhande interfaces en ook bij parallel-computing projekten; Overal waar diverse onafhankelijke informatieleverende toestellen in asynchrone interaktie worden gebruikt met informatieverwerkers. Daarom zijn de meeste dual-ported RAM chips ook assymetrisch opgebouwd : een eerste poort is bidirektioneel ( er kan informatie naar de chip geschreven worden die ook weer kan worden uitgelezen), een tweede kan alleen lees-toegang tot de geheugenmatrix toestaan, en is als een Tri-State uitgang uitgevoerd. Beide poorten beschikken over onafhankelijke adreslijnen en datalijnen. De principiele opbouw ziet eruit alsvolgt :
De data lijnen kunnen 1 bit, 4 bits of 8 bits breed zijn, terwijl het aantal adreslijnen uiteraard afhangt van de geheugengrootte van de chip.
Koerante types zijn o.m. :
Dit zijn geheugens waarvan de inhoud onafhankelijk van de aanwezigheid van een voedingsspanning behouden blijft. Permanente geheugens dus, waaruit informatie alleen kan gelezen worden. Het initieel programmeren van deze chips geschiedt ofwel bij de fabrikage zelf ( 'mask-ROMs') ofwel in een speciaal programmeertoestel ( Eprom programmer bvb.) Mask-roms vallen volledig buiten het bereik van de zelfbouwer en ontwikkelaar. Eprom's daareentegen treft men aan in de meest diverse elektronische muziekinstrumenten en gadgets. Zij kunnen onder meer toegepast worden als opslagmedium voor klank-samples , midi-patches , delay-line instellingen ...
Het nut van zulke geheugens in interface-projekten ligt vooral op het terrein van de binaire vertaling van codes. Immers, een geheugenchip is niets anders dan een array met twee dimensies : de data-lijnen en de adreslijnen. Wanneer we nu een eprom zo schakelen dat we de adres-lijnen aansluiten op de inkomende datalijnen van een informatieleverend toestel, terwijl de datalijnen naar de informatieverwerker gaan, dan hoort bij elke binaire kombinatie op de adres-lijnen, een in de chip geprogrammeerd binair patroon dat op de data-uitgangen zal verschijnen. Op die manier kunnen we een Eprom voor willekeurig welke code-vertaling laten instaan.
Het principe-aansluitschema ziet er dan alsvolgt:
Op die manier aangewend vervangt een Eprom in hardware perfekt wat een look-up table doet in software. Eproms hebben vandaag steeds veel meer dan 8 adreslijnen, zodat we er een heleboel verschillende opzoektabellen kunnen in opslaan, waaruit we dan via de adreslijnen groter dan A7 kunnen kiezen. De Eprom klassieker luisterend naar de troetelnaam 2764 kan een array bevatten van 65536 bits , of 8192 bytes. Aangezien elke look-up table precies 256 bytes in beslag neemt, kan deze chip er zomaar eventjes 32 bevatten.
Praktische muzikale toepassingen zijn :
Software equivalent van een Eprom :
'declaratie van de Eprom als array
DIM EPROM(256)
'programmering van de 'software-eprom'
FOR I=0 TO 255
READ EPROM(I)
NEXT I
'gebruik van de eprom:
DO
DTA=INP(X) : ' lees een inkomend byte
IF DTA THEN
DTB=EPROM(DTA) : ' vertaal het
OUT(Y,DTB) : ' stuur de vertaling weer uit
ENDIF
LOOP WHILE INP(CP) AND 1 :' lus zolang er bytes aangeboden worden
'eprom look-up table inhoud
DATA 34,0,57,56,99,88,45,45
DATA ...
DATA ...
DATA ...
DATA ...
DATA ...
DATA ...
DATA ...
DATA ...
DATA ...
'totaal 256 bytes per look-up table
Het voordeel van een hardware implementering zal hieruit allicht wel duidelijk zijn geworden.
Fifo's zijn 'First In First Out' schuifregisters. Men kan ze beschouwen als seriele geheugens. Geheugens dus waar de data bit na bit binnenkomen, en er ook bit na bit weer uitkomen. Schuifregisters worden in muzikale elektronika heel frekwent gebruikt om tijdsvertragingen te bekomen ( delay-lines , echo-generatoren , digitale nagalm apparatuur), maar vormen in de elektronika de basisbouwsteen voor parallel naar serieel omzetters. Het geheugenformaat van een Fifo komt overeen met het aantal bit's dat er tegelijkertijd in aanwezig kan zijn.
Hoewel fifo's in chip vorm bijna steeds bit-na-bit opereren, kunnen fifo's ook als byte-brede schakelingen worden opgebouwd.
Fifo's hebben steeds een seriele ingang en uitgang, soms op verschillende plaatsen in het geheugen afgetakt, evenals een klok die het in- en uit-schuiftempo bepaald. Fifo's kunnen ook zonder externe klok gebruikt worden, wanneer we hen telkens van een klokpuls voorzien wanneer er een nieuw bit op de ingang verschijnt. In dit geval spreekt men van een 'self-clocking shift register'. Kleine fifo's (8-bits) worden steeds toegepast in eenvoudige serieel naar parallel-konverters (bvb. in midi-interfaces). Het keyboard van PC's bvb. zendt 8-bits data serieel naar de komputer, waar dit via een fifo terug naar een parallel-byte wordt omgezet. Voor dit soort toepassing echter werden veelvuldig toegepaste speciale chips ontworpen - USARTS en UARTS - waaraan we verder een hoofdstukje zullen wijden.
Gangbare types en afmetingen zijn o.m.:
2509,2510,2511,2532,2521,2522,2527,2528,2529,2533
2506,2507,2517,2505,2512,2525,2504...
Aansluitingsvoorbeeld: 2533 1024 Bits schuifgerister
Laten we even veronderstellen dat we een signaal aan digitale 16-bit audiokwaliteit zouden willen vertragen. Dit veronderstelt een sampling rate van 44.1kHz (d.w.z. er worden van het muzieksignaal per sekonde 44100 samples genomen). Elk sample neemt 16 bits in beslag, 2 parallele bytes dus. Om ons signaal 1 sekonde in een schuifregister op te slaan hebben we dus in totaal
44100 x 16 bits = 705600 bits nodig.
1 sekonde digitale audio vergt dus een geheugenkapaciteit van 88.2kByte.
Zouden we met schuifregisters ons muzieksignaal 1 sekonde willen vertragen en zouden we daarvoor schuifregisters van 1024 bits elk willen gebruiken, dan hebben we zomaar eventjes 704 chips nodig.
In praktische muziekschakelingen beperkt men dan ook in eerste plaats de sampling rate tot zo'n 16kHz en de breedte tot 12 bits, wat ons op een geheugenbehoefte van 192kbits, of 24kByte per sekonde brengt. 24 chips volstaan dan voor 1 sekonde vertraging.
In goedkope 'effekt-boxen' worden zelfs nog heel wat meer koncessies gedaan: 8 bits resolutie bij een sampling rate van 16384Hz, reduceert onze geheugenaanspraken per sekonde tot 131072 bits, of 16kByte. De dan nodige 16 1kByte fifo-chips, met een eenvoudige ADC en DAC converter passen net in zo'n pedaal-effektbox.
- Sample and Hold's
- Bucket Brigade Delay Lines (Emmertjes-geheugen)
Geheugen is geen exclusiviteit van digitale schakelingen! Ook in zuiver analoge technologie kunnen analoge waarden worden opgeslagen. In de eenvoudigste vorm noemt men een analoog geheugen element een 'sample and hold' schakeling . Het principe ervan berust op het feit dat een kondensator die geladen wordt, vanaf het ogenblik dat we het laadproces onderbreken, deze lading nog lange tijd kan behouden.
De term Sample and Hold slaat op de twee fazen waaruit het geheugenopslagproces hier bestaat : eerst wordt een kondensator de tijd gegeven zich te laden tot op het nivoo van de spanning die we wensen op te slaan . Daarna wordt de verbinding met de spanningsbron verbroken en wordt de op de kondensator aanwezige spanning gebufferd aan de uitgang van de schakeling aangeboden. Eigenlijk verschilt de schakeling niet erg veel van de eenvoudige RC-timer schakeling die we eerder reeds bespraken.
Aangezien we vandaag de dag sample & holds zogoed als steeds zullen toepassen met behulp van specifieke chips, kunnen we volstaan met het geven van het blokschema en de nodige in- en uitgangssignalen. Merk op dat het nodige sample/hold signaal eigenlijk overeenkomt met een digitaal bit.
Sample- en hold's zijn overigens een wezenlijk onderdeel in alle al dan niet geintegreerde ADC-convertors, waarover later meer. Ook in analoge sintesizers en muzikale effektmachines treffen we ze vaak aan.
Chipnummers voor S&H's zijn o.m. :LF398, NE5537, IH5110-5115...
Voorbeeld : Chip IH5110 (Intersil)
Deze chip heeft een precisie van 0.1% voor een analoog spanningsbereik gaande van -10 tot +10 Volt. De offset-trim aansluitingen laten toe kleine korrekties aan te brengen aan het DC rustspanning op de uitgang. Hiertoe sluiten we tussen beide trim aansluitingen een trimpotmeter aan van 20 kiloOhm. De externe condensator , die ter beperking van de stroom in serie wordt geschakeld met een kleine weerstand van 100 Ohm, dient een kapaciteit van 10nF te hebben. De tijd die de chip nodig heeft om de op de ingang aangeboden spanning op te slaan is 4 microsekonden.
De kodering van de sample/hold strobe is alsvolgt:
Logisch 1 = sample
Logisch 0 = hold
Deze vrolijke schakelingen danken hun engelse benaming 'Bucket-Brigade-Delay-Line' aan de metode die de vroegere brandweermannen gebruikten om een brand te blussen wanneer geen waterpompen ter beschikking waren: Een eerste brandweerman schept met een emmer water uit de rivier en giet het vervolgens over in de emmer van de vlak naast hem staande brandweerman, die het opnieuw doorgeeft naar de volgende ... enzovoort, tot het water bij de laatste brandweerman terecht is gekomen, die het uiteraard over de vlammen giet. Deze beschrijving maakt meteen ook het grootste probleem van een dergelijk opzet duidelijk : hoeveel water wordt er zo onderweg bij elke stap verspilt en hoeveel houden we nog over van het water uit de rivier om de brand te blussen.
Emmertjesgeheugens zijn natuurlijk geen in chips geintegreerde emmers, maar bestaan uit hun elektronische equivalenten, namelijk kondensatoren. De brandweerlieden zijn in de elektronische versie transistor of FET-schakelaars die de laden van de ene kondensator doorschakelen naar de volgende kondensator. Elke kondensator-schakelaar kombinatie is in feit een kleine sample- en hold schakeling. Het tempo waartegen het doorgeven van ladingen gebeurt moet uiteraard voor elke stap gelijk zijn, en is afhankelijk van een gemeenschappelijke klok. In de brandweerversie is dit een trommelaar en zingen alle brandweermannen arbeidsmuziek netjes in de maat. Waarschijnlijk is op die manier de zgn. repetitieve muziek geboren...
Wanneer een emmertjesgeheugen uit 1024 emmertjes bestaat, en de klokfrekwentie (die om een hinderlijk fluitjeskoncert op de uitgang te vermijden boven het audiobereik dient te liggen), op 20000 Hz wordt bepaald, dan verschijnt het ingangssignaal op de uitgang na precies 1024 * (1/20000Hz)= 0.0512 sekonden terug. Een emmertjesgeheugen kan dan ook worden gezien als een analoge FIFO.
Een direkte praktische toepassing hiervan is het vermijden van feedback (rondzingen of terugkoppeling) in akoestische versterkingsinstallaties.
Wanneer we nu een deel van het uitgangssignaal samen mengen met het ingangssignaal, dan verkrijgen we een elektronische analoge nagalmmachine, waarmee galm aan een inkomend muzieksignaal kan worden toegevoegd.
Gaan we echter de klokfrekwentie moduleren, dan krijgen we effekten zoals 'chorus', 'pitch-shift'... en kunnen we zelfs een echt vibrato aan een strakke toon toevoegen.
Emmertjes geheugens kunnen ook prachtig worden ingezet als experimentele toongeneratoren, wanneer we hun uitgang kwazi volledig naar de ingang terugvoeren en de klokfrekwentie binnen het audiogebied moduleren.
In 1974 maakte ik, gebruik makend van drie uit 2048 emmertjes opgebouwde schakelingen ,waarin de klok in frekwentie kon worden gemoduleerd, het live-elektronische stuk 'BBDLSP' (Bucket Brigade Delay Line Solo Piece).
Omwille van het signaalverlies - dat zich uit in een aanzienlijke toename van de ruis - worden vandaag emmertjesgeheugens niet meer zo vaak toegepast in professionele audio-elektronika. In plaats daarvan is men meer en meer digitale geheugens gaan gebruiken. Hieruit zijn dan in de jaren '80 de 'samplers' gegroeid.
Voor korte vertragingstijden (en nauwkeurig kontroleerbare fazeverschuivingen!) zijn deze schakelingen echter zeer geschikt.
IC's die emmertjes-geheugens bevatten zijn o.m. :
- TCA 590
- TDA 1022 ( bevat 513 'emmers')
De TDA 1022 , een Philips/Signetics fabrikaat, kan werken met klokfrekwenties tussen 5kHz en 500kHz , heeft een audio-frekwentiebereik van 0 tot 45kHz en haalt een vertragingstijd van 0.5ms tot 50ms.
Aansluitvoorbeeld TDA1022
overblijvende aansluitingen zijn 'n.c.' (not connected).
Filedate:8912 - last update: 2003-09-16
Terug naar inhoudstafel kursus
Naar decoders en encoders
Naar homepage dr.Godfried-Willem Raes