15_01.pdf

(122 KB) Pobierz
141291416 UNPDF
Kącik elektronika amigowca
Sampler do C−64
Witam wszystkich miłośników
nowego cyklu, dotyczącego
nieśmiertelnych komputerów
Commodore, takich jak: staruszek
C−64, Amiga500, 600, 2000, 1200,
3000, 4000. Z biegiem czasu
pokażę, że nie tylko popularny PC
może służyć poważnym pracom, jak
programowanie EPROM, EEPROM,
GAL i podobnych.
Artykuły udowodnią, że C−64 i Amiga
doskonale spisują się jako sterowniki
mikroprocesorowe, spełniające takie
funcje jak np:
− symulator obecności domowników
odstraszający potencjalnych złodziei;
− inteligentne urządzenie alarmowe
z powiadamianiem przez telefon
o włamaniu, pożarze;
− cyfrowa, automatyczna sekretarka;
− programator, symulator pamięci, ukła−
dów cyfrowych.
Miałem problem, co zaproponować
na początek. Sterowanie jakimiś prze−
kaźnikami, tzw. wąż świetlny, jest mało
interesujące, przecież lepiej użyć wyspe−
cjalizowanych układów, na pewno są
tańsze. Więc co? Na początek wybrałem
sampler.
Ewolucja tego urządzenia była długa,
najpierw były samplery czterobitowe,
następnie ośmiobitowe. Tak na margine−
sie, na zwykłym C−64 można odtwarzać
sample czterobitowe, z Covoxem oś−
miobitowe. Wszystko zaczęło się od te−
go, że spotkałem się z opisem samplera
do Amigi na przetworniku ADC0809. Tak
się składa, że port C−64 jest bliźniaczo
podobny do Amigi, różni się tylko zega−
rem czasu rzeczywistego, a dokładniej
sposobem jego przedstawienia. Po
chwili namysłu powstał projekt samplera
do C−64 na ADC0809. Okazało się jed−
nak, że ten przetwornik jest dosyć drogi,
a podobny ADC0804 kosztuje blisko
dwa razy mniej. Chwila pracy i powstał
nowy projekt. Czytelnikom proponuję
sampler z regulacją poziomu sygnału.
rysunku 1. Sampler zbudowano na
przetworniku ADC0804, który zapewnia
częstotliwość próbkowania do 10kHz.
Komputer C−64 i tak w sensowny spo−
sób nie wykorzysta większej częstotli−
wości, a dokładniej chodzi o czas po−
święcony przez procesor na obsługę
sampli i pochłoniętą przez nie pamięć.
Przetwornik pracuje w typowym ukła−
dzie aplikacyjnym. Sygnał wejściowy, po
przejściu przez potencjometr regulacji
poziomu (P1) trafia do wzmacniacza na
T1. Po wzmocnieniu przechodzi na we−
jście przetwornika US1. Rezystory R7,
R8 zapewniają ustalenie zera przetworni−
ka na poziomie połowy napięcia zasila−
nia. Odczyt portu PB powoduje odczyta−
nie danych z przetwornika i dzięki impul−
sowi na PC2 rozpoczęcie nowego cyklu
przetwarzania. Impuls ten będzie poja−
wiał się tam zawsze po odczycie portu.
Gdy proces przetwarzania zakończy się,
linia INTR (pin 5 US 1) zmieni stan na nis−
ki, informując port o zakończeniu proce−
su przetwarzania. Może to wywołać
przerwanie, jeśli je ustawimy. Stan linii
INTR jest zmieniany na wysoki po odczy−
cie portu (strob na PC2). Przetwornik
może linię danych ustawić w stan trzeci,
jest to wykorzystywane gdy podłączymy
go bezpośrednio do magistrali mikropro−
cesora. W samplerze ta możliwość nie
jest wykorzystana, dlatego linie CS, RD
połączono na stałe z poziomem niskim.
Elementy R2, C3 decydują o częstotli−
wości oscylatora, która wyznacza częs−
Rys. 1. Schemat ideowy samplera.
E LEKTRONIKA DLA WSZYSTKICH 3/97
29
Budowa samplera
Schemat ideowy urządzenia pokaza−
no na rysunku 1
rysunku 1
141291416.007.png 141291416.008.png 141291416.009.png 141291416.010.png 141291416.001.png 141291416.002.png
Kącik elektronika amigowca
Listing 1
;PROCEDURA SAMPLUJACA DZWIEKI ; DO PAMIECI KOMPUTERA
; ORAZ ODTWARZAJACA JE NA PRZERWANIACH
RTS
;−−−−−−−−−−−−−−−−−−−−−−READ SEI ;WYLACZENIE PRZERWAN
LDA #$7F
STA $DD0D
LDA #>START ;ADRES STARTOWY LDX #>KONIEC ; KONCOWY
LDY #SPEED
*= $0810
JMP READ JMP WRITE
;−−−−−−−−−−−−−−−−−−−−−−START = $1000
KONIEC = $FF00
SPEED = $90
;−−−−−−−−−−−−−−−−−−−−−−STRLOW = $FA
STRHIGH = STRLOW+1
END
;PREDKOSC
STA STRHIGH
STX END
STY SPD
LDX #$00
STX STRLOW
JSR VOLUME
= STRHIGH+1
;GLOSNY SID
SPD
= END+1
LDX #$07
JSR VOLUME
LDX #$0E
JSR VOLUME
JSR TIMER
STY $DD03
LDA $0318
PAMIEC = SPD+1
;−−−−−−−−−−−−−−−−−−−−−−WRITE SEI
;WYLACZENIE PRZERWAN
LDA #$7F
STA $DD0D
LDA #>START ;ADRES STARTOWY LDX #>KONIEC ; KONCOWY
LDY #SPEED
;PREDKOSC
;ZAPAMIETANIE
STA STRHIGH
STX END
STY SPD
LDX #$00
STX STRLOW
JSR VOLUME ;GLOSNY SID
LDX #$07
JSR VOLUME
LDX #$0E
JSR VOLUME
LDY #$00 ;PORT NA WEJSCIE STY $DD03
JSR TIMER
LOOP1 LDA $DD0D
LDX $0319
; WEKTORA NMI
STA NMILOW
STX NMIHIGH
LDA #<NMI
;USTAWIA WEKTOR NMI LDX #>NMI
STA $0318
STX $0319
LDA #$81
;ZEZWALA NA NMI
STA $DD0D
CLI
RTS
;CZEKA NA TIMER
NMI PHA
TYA
PHA
LDY #$00
LDA PAMIEC
BNE NMI1
INC $01
AND #$01
BEQ *−5
LDA $DD01
;ODCZYT PROBKI
LSR A
LSR A
LSR A
LSR A
STA $D418
;ZMIANA BANKU RAM
LDA (STRLOW),Y
DEC $01
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
LDA $DC01
;WYSLANIE DO SID
STA $D020
LDA $DC01
;CZY NACISNIETO STOP
BPL STOP
LDA $DC01
;CZY SPACJA
AND #$10
BNE LOOP1
; NACISNIETO SPACJE! START ZAPISU
STY $D011
;CZY NACISNIETO STOP
BPL STOPNMI
STA PAMIEC
EXITNMI PLA
;WYLACZENIE VIC
DALEJ LDA $DD0D
;CZEKA NA TIMER
;WYJSCIE Z NMI
AND #$01
BEQ *−5
LDA $DD01
TAY
PLA
BIT $DD0D
RTI
;POBRANIE PROBKI
AND #$F0
;STARSZY NIBLLE
STA PAMIEC
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
LDA $DC01
NMI1 INC $01
;ZMIANA BANKU RAM
LDA (STRLOW),Y
DEC $01
STY PAMIEC
AND #$0F
STA $D418
STA $D020
INC STRLOW
;CZY NACISNIETO STOP
BPL STOP
LDA $DD0D
;ZWIEKSZENIE ADRESU
;CZEKA NA TIMER
BNE EXITNMI
INC STRHIGH
LDA STRHIGH
AND #$01
BEQ *−5
LDA $DD01
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
ORA PAMIEC
INC $01
;POROWNANIE CZY END
CMP END
BNE EXITNMI
STOPNMI LDA NMILOW
;STARY WEKTOR NMI
LDX NMIHIGH
STA $0318
STX $0319
LDA #$01 ;WYLACZENIE PRZERWAN
STA $DD0D
BNE EXITNMI
;−−−−−−−−−−−−−−−−−−−−−−−VOLUME LDA #$00
STA $D405,X LDA #$FF
STA $D402,X STA $D403,X LDA #$F0
STA $D406,X LDA #$41
STA $D404,X RTS
;−−−−−−−−−−−−−−−−−−−−−−TIMER LDA #$00 ;USTAWIENIE TIMERA
STA $DD05
LDA SPD STA $DD04 LDA #$01 STA $DD0E LDA $DD0D RTS
;−−−−−−−−−−−−−−−−−−−−−−−NMILOW .BYTE 0
NMIHIGH .BYTE 0
;ZMIANA BANKU RAM
STA (STRLOW),Y
DEC $01
INY
;ZWIEKSZENIE ADRESU
BNE DALEJ
INC STRHIGH
LDA STRHIGH;POROWNANIE CZY END
CMP END
BNE DALEJ
STOP LDA #$1B
;WLACZA EKRAN
STA $D011
CLI
; I PRZERWANIA
totliwość próbkowania. Nie należy jej
zmieniać, ponieważ według producenta
wzrost jej ponad 1MHz spowoduje spa−
dek rozdzielczości nawet do 6 bitów.
Układ jest prosty, ważną rzeczą jest tak−
że program obsługujący sampler. Na lis−
lis−
Aby sprawa była jaśniejsza, zacznę od
omówienia odtwarzania sampli. Jak wia−
domo C−64 nie posiada wbudowanych
przetworników cyfrowo−analogowych.
Zauważono jednak, że regulator głośnoś−
ci może pracować jako czterobitowy
przetwornik. Pierwsze procedury play−
erów na czas odtwarzania wyłączały ek−
ran. Było to konieczne, ponieważ układ
wizyjny w co ósmej lini “podkradał” cyk−
le maszynowe procesora. Powodowało
to duże zniekształcenia dźwięku. Niedo−
godność tę ominięto wykorzystując do
odliczania czasu układy timerów portu
CIA. Kolejnym problemem, jaki pojawił
się po wprowadzeniu nowych wersji
SIDa, były ciche sample. Na szczęście
po uruchomieniu generatorów układu na
wysokiej częstotliwości poziom dźwięku
zbliżył się do poziomu starego SIDa.
Podany listing zawiera dwie procedu−
ry. Pierwsza “WRITE” zapisuje sample
tingu 1 przedstawiony jest z komenta−
rzami, które powinny rozwiać wszelkie
wątpliwości. Listing należy wpisać do
Turboasseblera.
Trochę o ewolucji tego programu.
30
E LEKTRONIKA DLA WSZYSTKICH 3/97
tingu 1
141291416.003.png
Kącik elektronika amigowca
pracować jako ośmiobitowy. Można je
odtwarzać przy użyciu Covoxa. Opis ta−
kiego urządzenia pojawi się w jednym
z następnych odcinków. Należy wspo−
mnieć, że sampler z odpowiednim op−
rogramowaniem może służyć jako gene−
rator pogłosu lub echa. Ze względu na
to, że w programie nie skorzystano
z możliwości kontroli, czy przetwornik
zakończył proces przetwarzania, nie na−
leży używać zbyt dużej częstotliwości
próbkowania.
Montaż
Płytkę drukowaną należy przygoto−
wać we własnym zakresie według sche−
matu z rysunku 1.
Montaż rozpoczynamy od wlutowania
najmniejszych elementów, tzn. rezysto−
rów i kondensatorów. Następnie naluto−
wujemy złącze USER portu na płytkę
(rys. 2
WYKAZ ELEMENTÓW
Rezystory
Rezystory
R1, R6: 220 W
R2: 10k W
R3: 150k W
R4: 33k W
R5: 3,9k W
R7, R8: 100k W
Kondensatory
Rys. 2. Montaż złącza USER.
do RAM. Po jej uruchomieniu w głośniku
będzie słychać dźwięk dochodzący do
samplera. Naciśnięcie SPACJI spowodu−
je wpisywanie danych do RAM. Dzięki
przełączaniu banków pamięci można wy−
korzystać całą dostępną RAM. Operację
można przerwać przez naciśnięcie klawi−
sza STOP. Druga procedura “READ” od−
twarza sample z pamięci na przerwa−
niach. Przerwać ją można naciskając
STOP. Etykieta START decyduje o po−
czątku sampla. Adres tam wpisany musi
wskazywać pierwszą wolną komórkę
bloku RAM. Z zasady jest to adres końca
programu samplującego.
Należy zauważyć, że pod uwagę jest
brany starszy bajt, młodszy natomiast za−
wsze jest ustawiony na zero. Etykieta
KONIEC decyduje o końcu sampla i nie
może przekroczyć adresu $FF00. SPEED
decyduje o częstotliwości samplowania.
Zbyt mała wartość może doprowadzić
do sytuacji, w której na wyjściach da−
nych przetwornika będzie ciągle ta sama
wartość. Jest to spowodowane budową
układu. W praktyce stosuje się tu war−
tości z przedziału $90 do $FF. Wykorzys−
tując cały dostępny obszar RAM można
zapisać od 18 do 32 sekund sampli zależ−
nie od częstotliwości próbkowania.
Niejeden czytelnik zapyta, dlaczego
podłączono wszystkie linie samplera,
a nie tylko cztery, skoro C−64 nie odtwa−
rza więcej niż cztery bity? Można by
w ten sposób zaoszczędzić kilkanaście
cykli po usunięciu rozkazów LSR. Otóż
mają oni rację, lecz sampler ma także
Kondensatory
C1, C2: 2,2µF
C4: 100nF
C5: 470nF
C6: 220nF
Półprzewodniki
Półprzewodniki
T1: BC238
US1: ADC0804
Różne
Różne
Złącze USER
rys. 2). Łączymy przewodami punkty
oznaczone jako Pin2 i Pin8 ze złączami
USER. Potencjometr P1 przyłączamy do
punktów A, B, C, można go też pominąć,
zwierając ze sobą punkty B, C. Poziom
sygnału regulujemy wtedy potencjomet−
rem regulacji siły głosu w źródle sygnału.
Pozostaje nam wlutować tranzystor
i układ scalony. Sampler można zamknąć
w typowej obudowie od cartrige, wyma−
gane będzie podpiłowanie obudowy
w miejscu złącza, wyprowadzenia prze−
wodu i osi potencjometru.
Przewód należy przewlec przez dwa
otwory w płytce drukowanej, co zabez−
pieczy go przed wyrwaniem.
Rodzaj wtyczki zależy od użytego
źródła sygnału i dobieramy ją indywidual−
nie. Osoby wykonujące płytkę ręcznie
mogą mieć problem z poprowadzeniem
ścieżki łączącej piątą nóżkę układ US1 ze
złączem USER. Można ją pominąć, po−
nieważ oprogramowanie nie wykorzys−
tuje możliwości generacji przerwań.
W razie potrzeby można powyższe połą−
rys. 2
czenie wykonać przewodem od strony
druku.
Jakie urządzenia opisać w następ−
nych odcinkach? Proszę czytelników
o kontakt.
Sławomir Skrzyński
Literatura:
Andrzej Markowski: Układy analogowe
w systemach mikroprocesorowych.
WNT, Warszawa 1991, 1992 r.
USKA Układy Analogowe 2/94. AVT,
Warszawa 1994 r.
USKA Układy Analogowe 3/94. AVT,
Warszawa 1994 r.
W przypadku zainteresowania opisa−
nym urządzeniem, redakcja przedstawi
płytkę drukowaną do tego projektu,
ewentualnie wprowadzi do oferty
zestaw do samodzielnego montażu.
red.
E LEKTRONIKA DLA WSZYSTKICH 3/97
31
WYKAZ ELEMENTÓW
Rezystory
Kondensatory
Kondensatory
Półprzewodniki
Różne
Różne
Sławomir Skrzyński
Literatura:
141291416.004.png 141291416.005.png 141291416.006.png
Zgłoś jeśli naruszono regulamin