Razmo's Gear Rant tråd...

Medlemmernes egne blogs om musik, teknik og hverdag.
Forumregler
Kun 1 blog pr. bruger.
Nyt svar
Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Razmo's Gear Rant tråd...

Indlæg af Razmo »

Hej alle :)

Nu er det min tur til at smide en blog op her inde, ikke omkring mig selv som sådan, men snarere et projekt jeg er begyndt på.

Min pointe med en blok omkring emnet er først og fremmest, at "holde mig til ilden", da det ligger lidt ekstra pres på én, når det først er blevet lidt offentligt, og jeg har det med at rende fra det ene til det andet :)

Indrømmet... jeg har ikke megen erfaring med elektronik, og aner faktisk stadigvæk ikke hvordan modstande, kondensatorer og alt det passive elektronik habbengut fungerer i samspil, men jeg har lært mig selv at læse diagrammer, og med alt det tilgængelige materiale der er på nettet, er det ikke noget større projekt at tage lidt hist og pist, ændre her og der, og samtidigt få noget brugbart ud af det... og så selvfølgeligt lære lidt undervejs. Jeg har altid gerne villet bygge synths og audio ting, og nu skal det altså være.

Kodning i assembly sprog er jeg dog ganske bekendt med fra min lange tid i AMIGA gruppen Kefrens, som jeg startede med et par venner engang i start 90'erne, så det at kode en MCU (microcontroller) er ikke det helt store problem for mig... det er elektronikken og debugging af denne der volder størst problem nogen gange, dog har alt virker ved første forsøg på det her projekt... lidt utroligt egentligt :roll:

Nå, men videre til selve projektet:

Jeg har altid været fan af den gode gamle hjemmecomputer Commodore 64, og har altid gerne ville kode en synthesizer til denne... selve C64 er ikke helt hurtig nok til mig synes jeg, og den er alt for klosset at implementere i et studie setup... det samme gælder AMIGA'en, som kunne være "host" til sådan et projekt, men igen; for besværligt og omstændigt selv om jeg kender 68000 processoren til hudløshed.

Løsningen er blevet, at jeg vil lave synth'en helt fra bunden på et Wishboard... altså dvs. at jeg selv skal stå for power regulating samt forbindelser til stort set alt elektronik, både digitalt og analogt.

Nogle vil nok sige, at der findes løsninger allerede, som f.eks. Elektron SID Station, HardSID eller MIDI Box SID, og jeg har to af disse stående, men som det altid har været med mig, så er der ALTID "et eller andet" der ikke lige funker som JEG vil have det skal, og hvad gør man så?... man laver det selv... tror det er dansken's evne til at ville opfinde hjulet flere gange, ved det ikke :roll:

Mit projekt går ud på at skabe en yderst LILLE og SIMPEL maskine rent teknisk, uden displays, knapper og potmetre, altså at maskinen skal være 100% MIDI styret... altså mest til brug i studie sammenhæng. Den skal selvfølgeligt kunne controlleres via en controller hvis det er ønsket, så den KAN bruges live hvis det er ønsket.

Dvs. MIDI ind/ud, Audio Ud, Tænd/sluk knap samt 3 LEDs til Power/MIDI in/MIDI out signalering (ingen Audio Ind, selv om SID chippen tillader dette... mere om det senere).

