STARTUJ ULUBIONE CO NOWEGO? C64 FORUM KSIĄŻKA GOŚCI REDAKCJA KONTAKT

PODAJ EMAIL, ABY BYĆ NA BIEŻĄCO INFORMOWANYM O AKTUALIZACJI MAGAZYNU:    
Informacje o aktualizacji Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Skocz do działu Poczytaj lub dodaj wpis Czyli kto to tworzy Kontakt z nami

Internetowy Fanclub Agnieszki Cegielskiej - www.cegielka.net


SONDA

Jak dowiedziałaś(eś) się o istnieniu tej strony?
Z innej strony - link
Z wyszukiwarki
Znajomy podał adres
Inne



OSTATNI KOMENTARZ  ?

Obwody drukowa ...
Porównanie kom ...
Śpiewać każdy ...
Budujemy carty ...
Rozmowa z ramo ...

(7)
(11)
(51)
(6)
(2)



WYBIERZ MELODIĘ       ?


The last ninja
The l.n. The wilderness
The last ninja 2
The l.n.2 The basement
The l.n.2 The final battle
The l.n.2 The mansion
The l.n.2 The office
The l.n.2 The sewers
The l.n.2 The street
The great giana sisters
The green beret
Turrican intro
Bubble Bobble Remix
Creatures
Game over
Mayhem intro
Diablo
Doom 2 Hell on Earth
Hi-octane
Xenon 2
Mario in the Loonybin
Tetris (gameboy) remix


Jaws
Spy vs spy
Draconus
Ghoust busters
Tetris (c-gameboy)
Duke Nukem 3D




SPRZĘT 


SAMPLER DO C-64



   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





DODAJ SWÓJ KOMENTARZ



#1Dzień 2-11-2007godz.12:25:36Autor: Kamil S.
Status: Brak błędówAdrIP: Ukryty
   Mam takie pytanko: Czy powyższy sampler obsługuje wszystkie programy do samplingu?

#2Dzień 2-11-2007godz.15:55:23Autor: Reiter
Status: Brak błędówAdrIP: 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.

#3Dzień 3-11-2007godz.22:39:33Autor: Kamil S.
Status: Brak błędówAdrIP: 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

#4Dzień 5-11-2007godz.11:19:50Autor: Kisiel/Icon
Status: Brak błędówAdrIP: 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?

#5Dzień 5-11-2007godz.16:12:19Autor: Reiter
Status: Brak błędówAdrIP: 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ł :-)

#6Dzień 11-11-2007godz.17:49:33Autor: Prezes
Status: Brak błędówAdrIP: Ukryty
   Szumy slychac nawet na 8 bitach a co dopiero na 4, zaden scalak tego nie wyeliminuje.

#7Dzień 12-11-2007godz.17:37:52Autor: Reiter
Status: Brak błędówAdrIP: 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.

#8Dzień 14-11-2007godz.14:51:53Autor: Kisiel/Icon
Status: Brak błędówAdrIP: 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?

#9Dzień 14-11-2007godz.17:41:42Autor: Reiter
Status: Brak błędówAdrIP: 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ę.

#10Dzień 15-11-2007godz.08:04:17Autor: Kisiel/Icon
Status: Brak błędówAdrIP: 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ę?

#11Dzień 15-11-2007godz.19:22:25Autor: Reiter
Status: Brak błędówAdrIP: 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.

#12Dzień 15-11-2007godz.19:24:30Autor: Reiter
Status: Brak błędówAdrIP: Ukryty
   Spójrz jeszcze tutaj http://www.filety.net/in dex.php?strona=arty/sprzet/edw/covox/cov ox. Mam chyba podobną wersję, jak ta na schemacie.

#13Dzień 20-11-2007godz.08:53:32Autor: Kisiel/Icon
Status: Brak błędówAdrIP: 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?

Instrukcja używania systemu komentarzy    

  1. 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.
  2.    
  3. 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:

  4.    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.

Podpisz się:

Wpisz treść:

   wyślij mój komentarz    ukryj mój adres IP