|
|
|
| SPRZĘT | |
|
Ewolucja tego urządzenia była długa, najpierw były samplery czterobitowe, następnie ośmiobitowe. Tak na marginesie, na zwykłym C-64 można odtwarzać sample czterobitowe, z Covoxem ośmiobitowe. Wszystko zaczęło się od tego, ż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 zegarem czasu rzeczywistego, a dokładniej sposobem jego przedstawienia. Po chwili namysłu powstał projekt samplera do C-64 na ADC0809. Okazało się jednak, ż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.
BUDOWA SAMPLERA.
Schemat ideowy urządzenia pokazano na rysunku 1. Sampler zbudowano na przetworniku ADC0804, który zapewnia częstotliwość próbkowania do 10kHz. Komputer C-64 i tak w sensowny sposób nie wykorzysta większej częstotliwoś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ładzie aplikacyjnym. Sygnał wejściowy, po przejściu przez potencjometr regulacji poziomu (P1) trafia do wzmacniacza na T1. Po wzmocnieniu przechodzi na wejście przetwornika US1. Rezystory R7, R8 zapewniają ustalenie zera przetwornika na poziomie połowy napięcia zasilania. Odczyt portu PB powoduje odczytanie danych z przetwornika i dzięki impulsowi na PC2 rozpoczęcie nowego cyklu przetwarzania. Impuls ten będzie pojawiał się tam zawsze po odczycie portu. Gdy proces przetwarzania zakończy się, linia INTR (pin 5 US 1) zmieni stan na niski, informując port o zakończeniu procesu przetwarzania. Może to wywołać przerwanie, jeśli je ustawimy. Stan linii INTR jest zmieniany na wysoki po odczycie portu (strob na PC2). Przetwornik może linię danych ustawić w stan trzeci, jest to wykorzystywane gdy podłączymy go bezpośrednio do magistrali mikroprocesora. W samplerze ta możliwość nie wjest wykorzystywana, dlatego linie CS, RD połączono na stałe z poziomem niskim. Elementy R2, C3 decydują o częstotliwości, która wyznacza częstotliwość próbkowania. Nie należy jej zmieniać, ponieważ według producenta wzrost jej ponad 1MHz spowoduje spadek rozdzielczości nawet do 6 bitów. Układ jest prosty, ważną rzeczą jest także program obsługujący sampler. Na listingu 1 przedstawiony jest z komentarzami, które powinny rozwiać wszelkie wątpliwości. Listing należy wpisać do Turboassemblera.
Trochę o ewolucji tego programu. Aby sprawa była jaśniejsza, zacznę od omówienia odtwarzania sampli. Jak wiadomo 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 playerów na czas odtwarzania wyłączały ekran. Było to konieczne, ponieważ układ wizyjny w co ósmej "podkradał" cykle maszynowe procesora. Powodowało to duże zniekształcenia dźwięku. Niedogodność 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łądu na wysokiej częstotliwości poziom dźwięku zbliżył się do poziomu starego SIDa.
Podany listing (3kB) zawiera dwie procedury. Pierwsza "WRITE" zapisuje sample do RAM. Po jej uruchomieniu w głóśniku będzie słychać dźwięk dochodzący do samplera. Naciśnięcie SPACJI spowoduje wpisywanie danych do RAM. Dzięki przełączaniu banków pamięci można wykorzystać całą dostępną RAM. Operację można przerwać przez naciśnięcie klawisza STOP. Druga procedura "READ" odtwarza sample z pamięci na przerwaniach. Przerwać ją można naciskając STOP. Etykieta START decyduje o począ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 zawsze jest ustawiony na zero. Etykieta koniec 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 danych przetwornika będzie ciągle ta sama wartość. Jest to spowodowane budową układu. W praktyce stosuje się tu wartości z przedziału $90 do $FF. Wykorzystują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 odtwarza 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 pracować jako ośmiobitowy. Można je odtwarzać przy użyciu Covoxa. Opis takiego urządzenia pojawi się w jednym z następnych odcinków. Należy wspomnieć, że sampler z odpowiednim oprogramowaniem może służyć jako generator 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 należy używać zbyt dużej częstotliwości próbkowania.
;PROCEDURA SAMPLUJACA DZWIEKI
;DO PAMIECI KOMPUTERA
;ORAZ ODTWARZAJACA JE NA PRZERWANIACH
*= $0810
JMP READ
JMP WRITE
;---------------------------------------
START = $1000
KONIEC = $FF00
SPEED = $90
;---------------------------------------
STRLOW = $FA
STRHIGH = STRLOW+1
END = STRHIGH+1
SPD = END+1
PAMIEC = SPD+1
;---------------------------------------
WRITE SEI ;WYLACZENIE PRZERWAN
LDA #$7F
STA $DD0D
LDA #>START ;ADRES STARTOWY
LDX #>KONIEC ;KONCOWY
LDY #SPEED ;PREDKOSC
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 ;CZEKA NA TIMER
AND #$01
BEQ *-5
LDA $DD01 ;ODCZYT PROBKI
LSR A
LSR A
LSR A
LSR A
STA $D418 ;WYSLANIE DO SID
STA $D020
LDA $DC01 ;CZY BYL STOP
BPL STOP
LDA $DC01 ;CZY SPACJA
AND #$10
BNE LOOP1
;NACISNIETO SPACJE START ZAPISU
STY $D011 ;WYLACZENIE VIC
DALEJ LDA $DD0D ;CZEKA NA TIMER
AND #$01
BEQ *-5
LDA $DD01 ;POBRANIE PROBKI
AND #$F0 ;STARSZY NIBBLE
STA PAMIEC
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
LDA $DC01 ;CZY BYL STOP
BPL STOP
LDA $DD0D ;CZEKA NA TIMER
AND #$01
BEQ *-5
LDA $DD01
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
ORA PAMIEC
INC $01 ;ZMIANA BANKU RAM
STA (STRLOW),Y
DEC $01
INY ;ZWIEKSZ ADRES
BNE DALEJ
INC STRHIGH
LDA STRHIGH ;CZY END
CMP END
BNE DALEJ
STOP LDA #$1B ;WLACZA EKRAN
STA $D011
CLI ;I PRZERWANIA
RTS
;---------------------------------------
READ SEI ;WYLACZENIE IRQ
LDA #$7F
STA $DD0D
LDA #>START ;ADRES STARTOWY
LDX #>KONIEC ;KONCOWY
LDY #SPEED ;PREDKOSC
STA STRHIGH
STX END
STY SPD
LDX #$00
STX STRLOW
JSR VOLUME ;GLOSNY SID
LDX #$07
JSR VOLUME
LDX #$0E
JSR VOLUME
JSR TIMER
STY $DD03
LDA $0318 ;ZAPAMIETANIE
LDX $0319 ;WEKTORA NMI
STA NMILOW
STX NMIHIGH
LDA #NMI
STA $0318
STX $0319
LDA #$81 ;ZEZWALA NA NMI
STA $DD0D
CLI
RTS
NMI PHA
TYA
PHA
LDY #$00
LDA PAMIEC
BNE NMI1
INC $01
LDA (STRLOW),Y ;ZM. BANKU RAM
DEC $01
LSR A
LSR A
LSR A
LSR A
STA $D418
STA $D020
LDA $DC01 ;CZY BYL STOP
BPL STOPNMI
STA PAMIEC
EXITNMI PLA ;WYJSCIE Z NMI
TAY
PLA
BIT $DD0D
RTI
NMI1 INC $01 ;ZM. BANKU RAM
LDA (STRLOW),Y
DEC $01
STY PAMIEC
AND #$0F
STA $D418
STA $D020
INC STRLOW ;ZWIEKSZ ADRES
BNE EXITNMI
INC STRHIGH
LDA STRHIGH ;CZY END
CMP END
BNE EXITNMI
STOPNMI LDA NMILOW ;STARY WEKTOR
LDX NMIHIGH
STA $0318
STX $0319
LDA #$01 ;WYL 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 ;USTAW TIMER
STA $DD05
LDA SPD
STA $DD04
LDA #$01
STA $DD0E
LDA $DD0D
RTS
;---------------------------------------
NMILOW
.BYTE $00
NMIHIGH .BYTE $00
;---------------------------------------
MONTAŻ.
Płytkę drukowaną należy przygotować we własnym zakresie według schematu z rysunku 1.
Rys. 1. Schemat ideowy samplera.
Montaż rozpoczynamy od wlutowania najmniejszych elementów, tzn. rezystorów i kondensatorów. Następnie nalutowujemy złącze USER portu na płytkę (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 potencjometrem 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 cartridge, wymagane będzie podpiłowanie obudowy w miejscu złącza, wyprowadzenia przewodu i osi potencjometru.
Rys. 2. Montaż złącza USER.
Przewód należy przewlec przez dwa otwory w płytce drukowanej, co zabezpieczy go przed wyrwaniem.
Rodzaj wtyczki zależy od użytego źródła sygnału i dobieramy ją indywidualnie. Osoby wykonujące płytkę ręcznie mogą mieć problem z poprowadzeniem ścieżki łączącej piątą nóżkę układu US 1 ze złączem USER. Można ją pominąć, ponieważ oprogramowanie nie wykorzystuje możliwości generacji przerwań. W razie potrzeby można powyższe połączenie wykonać przewodem od strony druku.
WYKAZ ELEMENTÓW.
Rezystory
R1, R6 : 220Ohm
R2 : 10kOhm
R3 : 150kOhm
R4 : 33kOhm
R5 : 3,9kOhm
R7, R8 : 100kOhm
P1 : 10kOhm
Kondensatory
C1, C2 : 2,2uF
C3 : 47pF
C4 : 100nF
C5 : 470nF
C6 : 220nF
Półprzewodniki
T1 : BC238
US1 : ADC0804
Różne
Złącze USER
Literatura:
Andrzej Markowski: Układy analogowe w systemach mikroprocesorowych WNT, Warszawa 1991, 1992.
USKA Układy analogowe 2/94. AVT, Warszawa, 1994.
USKA Układy analogowe 3/94. AVT, Warszawa, 1994.
Autor:
Data realizacji:
Data publikacji:
Data modyfikacji:
Pierwsza publikacja:
|
|
Sławomir Skrzyński
-
2.3.2004
-
EDW 3/97
|
|
#1 | Dzień 2-11-2007 | godz.12:25:36 | Autor: Kamil S. | Status: Brak błędów | AdrIP: Ukryty | Mam takie pytanko: Czy powyższy sampler
obsługuje wszystkie programy do
samplingu? |
|
#2 | Dzień 2-11-2007 | godz.15:55:23 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Sampler będzie współpracował z
większością programów, na pewno nie ze
wszystkimi, ale to jest sprawa
softwareowa, a nie sprzętowa. Sam
sampler jest uniwersalny, ale zdarzyło
mi się kiedyś, że program był napisany w
inny sposób i trzeba było zrobić jakąś
poprawkę w kodzie i dopiero wtedy zaczął
współpracować. Na pewno polecam
wykonanie tego samplera. |
|
#3 | Dzień 3-11-2007 | godz.22:39:33 | Autor: Kamil S. | Status: Brak błędów | AdrIP: Ukryty | Mam prośbę. Czy możesz mi podać swój GG,
lub jakiś inny komunikator? Bo nie chcę
głupimi pytaniami zaśmiecać :) Mój gg to
gg:5311282 |
|
#4 | Dzień 5-11-2007 | godz.11:19:50 | Autor: Kisiel/Icon | Status: Brak błędów | AdrIP: Ukryty | Warto by było zakupić przetwornik
4-bitowy... bo sample nie będą tak
szumieć. Ewentualnie letko pomaga
"uśrednianie" czyli odtwarzamy sampla 2x
szybciej z dostawianiem średniej
pomiędzy "prawdziwymi" próbkami.
Jak zauważyłem nawet
samplowanie i odszumianie sampla na pc
nie daje ciekawych rezultatów.
PS> A czy wogóle
jeszcze jest dostępny scalak 4-bity? |
|
#5 | Dzień 5-11-2007 | godz.16:12:19 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Nie słyszałem o scalonych
przetwornikach, które miałyby mniej niż
8 bitów, mógłbyś podać jakieś przykłady
i napisać coś o doświadczeniach z nimi?
Czemu te 4-ro bitowe miałyby być lepsze
niż 8-io bitowe (w trybie 4-ech bitów)?
Myślę, że szumy i tak
są niesłyszalne, ponieważ szum
akustyczny jest najczęściej wycinany
przez zbyt małą częstotliwość
próbkowania (typowy przypadek), ale dość
wyraźnie daje się we znaki chrobot,
czyli gdy jest zbyt mała rozdzielczość
próbki oraz występujące błędy
kwantyzacji. Te
uśrednianie, jak dla mnie to bardziej
ciekawostka, niż coś innowacyjnego.
Jestem ciekawy do jakiego maksymalnego
próbkowania można się posunąć, kiedy
uśredniamy sampl? Rozumiem, że dzieje
się to w realtime?
Samplowanie na Pc jest dobrym
pomysłem, jeśli nie masz samplera do
C64, ale moje odczucia są takie, że
jeden materiał lepiej brzmi, gdy jest
zrobiony na Pc, inny bardziej podoba mi
się, gdy zrobi się go na C64. Na pewno
edytory na Pc dają spore możliwości
edycyjne, tylko, że późniejsze
konwertowanie sampla do 4-ch bitów,
większość tych zalet niweczy. Można
spróbować jeszcze popracować nad
dynamiką sampla, to daje czasem pewne
wyjście z problemu. Któryś sampl
zrobiłem tą techniką (na którymś kompo
był puszczany), żebym tylko pamiętał,
który to był :-) |
|
#6 | Dzień 11-11-2007 | godz.17:49:33 | Autor: Prezes | Status: Brak błędów | AdrIP: Ukryty | Szumy slychac nawet na 8 bitach a co
dopiero na 4, zaden scalak tego nie
wyeliminuje. |
|
#7 | Dzień 12-11-2007 | godz.17:37:52 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Ja posługiwałem się sztuczką i
odtwarzałem zarówno 4-ro bitowe, jak i
8-io bitowe przez covox zbudowanym na
DAC i wzmacniaczu operacyjnym i było
idealnie. |
|
#8 | Dzień 14-11-2007 | godz.14:51:53 | Autor: Kisiel/Icon | Status: Brak błędów | AdrIP: Ukryty | Szumy czyli błędy kwantyzacji.. o to mi
chodziło (tzw. skrót macierewicza ;) )
Prezes a wydaje mi sie,
że lepiej brzmią 4 bity ADC odtwarzane
na 4 DAC. A konwersja 8 na 4 daje takie
szumy że tragedia. Procedurka do
odtwarzania dawała 240k przez coś koło
minuty czyli tak jakoś 7-8 khz. I
brzmiało to troszkę lepiej niż bez
"uśredniania". Pogadam jeszcze z
victorem jak będzie net w domu to sie
dowiem. A i jeszcze
scalak 4 bit... nie wiem z czego to
wyciągnąć. Może z oryginalnego sprzęciku
do komcia? |
|
#9 | Dzień 14-11-2007 | godz.17:41:42 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Kisiel, wystarczy 4-ry bity puszczać na
DAC 8-bitowym bez uzupełniania starszych
bitów. Korzystamy tylko z 4-ch młodszych
bitów przetwornika. Nie wiem, czy się
zrozumieliśmy, mam nadzieję. |
|
#10 | Dzień 15-11-2007 | godz.08:04:17 | Autor: Kisiel/Icon | Status: Brak błędów | AdrIP: Ukryty | No właśnie i tym sposobem "gubisz" dolne
4. Czyli masz "szumy".
Hmm a może... wystarczy tylko
zaokrąglać w górę? |
|
#11 | Dzień 15-11-2007 | godz.19:22:25 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Ależ nie gubię. Mam w pamięci C64 sampl
4-ro bitowy i puszczam go na User Port.
Do user portu podczepiony jest DAC08 i
jemu jest wszystko jedno, czy zobaczy
sygnal cyfrowy na starszym nibblu, czy
mlodszym. Mogę to programowo sobie
wybierać. On i tak zrobi z tego sygnał
analogowy. Szkoda, że nie mogę pokazać
Ci moich kodów, byłoby prościej, niż
opisywać. Moim zdaniem
zaokrąglanie zafałszuje próbkę. Nie
robiłbym tego. |
|
#12 | Dzień 15-11-2007 | godz.19:24:30 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | |
|
#13 | Dzień 20-11-2007 | godz.08:53:32 | Autor: Kisiel/Icon | Status: Brak błędów | AdrIP: Ukryty | Dla przykładu mierzymy poziom sygnału
0-256V Wartość $80 ->
$8 Wartość $89 -> $8
I tutaj jest błąd
pomiędzy watościami $89 a $8F oryginalny
4 bitowy sampler poda wynik $9. Czyli
dokładność do 1/2 ostatniego bitu.
To samo się dzieje z 16
bit obcinanym do 8 bitów.
Prawda, że proste? |
|
#14 | Dzień 2-2-2024 | godz.14:54:39 | Autor: Anonim | Status: Brak błędów | AdrIP: Ukryty | My name is Browder, I_m the founder of
Force Crawler. Are you growing an
agency? I am offering you a Moneyback
guarantee trial using the POWER of
www.ForceCrawler.com which gives you
access to contact any type of business
without needing to know their email
address, and GUARANTEED to get your
message onto the _Contact Us_ form of
1000_s of targeted websites overnight
just like this message. As a matter of
fact, the PROOF this works is that
you_re reading this message right now,
because we used it to post this message
on your website_s contact us page! This
message is a PRODUCT OF THE PRODUCT.
Target 1000 or 10,000 Businesses, any
Cities, Zip-codes, States, or Countries
world-wide. Use it to procure NEW
clients or use it as a service for your
clients_I_m so confident in the RESULTS,
I_m offering your agency a money, back
guarantee. Book an agency needs
assessment to find out what Force
Crawler can do for you!
Https://forcecrawler.com
/lets-talk |
|
#15 | Dzień 7-2-2024 | godz.04:48:58 | Autor: Anonim | Status: Brak błędów | AdrIP: Ukryty | Experience the SPEED of a 48-hour FREE
DEMO Force Crawler: ARE YOU B2B? Digital
marketers and advertising agencies: no
contracts_ We_ll provide you
_demonstrable evidence_ as PROOF _then
you can decide if this is the right fit
to EXPLODE your B2B outreach. We_ll walk
your message right through the front
door of targeted websites and put your
message on 10,000 _contact us_ forms
submitted with your custom message in
the first 48 hours_We provide VOLUME and
VELOCITY to your offer!
1. SCHEDULE a needs assessment (20
seconds) Https://forcecrawler.com
/lets-talk 2.
CREATE a free campaign. (90 seconds)
Https://48hourdemo.force
crawler.com/ 3.
START the Stopwatch for 48 hours and GO!
__.Because you_re
reading this message right now
demonstrates that FC is working because
this message is a PRODUCT of the
PRODUCT. How will YOU use it?
Browder_ The Founder of
www.ForceCrawler.com _. Info
@ForceCrawler.com _ 888-479-6878 |
|
#16 | Dzień 9-4-2024 | godz.23:18:57 | Autor: Marcin | Status: Brak błędów | AdrIP: Ukryty | Cześć. Zastanawiam się czy ma sens
pisanie tutaj ale, mam pytanie. Czy ktoś
może pokazać, załączyć lub podesłać
rozrysowane pcb dla ręcznego wykonania? |
|
#17 | Dzień 12-4-2024 | godz.16:03:04 | Autor: Reiter | Status: Brak błędów | AdrIP: Ukryty | Być może jest jakaś płytka w dawnym
wydawnictwie AVT lub jakiś zestaw z
takich gotowców. Ja mam w posiadaniu
sampler BIWu z wbudowanym covoxem.
Polecam poszukać na YouTube jakiś kanał
typu retrogralnia i tam zacząć pytać. |
|
Instrukcja używania systemu komentarzy
- W polu "Podpisz się" umieszczasz swoje Imię, Nazwisko albo Pseudonim używając znaków alfanumerycznych: A-Z, 0-9 oraz znaków specjalnych, np.: !^<>" ' itp.
Tagi HTML są nieaktywne.
- W polu "Wpisz treść" umieszczasz komentarz używając znaków alfanumerycznych: A-Z, 0-9 oraz znaków specjalnych, np.: !^<>" ' itp. Klawisz ENTER tworzy nowy akapit.
Tagi HTML są aktywne. Możesz:
Możliwość:
|
Komenda:
|
Przykład:
|
a. Pogrubić tekst: |
<B></B> |
Pogrubiony |
b. Pochylić tekst: |
<I></I> |
Pochylony |
c. Podkreślić tekst: |
<U></U> |
Podkreślony |
d. Stworzyć indeks górny: |
<SUP></SUP> |
Indeks górny |
e. Stworzyć indeks dolny: |
<SUB></SUB> |
Indeks dolny |
f. Użyć czcionki maszynowej: |
<TT></TT> |
Czcionka maszynowa |
Adresy URL wpisujemy w postaci http://nazwastrony.pl, ftp://nazwastrony.pl.
Adresy email wpisujemy w postaci nazwa@nazwa.pl.
Adresy Gadu-Gadu wpisujemy w postaci gg:1234567 (bez spacji).
Proszę pamiętać o domykaniu otwartych tagów.
Przed naciśnięciem przycisku Komentuj, zaznacz checkboks przy jego prawym boku.
|
|
|