Til mit projekt ar jeg valgt en PIC 18F452 Microcontroller fra Microchip... samme type MCU som bruges i nogle MIDIBOX projekter (http://www.uCApps.de). Koding er ren RISC assembly sprog, da jeg ikke kan C (jeg er gammel C64/AMIGA assembly hardcore freak! full control og fastest possible! Ren primitiv kodning for nørder 8-) ).

Et par andre grunde til at lave maskinen her, selv om der findes andre alternativer er, at jeg vil have en single-SID synth, da MIDIBOX versionerne er stereo maskiner... disse virker bedst med den senere revision af SID chippen (8580) da den første version (6581) er så forskellig fra chip til chip, at to chips (en i højre side og en i venstre) altid vil give weird stereo effekter da de to chips ikke lyder ens nok (filteret er weird!). Min synth skal kunne bruge en 6581 SID chip, som er den de fleste kender lyden af.

Ydermere er der en grund mere til at jeg laver det her, og det er at jeg ønsker en maskine der er knap så avanceret som MIDIBOX SID, og knap så dyr som en HardSID eller SID Station... der er simpelthen så mange indstillinger, at det frarøver min lyst til at programmere den, så min synth skal være mere brugervenlig, mere "live" inspireret (så meget som den nu kan, uden at være stoppet med potmetre og knapper hehe).

Nå, men alt den snak, skal suppleres af et foto af projektet som det står ind til videre:
SID_Project_1.jpg
SID_Project_1.jpg (516.85 KiB) Vist 14378 gange
PT er det hele lige kommet op at køre... dvs. at MCU'en kører et program, SID'en spiller pt. et "A4" med én oscillator sat til Sawtooth... ikke meget, men det VIRKER :dollargrin: MIDI fungerer med output (har forbindelse til MIDI monitor på PC'en).

Monotron'en som kan ses ved siden af bruges pt. som højttaler, så jeg er fri for at brænde indgangen på min ONYX mixer :wink:

Næste skridt de kommende dage bliver at få kodet en MIDI transmit og recieve rutine med buffer så jeg kan begynde at lave editor i SoundDiver til projektet.

Det endelige resultat af hele dette projekt er endnu ikke HELT afgjort, og jeg kan finde på hvad som helst at udvide det hele med... nogle tanker jeg har haft er f.eks.

1. kombinere SID med en YM2151/2164 FM chip fra Yamaha, hvor YM chippens ene output er routet ind i SID'ens analoge input... hermed give mulighed for at bruge SID'ens analoge multimode filter på FM chippens lyd.

2. Lave en VCA efter SID'ens output, som kan styres fra microcontrolleren... pointen med dette er at lave et work-around for en stor bug der er i SID chippen's envelopes (timingen sucs ved live brug hvis der er nogen som helst attack, decay eller release på volumen). En VCA vil kunne løse dette problem.

3. alt muligt andet jeg finder på :dollargrin:


Nå... men det var alt for denne gang... der vil blive skrevet opfølgning efterhånden som projektet skrider frem, med billeder og lydeksempler.

Peace!
Senest rettet af Razmo søn 5. okt 2014 21:44, rettet i alt 2 gange.
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Christoffer I. N.
Lydmaskinist
Indlæg: 35517
Sted: Hørsholm

Indlæg af Christoffer I. N. »

Skal da nok blive et spændende og anderledes indslag herinde. :)

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

De sidste par dage er gået med:

1. At få MIDI Input/output til at fungere.
2. Kode en MIDI parser.
3. Installere en trykknap.

Trykknappen var ikke det værste, og jeg lærte en hel del om Pull-Up resistorer samt hvad det er der sker, når en MCU pin enten source'er eller sink'er strøm. Jeg har nu en enkelt trykknap til rådighed som jeg benytter til at dump'e interne data I MCU'en til dens indbyggede EEPROM lager (som ikke slettes ved power-down). Det er ikke mere end små 256 EEPROM bytes, men det er handy til at se hvad der sker i MCU'en når ens kode f*ck'er op (hvilket den gjorde big time hehe :roll: ). På denne måde kan jeg læse EEPROM dataene ind i PC'en, og se hvad der er galt osv. Lidt omstændigt, men eneste udvej pt. (der er ingen display's eller andre terminaler jeg kan se det på imens skidtet kører).

MIDI in/out var heller intet problem... begge dele virkede ved første forsøg, så hardware'en er i orden på det punkt... jeg kan se reaktion i min MIDI monitor på PC'en når jeg sender noget, og jeg kan se LED'en blinke på synth'en når der kommer signel ind via MIDI input. nice...

MIDI parse'eren var og er dog stadig lidt af et mareridt. At kode en MIDI parse rutine er ikke ligetil, specielt ikke når man ikke kan se hvad f..... der fåregår i MCU'en og debug'e fejl nemt... Der er stadig knas med MIDI bufferen (den man lagrer MIDI data i når de kommer ind, så der ikke går nogen tabt), og den vil kun gemme op til halvdelen af bufferen (128 bytes af 256) af en eller anden mærkelig årsag, og den smider også en bunke random bytes ind overalt i bufferen. Jeg håber at få styr på dette i morgen, men det er svært da man konstant skal ind på PC'en og se EEPROM'ens data for at se hvad der er galt... at PIC 18F452 kode i forvejen er primitiv og omstændig gør det ikke meget nemmere... 77 instruktioner at gøre med.... her er et lille udpluk af noget af koden (just for the currious):


"cpfsgt MIDI_RCREG ;if yes, then skip
goto MIDI_Parser_ProgramChange
movlw 0xDF ;Test if MIDI data = channel pressure
cpfsgt MIDI_RCREG ;if yes, then skip
goto MIDI_Parser_ChannelPressure
movlw 0xEF ;Test if MIDI data = pitch bend
cpfsgt MIDI_RCREG ;if yes, then skip
goto MIDI_Parser_PitchWheel
movlw 0xF7 ;Test if MIDI data = system common
cpfsgt MIDI_RCREG ;if yes, then skip
goto MIDI_Parser_SystemCommon
goto MIDI_Parser_SystemRealtime

MIDI_Parser_DataValue:
tstfsz MIDI_DataCount
goto MIDI_Parser_DataStore
MIDI_Parser_RunningStatus:
return
MIDI_Parser_DataStore:
call MIDI_WriteBuffer
tstfsz MIDI_DataCount
return
incf MIDI_EventCount
movf MIDI_BufferPointer,W
andlw b'11111100'
movwf MIDI_BufferPointer
movlw 0x04
addwf MIDI_BufferPointer
return

MIDI_Parser_NoteOff:
bcf PORTA,0 ;turn LED off
movlw 0x03
movwf MIDI_DataCount
call MIDI_WriteBuffer"

Sådan ser PIC MCU kode altså ud (for dem der ikke ved det :) )... selv om alle mine tabulator indryk er smadret her på forum'et hehe

