Blog:MIF 85
Z PMD 85 Infoserver
(prdnute download linky, tak to teda nie!) |
(Upravený článok) |
||
Riadok 1: | Riadok 1: | ||
{{VelkyNadpis|MIF 85 - Music interface pre PMD 85}} | {{VelkyNadpis|MIF 85 - Music interface pre PMD 85}} | ||
+ | |||
+ | {{Ambox | type=notice | style=text-align:center | text=Bola opravená schéma MIF 85. Predošlá verzia mala problém s [[Dĺžka_impulzu_prerušenia_i8080|prerušením]].}} | ||
+ | <br /> | ||
__TOC__ | __TOC__ | ||
Riadok 13: | Riadok 16: | ||
O prototype MIF 85 pojednáva [http://blog.borik.net/2012/04/mif-85-prototyp.html tento článok] | 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 == | == Zapojenie MIF 85 == | ||
Riadok 25: | Riadok 22: | ||
MIF 85 sa pripája na aplikačný konektor [[PMD 85]], na ktorom sa nachádzajú všetky potrebné signály. | 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. | 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. | 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. | + | 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. To má síce za následok, že je <code>SAA1099P</code> mierne "podvýživené", nemá to však žiadny vplyv na funkčnosť. |
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í: | 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í: | ||
Riadok 39: | Riadok 36: | ||
* tvorba signálu prerušenia | * 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 | + | Signál <code>-Fi2TTL</code> z aplikačného konektora je privedený na hodinový vstup časovača 0 <code>CLK0</code>. Časovač 0 sa programuje v móde 2, kedy sa podľa zadaného deliaceho pomeru na výstupe <code>OUT0</code> cyklicky objavuje impulz o dĺžke ≈0,5μs. Tento impulz je na vyvolanie [[Dĺžka_impulzu_prerušenia_i8080|prerušenia]] krátky a tak je predĺžený pomocou MKO 4047 asi na ≈12μs. Výstup MKO je vyvedený cez <code>BC547B</code> (Q1) ako otvorený kolektor na vstup prerušenia <code>-INT</code>. Pull-up odpor je súčasťou počítača. |
== Plošný spoj == | == Plošný spoj == | ||
Riadok 45: | Riadok 42: | ||
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. | 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. | ||
- | + | Plošné spoje budú dané do výroby v dohľadnej dobe. | |
- | + | ||
- | + | ||
== Rovnice pre GAL16V8 == | == Rovnice pre GAL16V8 == | ||
Riadok 112: | Riadok 107: | ||
OUT 0ECh | OUT 0ECh | ||
- | MVI A,24h ; inicializuj časovač 0 | + | MVI A,24h ; inicializuj časovač 0 v móde 2, iba vyšší byte deliaceho pomeru |
OUT 5Fh | OUT 5Fh | ||
MVI A,0A0h ; 50x za sekundu | MVI A,0A0h ; 50x za sekundu | ||
Riadok 138: | Riadok 133: | ||
STA MifFlag+1 ; vynuluj flag | STA MifFlag+1 ; vynuluj flag | ||
- | MVI A,24h ; inicializuj časovač 0 | + | MVI A,24h ; inicializuj časovač 0 v móde 2, iba vyšší byte |
OUT 5Fh | OUT 5Fh | ||
MVI A,1 ; do 125us musí prísť prerušenie | MVI A,1 ; do 125us musí prísť prerušenie | ||
Riadok 166: | Riadok 161: | ||
== Na stiahnutie == | == Na stiahnutie == | ||
- | * [[download:81|dokumentácia MIF 85]] (súbory pre Eagle a GAL16V8) | ||
* [[download:79|datasheet SAA1099]] | * [[download:79|datasheet SAA1099]] | ||
[[Kategória:Blog| 010]] | [[Kategória:Blog| 010]] |
Verzia zo dňa a času 19:52, 12. január 2014
Bola opravená schéma MIF 85. Predošlá verzia mala problém s prerušením. |
Obsah[skryť] |
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 tento článok
Zapojenie 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 SAA1099P
(IC1), vychádza z katalógového zapojenia, ale v podstate bolo prevzaté zo schémy počítača SAM Coupé. Hodinový vstup SAA1099P
je budený oscilátorom, ktorý je tvorený obvyklým zapojením pomocou troch hradiel 74LS04
(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 SAA1099P
nemá vlastný resetovací vstup, napájanie SAA1099P
je zámerne cez tranzistor BC557B
(Q2), aby bolo možné SAA1099P
"umlčať" resetom počítača. To má síce za následok, že je SAA1099P
mierne "podvýživené", nemá to však žiadny vplyv na funkčnosť.
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
-CS
a-WR
preSAA1099P
- tvorba signálu pre pripojenie/odpojenie napájania
SAA1099P
podľa stavu signálu-RES
- register pre povolenie/zakázanie prerušenia od časovača
- tvorba signálu prerušenia
Signál -Fi2TTL
z aplikačného konektora je privedený na hodinový vstup časovača 0 CLK0
. Časovač 0 sa programuje v móde 2, kedy sa podľa zadaného deliaceho pomeru na výstupe OUT0
cyklicky objavuje impulz o dĺžke ≈0,5μs. Tento impulz je na vyvolanie prerušenia krátky a tak je predĺžený pomocou MKO 4047 asi na ≈12μs. Výstup MKO je vyvedený cez BC547B
(Q1) ako otvorený kolektor na vstup prerušenia -INT
. 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.
Plošné spoje budú dané do výroby v dohľadnej dobe.
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 v móde 2, iba vyšší byte deliaceho pomeru 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 v móde 2, iba vyšší byte 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