Blog:MIF 85

Z PMD 85 Infoserver

(Rozdiel medzi revíziami)
Rombor (Diskusia | príspevky)
(Doplnená ukážková rutina pre detekciu pripojeného MIF 85)
Aktuálna verzia (18:42, 23. august 2023) (upraviť) (vrátiť)
Djb (Diskusia | príspevky)
(presun blogu na stranku)
 
12 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&#64;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 ==
+
-
* [http://pmd85.djb-studios.com/?module=download&did=81 dokumentácia MIF 85] (súbory pre Eagle a GAL16V8)
+
-
* [http://pmd85.djb-studios.com/?module=download&did=79 datasheet SAA1099]
+
[[Kategória:Blog| 010]]
[[Kategória:Blog| 010]]

Aktuálna verzia

  1. redirect MIF 85