Et lang stykke hen ad vejen handler det også om, at MIDI protokollen lavet i start 80'erne ikke er særlig medgørelig... det er et gedemarked at holde styr på hvad der er hvad, hvilke commando'er der skal ignoreres, hvilke der skal gemmes osv... nogle har 3 bytes, andre 2 eller 1 byte pr. kommando... og så er der det hersens "Running Status" format som gør det hele endnu mere kompliceret.... hvis jeg er for teknisk, så er det fordi det ER teknisk ad H til! :? ... og alt skal nå's i et interrupt der ikke må tage længere tid, end alt er færdigt inden næste MIDI byte kommer ind udefra... *SUK!* ... heldigvis kører MCU'en på 40MHz clock (10MHz internt i MCU'en), så det går nok.

MIDI trænger til en moderne overhaling, men det ville gøre en masse maskiner "obsolete", så det er nok derfor det ikke sker... for dem der ikke vidste det, så er skaberen af MIDI i øvrigt hr. Dave Smith fra DSI :wink:

nå... nok for i dag (nat)... mere senere... feel free to comment i øvrigt :)
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Fixed... nogle gange kan det betale sig at få noget søvn, det klarer hovedet og gør det nemmere at finde fejl :roll:

Mine problemer fra i går viste sig at være pga. 2 små fejl som blot var emner jeg ikke vidste om processoren. De random bytes spredt rundt i bufferen var simpelthen fordi RAM'en ikke er slettet når processoren starter op, den har en bunke random bytes overalt i RAM'en, så det eneste der skulle til at fjerne dette var at slette hukommelsen inden brug... simple

Andet problem med at den kun ville fylde halvdelen af min MIDI Buffer var straks noget sværere at finde... kunne ved gud ikke finde ud af hvad der var galt i min kode, men efter et par timer i dag fandt jeg ud af at jeg havde overset at en instruktion ikke fungerede som jeg troede.

Sådan teknisk handlede det om, at en indirekte addressering af buffer hukommelsen blev gjort "signed"... dvs. at jeg kunne adressere ud fra bufferens start adresse med -128 til +127 bytes... jeg troede det var fra 0 til 255 hvilket forklarer hvorfor jeg kun fik fyldt den første halvdel af MIDI Bufferen... så lærte jeg lidt igen :) ... skal nok huske det fremover, da det har taget mig 3 dage at spore den fejl :?

Ellers er der ikke andet nyt på projektet, andet end en masse tanker om hvordan synth'en skal bygges op rent parameter mæssigt... hvor mange LFO'er, hvor mange envelopes osv. tror meget af dette bliver ændret hen ad vejen, men det er stadig min forestilling, at hver af SID'ens 3 oscillatorer skal være individuelle og have hver deres dedikerede LFO, Glide, ADSR Envelope, wavetable osv.

En funktion der er vigtig for mig er, at hver oscillator bliver opfattet som en separat lille synth og kan styres fra hver sin MIDI kanal... grunden til dette er, at det var sådan man lavede musikken på SID'en på Commodore64'eren, og mange af bla.a. Rob Hubbard's numre (hvis man ikke kender ham, kender man heller ikke C64!) brugte et trick med at Sync'e og RingMod'e forskellige kanaler, og spille forskellige melodier på hver oscillator... dette er meget karakteristisk for C64 lyden bla.a. så derfor er det et must... der er ikke mange synths andre end C64 der giver denne mulighed.

Nå... næste omgang bliver at få designet en Editor i SoundDiver på PC'en til at styre de rå hardware parametre af SID... en nærmere beskrivelse af SID chippen's funktioner kommer snart... stay tuned! 8-)
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

OK... så fik jeg lavet den del der skal initialisere System Exclusive delen af synth'en... ikke noget større problem, selv om det lige skulle gennemtænkes hvordan formatet skulle være... har også lavet editor i SoundDiver så den er klar til at kommunikere med synth'en... her er et lille billede af editoren:
SID_Project_2.jpg
SID_Project_2.jpg (209.05 KiB) Vist 14263 gange
Hvad der kan ses ind til videre er SID chip'ens absolut "basic and raw" parametre... der er ikke flere at gøre med rent hardwaremæssigt, men heldigvis er disse parametre justerbare i realtime hvilket også blev/bliver flittigt brugt på C64 scenen, så yderligere egenskaber vil være 100% software genereret... som f.eks. LFO's, Filter Envelope, Portamento, Wavetables osv.

basically, så består SID chip'en af 3 oscillatorer, et multimode analogt filter og en volumen kontrol til sidst... resten kan vidst tydes via billedet af editoren :)
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Opdatering:

PT. er C64 SID projektet lagt på hylden til en pause... der var nogle ting der ikke helt fungerede som jeg ønskede det, og når jeg får løst dem (som f.eks. et Wishboard der IKKE er defekt :roll: ) så vil jeg arbejde videre på det...

Lige pt. er jeg startet på et lidt andet projekt, nemlig at MIDIficere min KORG Monotron analoge monosynth... ja KORG putter jo ikke MIDI i deres nye analoge grej, og så må man jo selv gøre det ikke? :roll:

