|
|
11 medziľahlých revízií nie je zobrazených. |
Riadok 1: |
Riadok 1: |
- | {{VelkyNadpis|MIF 85 - Music interface pre PMD 85}}
| + | #redirect [[MIF 85]] |
- | | + | |
- | __TOC__
| + | |
- | | + | |
- | [[Obrázok:MIF85-prototype.jpg|thumb|Prototyp MIF 85]]
| + | |
- | | + | |
- | '''MIF 85''' je hudobný (zvukový) interface postavený na obvode '''SAA 1099P'''. Tento obvod, ktorý bol použitý napríklad aj v počítači SAM Coupé, poskytuje:
| + | |
- | * 6 frekvenčných generátorov - 8 oktáv na každý generátor
| + | |
- | * 2 šumové generátory
| + | |
- | * oddelené riadenie hlasitosti pre ľavý a pravý kanál, pre každý generátor - 16 úrovní
| + | |
- | * 2 generátory hlasitostnej obálky
| + | |
- | * mixér šumu a tónov
| + | |
- | | + | |
- | O prototype MIF 85 pojednáva [http://blog.borik.net/2012/04/mif-85-prototyp.html tento článok]
| + | |
- | | + | |
- | {| align="center"
| + | |
- | | [[Obrázok:Mif85-zhora.jpg|thumb|Pohľad na osadenú DPS zhora]]
| + | |
- | | [[Obrázok:Mif85-zboku.jpg|thumb|Pohľad na osadenú DPS zboku]]
| + | |
- | | [[Obrázok:Mif85-dps.jpg|thumb|DPS MIF 85]]
| + | |
- | |}
| + | |
- | | + | |
- | == Zapojenie MIF 85 ==
| + | |
- | | + | |
- | [[Obrázok:Mif-85-sch.png|thumb|Schéma MIF 85]]
| + | |
- | | + | |
- | MIF 85 sa pripája na aplikačný konektor [[PMD 85]], na ktorom sa nachádzajú všetky potrebné signály.
| + | |
- |
| + | |
- | Obvodové zapojenie srdca MIF 85, teda samotného <code>SAA1099P</code> (IC1), vychádza z katalógového zapojenia, ale v podstate bolo prevzaté zo schémy počítača SAM Coupé. Hodinový vstup <code>SAA1099P</code> je budený oscilátorom, ktorý je tvorený obvyklým zapojením pomocou troch hradiel <code>74LS04</code> (IC3) a kryštálom 8 MHz.
| + | |
- | | + | |
- | Referencia pre analógové výstupy je vytvorená LC filtrom z napájacieho napätia. Analógové výstupy ľavého a pravého kanála sú cez jednoduchý filter vyvedené na pinovú lištu.
| + | |
- | | + | |
- | Keďže <code>SAA1099P</code> nemá vlastný resetovací vstup, napájanie <code>SAA1099P</code> je zámerne cez tranzistor <code>BC557B</code> (Q2), aby bolo možné <code>SAA1099P</code> "umlčať" resetom počítača.
| + | |
- | | + | |
- | Pôvodný návrh obsahoval niekoľko TTL obvodov, ale nakoniec bolo v záujme zjednodušenia zapojenia rozhodnuté, že sa použije hradlové pole GAL16V8 (IC2). To rieši niekoľko vecí:
| + | |
- | * dekodér portov
| + | |
- | * tvorba signálov <code>-CS</code> a <code>-WR</code> pre <code>SAA1099P</code>
| + | |
- | * tvorba signálu pre pripojenie/odpojenie napájania <code>SAA1099P</code> podľa stavu signálu <code>-RES</code>
| + | |
- | * register pre povolenie/zakázanie prerušenia od časovača
| + | |
- | * tvorba signálu prerušenia
| + | |
- | | + | |
- | Signál <code>-Fi2TTL</code> z aplikačného konektora je privedený na hodinový vstup časovača 0 <code>CLK0</code>. Časovač 0 a teda jeho výstup <code>OUT0</code> je použitý pre tvorbu prerušovacieho sidnálu <code>-INT</code>. Ten je vyvedený cez <code>BC547B</code> (Q1) ako otvorený kolektor. Pull-up odpor je súčasťou počítača.
| + | |
- | | + | |
- | == Plošný spoj ==
| + | |
- | | + | |
- | Plošný spoj bol navrhovaný pre zasunutie do aplikačného konektora na výšku. '''Konektor sa osadzuje zo strany spojov''', takže na to treba pamätať - viď. stredná fotka. Súčiastky teda smerujú od počítača do zadu.
| + | |
- | | + | |
- | ''Nesmiem zabudnúť pripomenúť, že pri návrhu DPS som mal asi zatemnenie mysle a šírka DPS je o pár milimetrov väčšia ako by sa žiadalo. Nie je tak možné použiť klasické nízke pinové lišty, pretože vodiace kolíky na FRB konektore PMD 85 nedovolia dať DPS bližšie k FRB konektoru. '''Je teda nutné použiť vysoké pinové lišty''', ako je to vidieť na fotke.''
| + | |
- | | + | |
- | Pokiaľ má niekto záujem o plošný spoj alebo hotový MIF 85, nech sa ozve na náš [mailto:pmd85emu@gmail.com email].
| + | |
- | | + | |
- | == Rovnice pre GAL16V8 ==
| + | |
- | | + | |
- | Ako bolo spomenuté vyššie, použitie GALu ušetrilo niekoľko TTL obvodov. Nasledujúce rovnice sú jednoduché a myslím, že aj zrozumiteľné a s uvedenými komentármi už nepotrebujú ďalšie vysvetlenie.
| + | |
- | | + | |
- | CHIP MIF85 GAL16V8
| + | |
- |
| + | |
- | ; MIF85 - Music InterFace for PMD 85
| + | |
- | ; Dekodér adries portov SAA1099P a registra pre povolenie/zakázanie prerušenia.
| + | |
- | ; Riadenie napájania SAA1099P
| + | |
- |
| + | |
- | ; Port 0EFh je použitý pre výber registra SAA1099P.
| + | |
- | ; Port 0EEh je použitý pre zápis dát do vybraného registra.
| + | |
- | ; Bit D0 portu 0ECh je použitý pre povolenie/zakázanie prerušenia od časovača 0
| + | |
- | ; z i8253 umiestneného na interfejsovej doske PMD 85.
| + | |
- | ; Všetky porty sú iba pre zápis.
| + | |
- |
| + | |
- | ; 01 02 03 04 05 06 07 08 09 10
| + | |
- | CLK /ICO IOW A4 A5 A6 D0 A1 A0 GND
| + | |
- | ; 11 12 13 14 15 16 17 18 19 20
| + | |
- | /OE A3 A2 /RES ID A7 /CS INT ICLK VCC
| + | |
- |
| + | |
- | EQUATIONS
| + | |
- |
| + | |
- | ; -CS (Chip Select) pre SAA1099P
| + | |
- | CS = A7 * A6 * A5 * /A4 * A3 * A2 * A1 ; 0EEh, 0EFh
| + | |
- | CS.oe = VCC
| + | |
- |
| + | |
- | ; hodinový signál pre zápis do registra povolenia/zakázania prerušenia
| + | |
- | ICLK = A7 * A6 * A5 * /A4 * A3 * A2 * /A1 * /A0 * IOW ; 0ECh
| + | |
- | | RES
| + | |
- | ICLK.oe = VCC
| + | |
- |
| + | |
- | ; register pre zakázanie prerušenia
| + | |
- | ID := /D0
| + | |
- | | RES
| + | |
- | ID.c = CLK
| + | |
- | ID.oe = OE
| + | |
- |
| + | |
- | ; samotný signál prerušenia
| + | |
- | INT = ICO * /ID
| + | |
- | INT.oe = VCC
| + | |
- | | + | |
- | == Popis portov a ovládania ==
| + | |
- | | + | |
- | MIF 85 využíva 3 výstupné porty: 0ECh, 0EEh a 0EFh. Adresácia je úplná A7 až A0.
| + | |
- | | + | |
- | SAA1099P sa ovláda dvoma portami:
| + | |
- | * 0EFh - výber registra 0 až 31
| + | |
- | * 0EEh - zápis hodnoty do zvoleného registra
| + | |
- | | + | |
- | ; napríklad
| + | |
- | MVI A,8 ; výber registra 8 - frekvencia tónu 0
| + | |
- | OUT 0EFh
| + | |
- | MVI A,0E3h ; zápis do registra 8 - tón A
| + | |
- | OUT 0EEh
| + | |
- | | + | |
- | Port 0ECh slúži pre povolenie prerušenia od časovača 0. Po zapnutí počítača alebo po resete je prerušenie od časovača 0 zakázané. Pred povolením prerušenia je potrebné ešte inicalizovať samotný časovač. A samozrejme, musí byť pripravená rutina obsluhy prerušenia od adresy 0038h.
| + | |
- | | + | |
- | DI ; zákaz prerušenia procesora
| + | |
- |
| + | |
- | XRA A ; zákaz prerušenia od časovača 0
| + | |
- | OUT 0ECh
| + | |
- |
| + | |
- | MVI A,24h ; inicializuj časovač 0
| + | |
- | OUT 5Fh
| + | |
- | MVI A,0A0h ; 50x za sekundu
| + | |
- | OUT 5Ch
| + | |
- |
| + | |
- | MVI A,0C9h ; inicializuj vektor prerušenia
| + | |
- | STA 0038h ; - teraz iba návrat
| + | |
- |
| + | |
- | MVI A,1 ; povolenie prerušenia od časovača 0
| + | |
- | OUT 0ECh
| + | |
- |
| + | |
- | EI ; povol prerušenie procesora
| + | |
- | HLT ; počkaj si na prerušenie
| + | |
- |
| + | |
- | ...
| + | |
- | | + | |
- | === Detekcia MIF 85 ===
| + | |
- | | + | |
- | SAA1099P nemá možnosť čítať stav vnútorných registrov. MIF 85 priamu detekciu tiež neumožňuje, pretože v použitom GALe už na to nebol priestor. Keďže ale MIF 85 poskytuje možnosť používať prerušenie od časovača 0, je možné túto skutočnosť využiť na detekciu jeho pripojenia.
| + | |
- | | + | |
- | MifDetect: DI ; zákaz prerušenia procesora
| + | |
- | XRA A ; zákaz prerušenia od časovača 0
| + | |
- | OUT 0ECh
| + | |
- |
| + | |
- | STA MifFlag+1 ; vynuluj flag
| + | |
- |
| + | |
- | MVI A,24h ; inicializuj časovač 0
| + | |
- | OUT 5Fh
| + | |
- | MVI A,1 ; do 125us musí prísť prerušenie
| + | |
- | OUT 5Ch
| + | |
- |
| + | |
- | MVI A,0C3h ; inicializuj vektor prerušenia
| + | |
- | STA 0038h
| + | |
- | LXI H,MifDetectInt ; JMP MifDetectInt
| + | |
- | SHLD 0039h
| + | |
- |
| + | |
- | MVI A,1 ; povolenie prerušenia od časovača 0
| + | |
- | OUT 0ECh
| + | |
- |
| + | |
- | EI ; povolenie prerušenia procesora
| + | |
- |
| + | |
- | MVI B,32 ; počkaj chvíľu - asi 238us
| + | |
- | MifDetectL: DCR B
| + | |
- | JNZ MifDetectL
| + | |
- |
| + | |
- | MifFlag: MVI A,0 ; otestuj flag
| + | |
- | ORA A ; NZ = MIF 85 je pripojený
| + | |
- | RET
| + | |
- |
| + | |
- | MifDetectInt: MVI A,1 ; v prerušení nastav flag
| + | |
- | STA MifFlag+1
| + | |
- | RET ; vráť sa bez povolenia prerušenia
| + | |
- | | + | |
- | == Na stiahnutie ==
| + | |
- | * [[download:81|dokumentácia MIF 85]] (súbory pre Eagle a GAL16V8)
| + | |
- | * [[download:79|datasheet SAA1099]]
| + | |
| | | |
| [[Kategória:Blog| 010]] | | [[Kategória:Blog| 010]] |