KORG Monotron er forholdsvis nem at modificere, da alle CV inputs er tydeligt markeret på printet, og jeg fik så den idé, at jeg ikke bare ville nøjes med at midificere min Monotron, men rent faktisk hook'e den sammen med min PIC processor som aligevel styrer MIDI funktionerne... på den måde har jeg så lavet nogle R2R DAC'ere (DAC'ere lavet kun med modstande) og kan derved styre både Pitch, Gate samt Filter Cutoff via digital control fra PIC'en.

Hvad betyder det så på dansk? ... jo det betyder, at jeg i software kan lave bla.a. den ADSR envelope som Monotron'en normalt ikke har, samt LFO med flere waveshapes... ja jeg kan også lav en stepsequencer til den, jeg kan lave Portamento... stort set alt man kan lave ved at modulere Pitch og cutoff kan laves med digital kontrol.

Men det åbner en mulighed mere; jeg kan gemme presets af de software styrrede ting jeg laver, så det er planen at kunne gemma et sted imellem 128 og 1024 presets også... Monotron'ens normale funktioner er alle stadig brugbare lige bortset fra ribbon controlleren, da den var nødt til at dø for at gøre Gate input'et funktionelt (skulle fjernes en lille surface mount modstand på printet).

Der er i virkeligheden nogle flere CV inputs markeret på printet, men det er mest til styring af Monotron'ens indbyggede LFO... jeg behøver ikke lave noget ved det, da styring af cutoff og pitch kan gøre det samme via software aligevel, og der er også begrænset antal pins på PIC MCU'en...

PT. har jeg 8bit opløsning på pitch kontrollen, og det er for lidt, så jeg skal have udvidet DAC'en til en 11bit... med 8 bit er der kun 7 niveau'er imellem hver semitone og det er for lidt til Portamento, vibrato osv.

Jeg følger op med billeder og lydeksempler når jeg er kommet lidt videre... stay tuned...
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Morten B
Forum Donator
Indlæg: 6610
Sted: Søvind

Indlæg af Morten B »

Jeg kan ikke rigtig kommentere på dit arbejde, da jeg ikke rigtig aner noget om det, men det er spændende at følge med i dine projekter :)

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Uncite skrev:Jeg kan ikke rigtig kommentere på dit arbejde, da jeg ikke rigtig aner noget om det, men det er spændende at følge med i dine projekter :)
He he... ja sorry, jeg ved godt det er lidt teknisk... men jeg ser nok blog'en her sådan lidt "dagbogsagtig", så det er bare tankerne der ryger ud på skrift.

Men sådan kort fortalt, så har jeg puttet MIDI in/out i min Monotron (eller rettere jeg har hevet indmaden ud, og tilsluttet den MIDI hehe... sgu' ik plads til noget som helst i den bette "æske" :dollargrin: ).

Sådan rent praktisk betyder det bare, at alle de CV indgange der faktisk ER inden i Monotron'en har jeg tilsluttet mit elektronik projekt... det svarer ikke til andet end en MIDI to CV converter, bortset fra at jeg selv har kodet processoren der styrer converteringen, og det giver mig mulighed for at lave alle andre mulige sjove digitale kontrolleringer af Monotron'en.

Med andre ord; en ellers 100% analog synth blir til en digital kontrolleret analog synth :dollargrin: ... så i bund og grund er det nu en DCO og ikke en VCO.

Pointen er så, at når jeg kan styre pitch og cutoff via processoren, så kan jeg lave software envelopes, da Monotron'en jo normalt ikke har en envelope, kun en LFO... og mange andre sjove ting... blandt andet patch storage.

hmm... fik jeg mon forklaret det mindre teknisk end før!? :roll: ... nå men det er altså hvad jeg laver pt hehe...

Sidste nye er at jeg har lavet endnu en DAC til at converte cutoff CV'et, og jeg kan nu styrre filter cutoff via MIDI CC#

Næste step blir at lave en envelope til filteret... og så kommer der lydeksempler :)
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Morten B
Forum Donator
Indlæg: 6610
Sted: Søvind

Indlæg af Morten B »

Sorry, det analoge er jeg rimeligt med på, det er mere din SID synth, men hold det endelig nørdet :-D

Medlemsavatar
SIDwave
Forum Donator
Indlæg: 2635
Sted: Denmark

Indlæg af SIDwave »

Du går da til makronerne Razmo ! :)
Nice nok!

Men husk nu at lave dit album færdigt også!: D

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

SIDwave skrev:Du går da til makronerne Razmo ! :)
Nice nok!

Men husk nu at lave dit album færdigt også!: D
He he!... ja jeg ved det... jeg skal passe på, ellers har jeg 100 projekter kørende der aldrig blir' færdige :lol: ... sådan er det bare, når man er diagnosticeret med ADHD, sååå... det må jeg nok bare tage med... musikken kommer stille og roligt hen ad vejen... pt. er alt fokus på den Monotron MIDIficering... heldigvis er det et lille project, da det er begrænset hvor meget fidus man kan lave, når man har to parametre at rode med (pitch og cutoff).
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

http://razmo.ziphoid.com/MemotronDemo.mp3

OK... her er første lydeksempel.... ikke noget videre vildt, blot en lille sekvens med et eksponentielt decay på software ADSR'en der går til filter cutoff... sekvensen er optaget på PC'en via MIDI som så trigger monotron'en...

Jeg leger lidt med Monotron'ens originale LFO i både pitch og cutoff mode, samt tweaker resonansen og cutoff på Monotronen undervejs også...

Pt. går det legende let med kodningen af det... intet specielt besværligt... det største prob. jeg har lige pt. er at Monotron'en er fandens støjende... det er den normalt fra fabrikken af, men jeg har lidt bøvl med noget ground-hum jeg ik helt kan komme af med... det kommer kun når jeg er tæt på maskinen med hånden, og forsvinder helt når jeg flytter den fra maskinen igen... død irriterende og har prøvet alt uden held med at få det væk (ja jeg har jo ikke prøvet alt, for så havde jeg fundet løsnignen).

Flere updates som projektet skrider fremad... bliver spændende når der kommer velocity sensitivity på maskinen også, og så burde der nemt kunne laves nogle syrede kick lyde også.... går lidt og leger med tanken om at udvide projektet sådan at jeg smider endnu en DAC fra PIC MCU'en over i Monotron'ens audio input... på den måde kan jeg lave en digital oscillator også, som kan kombineres med Monotronen's analoge osillator... dette ville være syret... ja og så vil FM også være muligt ved hurtig modulation af enten pitch eller cutoff.... hmmm... der er flere muligheder end jeg først regnede med :)

PS... der er også echo på demo'en i øvrigt...
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Og så lidt af det tekniske bag sådan en ADSR i software:

Envelopes'ne i denne Monotron MIDIficering skal være noget specielt... de skal være HURTIGE, og have mulighed for at styre den "kurve" hvormed ADSR'en stiger eller aftager (Attack/Decay/Release)... hvorfor? fordi at hvis ikke denne ADSR sparker røv, så er der ikke megen fidus ved modificeringen, da LFO'en i Monotronen jo er analog, og derfor ekstremt snappy... det ville være lidt lame hvis ADSR'en så er dårligere.

En af de mest vigtige ting i at få en ADSR til at lyde godt er to ting: 1. den er hurtig og opdaterermange gange for at undgå "steppyness"... og 2. der er eksponentiel kurve på ADSR'en.

Det med den kurve er vigtig hvis lyden skal være "snappy"... en lineær ADSR er direkte kedelig, rent ud sagt. De fleste software genererede ADSR'er på andre synths har bare en fast ksponentiel decay kurve, men jeg vil lave 8 forskellige exponentielle kurver, der også kan flippes i Y retningen, hvilket vil give 16 forskellige kurveformer.

Den måde jeg gør det på minder om den måde man laver en fase akkumulator oscillator, nemlig ved at bruge en tæller... en 16bit tæller for at være præcis... denne tæller blir så sat til at tælle fra 0 og op til 65536 hvor den "kammer over" tilbage til 0... hastigheden på ADSR'en laves så ved at man varierer hvor meget denne tæller forøges hver gang ADSR'en opdateres... en forøgelse med 1 giver meget langsom hastighed, og højere selvfølgeligt hurtigere.

Der vil være mulighed for at bestemme hvor meget der forøges ved at brugeren kan styre hvor meget der lægges til i de nedderste 8 bits... altså et tal mellem 0 og 255... på denne måde sikrer jeg mig, at de øverste 8 bits af tælleren aldrig forøges med mere end 1 ad gangen hvilket gør at ingen værdier i de øverste 8 bits skippes... for at dette kan virke skal opdateringshastigheden være ekstremt hurtig hvis envelope'en skal kunne være hurtig.

Pointen er så, hvordan får man dette til at være eksponentielt, når forøgelsen er den samme hver gang?... det betyder jo at forøgelsen netop er lineær og ikke eksponentiel...

ganske simpelt; det klares med en "look up table"... jeg har simpelthen laves en eksponentiel kurve... ja faktisk de 8 jeg talte om længere oppe i 8 tabeller med 256 "samples"... dette passer fint til de øverste 8 bits af tælleren, som så fungerer som et index ind i tabellen der benyttes, og på den måde kan der laves en ADSR med stort set en hvilken som helst kurveform... også sinus kurve hvis man ville... og ja, det er sådan en LFO laves også.

At vende kurverne om i X og Y retningerne er også nemt (skal bruges til Attack fasen)... hvis man vil vende omvendt på X aksen, så inverterer man blot alle bits i tællerens øverste 8 bits, inden man "slår op" i tabellen.... hvis man vil vende om på Y aksen er det samme princip, men bare en invertering af selve værdi'en i tabellen.

Faktisk er det samme princip man kan bruge for at lave en oscillator... kræver igen blot at hastigheden af opdateringen igen er hurtig... faktisk den dobbelte frekvens af den frekvens man ønsker (Nyquist theorem), og slår så waveform'en op i en tabel på samme måde... skifter man så imellem tabeller med forskellige waveforms med en ADSR... ja så er man i Waldorf land med Wavetable syntese :wink:

Stort set alle sample playere fungerer på en eller anden måde der minder om dette princip... det kaldes også for en Phase Accumulator Oscillator.

nå... nok uforståeligt teknik for nu... 8-)
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

For dem der vil vide mere om "Phase Accumulating Oscillators", er der go' info her: http://www.electricdruid.net/index.php?page=info.dds
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Audio Demo ovenover er blevet opdateret efter lidt justeringer... MIDI kommunikationen er blevet lidt bedre siden sidst...

EDIT!: Pas på volumen! Der er pludselige EKSTREMT høje resonanser i den demo!
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Åh ja... og så har jeg opgraderet PIC processoren fra en PIC18F452 til en PIC18F4685.

Jeg har nu 96 kilobytes program memory at gøre godt med... svarer til ca. 49.000 instruktioner i ren assembly RISC kode... 3328 bytes RAM at gøre godt med... 1024 bytes EEPROM memory... det er minimale forhold at arbejde under, men det er netop det der gør det så spændende for mig... at arb. under begrænsninger. CPU'en kører i øvrigt på en 40Mhz clock, hvilket svarer til 10 millioner instruktioner pr. sekund.
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Update:

Jeg kunne høre, at der var "et eller andet" med den filter envelope... det lød ikke "bouncy" nok, så jeg nærstuderede det hele lidt og fandt frem til, at filteret i Monotron er lidt specielt med hensyn til CV->cutoff. Jeg bemærkede, at CV'et kun havde en effekt efter ca. 1.36volt som er Monotron'ens virtuelle jord (ca. halvdelen af de 3v den kører på, hvilket svarer meget godt til at lyd som regel svinger omkring 0v).

Det betyder altså, at cutoff knappen skal være skruet halvvejs op for at give et korrekt offset i volt, og at CV'et skal have nok modstand til at komme ned på at være fra ca. 0-1.36volt, sådan at max CV styrke bliver max 3v inklusiv offset'et på 1.36volt. Jeg fandt et potmeter og smed ind på CV'et, så jeg nu kan finjustere CV range'en præcist.

Det hjalp en HEL DEL på "bouncy'ness"'en af min software envelope med de ændringer... Demo'en ovenover er udskiftet med en ny verion der viser hvordan det SKAL lyde... jeg justerer envelopen's hastighed undervejs.

Ud over dette fik jeg også rettet nogle småfejl... bla.a. det man i MIDI protokollen kalder "running status" har voldt kvaler, men er nu fixet. Running Status er en måde i MIDI data overførslen, hvor man kan undlade at sende Status byte'en ved hver eneste MIDI meddelelse (specielt besparende på CC# meddelsler), og nøjes med data bytes'ne, så man får mindre pres på MIDI data overførslen... Running status virker nu som det skal... man skal blot sørge for, at softwaren husker hvilken status byte der sidst blev brugt....

I øvrigt kan jeg oplyse at opdateringsfrekvensen på software envelope'en pt. kører 4.883khz hvilket jo er langt op i det hørbare frekvensområde, så den er ret så "tight"... rent teknisk betyder det at den hurtigste decay tid er på ca. 5ms... og på de 5ms vil software envelopen være opdateret 256 gange og have gennemløbet alle 256 værdier i envelope lookup tabellen.
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

http://razmo.ziphoid.com/MemotronDemo.mp3

Ny audio-demo update... jeg har rodet lidt mere med envelope'en til filteret sådan at den nu også har Attack... bemærk på demo'en hvor støjende Monotron'en egentligt er... ret fildt, men der skulle efter sigende være et mod, hvor man tager audio'en lige før volumenknappen, som dermed skulle være meget bedre kvalitet... det er noget med at headphone output er meget dårligt pga. den OpAmp der er i Monotron'en. Noget jeg skal have set på senere... men pt. skal den envelope være færdig.

Demo'en er et multitrack optaget spor for spor via harddiskrecording, men alt er 100% Monotron, bortset fra en smule delay... melodi'en er delvist inspireret fra et gammelt C64 spil "Spy vs. Spy"...
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

UPDATE:

Jeg har lagt Monotron projektet lidt på hylden pt. da jeg er gået tilbage til Commodore 64 SID projektet igen.

Jeg har nu fået lavet hele opsætningen på prototype board'et om, og det hele lader til at være bedre og mere overskueligt nu... har besluttet at Synth'en skal hede Micro SID, da det er noget nær det minimale man kan komme afsted med rent hardware mæsigt...

Software'en er også blevet shinet lidt op, og nogle ting er faktisk lavet helt om. MIDI sektionen er gjort forfra, da det blev for indviklet rent kode mæssigt at skulle parse en MIDI buffer, og da PIC MCU'en er så hurtig som den er, kan den aligevel nå at bearbejde alt MIDI data og returnere fra interrupt inden næste MIDI byte ligger klar på linien.

Har også lavet en meget bedre måde at overføre data til SID chip'en på... før var addresseringen af chippen asynkron, hvilket kan give problemer, så jeg havde behov for at kunne vide hvornår SID chip'en er i gang med at load'e data og hvornår ikke, så jeg kan overføre ændringer imens den IKKE opdaterer.

SID chippen er opbygget således, at den clock'es med et 1MHz clock signal, hvilket jeg har sat PIC'ens PWM output til at klare... jeg har så routet dette clock signal tilbae ind på en pin til PIC MCU'en, så jeg kan teste hvornår clock signalet er high/low og der ud fra sørge for at synkronisere data overførslerne. Det virker perfekt. Problemet der kunne opstå var hvis SID'en var ved at hente data fra sine pins, imens PIC'en samtidigt ændrer på de data "midtvejs".

Så nu er det noget med; vent til clock = high, vent igen til clock = low, tænd for SID'ens chip select pin, vent 1 SID clock cycle, og sluk så for chip select igen... kompliceret? ja!

En anden ting jeg har haft gang i er at rode med software til at skabe diagrammer samt PCB layout, og jeg har faktisk lavet PCB layout'et helt færdigt (med mindre jeg finder fejl :lol: ...

Her er et screenshot af det færdige resultat:
SID_SYTH.jpg
SID_SYTH.jpg (212.89 KiB) Vist 13962 gange
Som det kan sses, er SID chippen den største af de 3 chips der bruges... den næststørste er en Pic18F2586... meget fylder den ikke, men den er rigeligt til dette projekt... den lille chip er en 6N138 optocoupler og bruges til at isolere MIDI input signalet sådan at MIDI maskiner er 100% elektrisk isoleret fra hinanden... en optocoupler består af en lysdiose inden i chippen, samt en photo resistor af en art der opfanger signalerne og sender disse signaler videre til Micro SID boardet via dets egen power.

Boardet er ikke ret stort... på størrelse med en pakke cigaretter vil jeg tro... skal snart have bestilet nogle PCB'er så jeg kan se projektet skride fremad...

mere senere... hygge...
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
SIDwave
Forum Donator
Indlæg: 2635
Sted: Denmark

Indlæg af SIDwave »

PAL C64 clock speed ~= 985248 Hz
16-bit CIA 1 timer A default = $4025 (60 Hz)
speed [Hz] = 985248 / 50.125 = $4CC7 (50 Hz)

1x - $4CC7
2x - $2663
3x - $1997
4x - $1331
5x - $0F5A
6x - $0CCB
8x - $0998
10x - $07AC
12x - $0665
16x - $04CB

the CIA timer counts down to zero, so we have to subtract one from every timer value.
The calculation formula is ($4CC8 divided by speed) minus 1^
-

Hvis du med software, kan delay den 1Mhz clock til det nøjagtige tal, 985248 Hz, så vil den opføre sig korrekt. Ellers vil der være en masse ADSR fejl, og SID har i forvejen en ADSR fejl.

Bemærk: C64 opdaterer SID med 50.125 hz, ikke 50 rent!!!!!! dette er årsagen til at HardSID og alt andet moderne hardware der bruger SID, spiller alle sidtunes en anelse for langsomt. De fleste lægger ikke mærke til det, men det gør sådan en som mig som har lavet en masse tunes.. :)

Medlemsavatar
SIDwave
Forum Donator
Indlæg: 2635
Sted: Denmark

Indlæg af SIDwave »

Jeg nævner dette, fordi du ku stabilisere SIDs dårlige ADSR, ved at lave det som hedder hard restart, noget man gør i en player, for netop at ADSR ikke skal lave fejl og slaske rundt med lydene.

Skriver du bare blindt data til SID, så vælter ADSR på 6581 lidt rundt som en fuld man, og misser et par beats her og der. Dette er meget tydeligt i musik af David Whittaker f.ex

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

SIDwave

Jeg kender godt til det med at SID er clock'ed lidt langsommere... har du mere data på at ADSR skulle blive bedre af en lidt langsommere frekvens end 1Mhz?

Datasheet'et siger at 1MHz er den rette speed, og period tabellen er også udregnet efter en 1MHz clock (selv om den er proppet med skrivefejl hehe)... men jeg har regnet hver eneste period ud fra bunden, for at være 100% sikker... 12 rod af 2 og alt det hejs der du ved...

Selve ADSR bug'en har jeg studeret meget før i tiden, og jeg kan bare ikke se at en langsommere frekvens skulle gøre nogen særlig forskel... det virker som om det er et problem med en intern timer der ikke bliver resat ordentligt for at være ærlig.

Det med hard reset kender jeg også til, men problemet er at det ikke er særlig effektivt når det er meningen man skal kunne spille live via et keyboard... på en tracker hvor man ved på forhånd hvornår næste node kommer er det nemt nok at forberede på det hard reset, men da man ikke ved hvornår der kommer en note-on fra MIDI, så kommer man til at skulle lave et latency delay på min.33ms så vidt jeg husker, og 25ms er simpelthen bare ikke godt nok... det er dog efter min viden den eneste løsning, og vil også være en mulighed når jeg får nå'et så langt.

Der er i øvrigt een indstilling af ADSR'en hvor Envelope bug'en slet ikke eksisterer, nemlig med en ADSR på 0,0,15,0... altså hard gate funktion... det gør desvære bare at de tre envelopes er ubrugelige til ret meget andet end en gate af oscillatorerne... meget kan dog laves aligevel er min erfaring da filteret i sig selv virker lidt som en "volume envelope" også.... jeg har også haft success med at bruge de 16 values i volume registret til at designe en meget grov ADSR envelope... selvfølgeligt har alt dette kun relevans når du bruger alle 3 stemmer sammen som en monofonisk synth, men det er også hvad intentionen er.

Hvad angår den lavere clock frekvens, så aner jeg ikke om det er muligt at fintune PWM output'et til at køre lige præcis den hastighed for at være ærlig, og hvis ikke det giver nogen bedring af ADSR envelope'en aligevel, så er det vidst overkill... i øvrigt har jeg eksperimenteret med at clock'e SID'en med både 2 og 3MHz også... altså dem af dem der kan tåle dette hehe.

men igen... hvis du har info omkring omgåelse af den hardware ADSR bug, så skriv endelig! ... det er en fejl jeg meget gerne ville komme udenom, og ind til nu er der kun EEN måde hvormed jeg ved det kan lade sig gøre, nemlig ved at lave en polyfonisk SID synth med f.eks 4 SID chips... det gør nemlig at een SID kan få lov at klinge bedre af, inden den skal trigges igen når man cycler imellem voice'ne.

Fatter stadig ikke at man ikke rettede den fejl dengang man lavede 8580 og 6582 chippene... man rettede det sporadiske filter der altid gav bøvl, og fiksede resonansen (og dræbte egentligt lidt charmen ved den originale SID lyd), men ADSR fejlen lod man åbenbart blive... go figure...
Senest rettet af Razmo lør 23. apr 2011 12:27, rettet i alt 1 gang.
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

åhh... og i øvrigt er grunden til at der ingen connectors er på mit diagram, at disse skal mount'es til den kasse jeg før eller siden finder frem til passer til mit project... derfor er der bare simple jumper pins på printet til at tilslutte via kabler inden i kassen.

Kassen vil ikke indeholde meget... blot Tænd/Sluk knap, Power stik til wallwart, Audio In/Out, MIDI In/Out samt to lysdioder til Power og MIDI aktivitet... that's it... minimal to the core! :dollargrin: ... jeg rører sjældent mine synths aligevel og styrer dem via MIDI, og det simplificerer projektet når man stadig er newbie i elektronikkens verden som jeg er... ja og så blir' det billigere at fremstille, plus at det sparer en helvedes masse code-space i microcontrolleren, da der ikke skal laves interface kode også.

Det er faktisk lidt min mission til fremtidige synths også... altså at de skal være så minimale, samme format osv... har to andre projekter i tankerne pt. nemlig en FM synth over Yamaha's OPL2164 (KORG DS-8, Yamaha FB-01) men også en simpel digital synth via en DAC hvor jeg vil se hvor meget "juice" jeg kan hive ud af en simpel PIC MCU... det er et levn fra min tid på C64 og AMIGA... jeg elsker at arbejde i kode under begrænsninger, hvor "citronen skal presses til det yderste" 8-) :roll:
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

Har lige tjekket... PIC'ens PWM output kan ikke indstilles til den clockspeed du nævner SIDwave... opløsningen er simpelthen ikke stor nok til så "out of the ordinary" clock-speeds... så 1MHz will have to do :roll:

I øvrigt, hvis det ikke handler om andet end playback speed af tunes, så er det ligemeget, da synth'en jo ikke skal afspille SID tunes, men bruges som en synthesizer.... det kunne dog være fedt at lave en player som et selvstændigt projekt man kunne smide i PIC'en og bruge... og så overføre .SID filerne via MIDI... men det vil jo betyde at jeg skulle lave en hel C64 emulator :puke: ... har dog nogen gange haft tanken om at "sample" ændringer til SID'ens registre, og så genafspille ændringerne, men det ville kræve en eller anden form for "optager" der kan fange disse... at lave et timer interrupt der kører den rette hastighed for PAL/NTSC ville ikke være det store problem.
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Medlemsavatar
Razmo
Forum Donator
Indlæg: 4595
Sted: Denmark

Indlæg af Razmo »

SIDwave:

I øvrigt... ved du om der findes noget info omkring realtime udregning af SID'ens pitch period register?

Normalt bruger man jo den der tabel med forudberegnede værdier for at spare udregningstid, men problemet er at det period register er eksponentielt og ikke lineært, og det giver bøvl når man laver lineære sweeps imellem noderne i f.eks. portamento eller finetuning af pitch'en... ville være rart om der var en hurtig assembly metode til at convertere et lineært pitch til exponentielt der passer til SID.

Jeg tænker at lave det sådan at det passer til MIDI standarden f.eks. som har 128 MIDI note værdier på en sådan måde, at jeg bruger 2 bytes til at representere en lineær pitch (nederste 8-bit som finetune, og de nederste 7 bits af den øverste byte til MIDI note værdi'en).

Een måde at gøre det let på er at udregne en tabel der indeholder alle øverste 12 noder af den højeste oktav f.eks. men at udvide den til at have 256 niveau'er imellem hver node i oktaven... og så ellers dividere med 2 for hver oktav under. Dette vil bare kræve en tabel på 12*256*2=6144 bytes, og er ikke specielt MCU venligt, da jeg har 96k program memory at gøre godt med :| ... en hurtig udregning ville være bedre. ja ok... 6144 bytes er måske alligevel ikke så meget... I'll think about that one...
[img]http://razmo.ziphoid.com/ANKH.gif[/img]
R.I.P. Mindeprofil

Nyt svar