Jump to content

rolfdegen

Members
  • Posts

    457
  • Joined

  • Last visited

  • Days Won

    14

Everything posted by rolfdegen

  1. Hallo users.. I sell some Filter Chips on ebay: 2 x CEM 3320 VCF 2 x SSM2044 VCF 1 x SSM2300 8 Chanal Sample and Hold and other things: Audio Card: Soundblaster Zx Video Card: Nvidia Geforce GTX 460 1GB For you, I make a special cost :smile: ebay: VCF Chips Nachtrag am 5. Dezember 2013: Die Chips sind leider schon verkauft. Gruß Rolf
  2. My biggest DIY Synth project: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878

    © Rolf Degen

  3. Fast zwei Jahre Entwicklungszeit, viel Wissen, viel dazu gelernt, einige Fehlentscheidungen und vieles mehr und ich bin immer noch nicht fertig.. puhhhhhhhhhhhhh. Aber es macht immer noch tierischen Spaß :smile: Gruß Rolf
  4. Hallo Thomas_H Ich habe mich bewusst für die etwas aufwendigere Filterschaltung mit OTA's entschieden. Im Vergleich zu den SC-Filtern hat man mit der OTA Filterschaltung mehr Manipulationsmöglichkeiten, eine bessere Signalqualität, einen günstigeren Bauteil Preis, sowie einen einfachen Nachbau. Die SC-Filter haben leider die Eigenschaft, das sie im unteren Frequenzbereich Aliasinggeräusche produzieren. Dies wird durch die Taktfrequenz des Filters verursacht. Sieh bzw höre dir mal das Youtube Video an, dann verstehst du was ich meine. SC-Filter Youtube: Gruß Rolf
  5. Hallo Imp, danke für den Tip. Das mit dem Offset-Wert ist eine gute Idee. Ich hoffe ihr habt Halloween gut überstanden und wurdet nicht von Sumpfmonstern oder schleimigen Scheusalen massakriert In der Zwischenzeit musste ich ein kleines Problem im AVR Synthesizer lösen. Da der Programmcode immer größere und länger wird, musste ich Teile davon aus Geschwindigkeitsgründen in Assembler schreiben. Das betrifft zum Beispiel den Programmcode für die AD-Wandlung in der Scope-Funktion. Diesen hatte ich ursprünglich in eine der vielen Timer Interrupt Routine als C-Code implementiert. Auf der Scope-Page sahen die gesampelten Signale vom Filterausgang allerdings etwas verzerrt aus (Bild 2). Der Grund dafür war, das die Timer Interrupt Routine für die AD-Wandlung durch andere Interrupt Routinen mit höherer Priorität wzB für die Soundausgabe oder Enveloop-Timer ständig unterbrochen wurde. Das hatte zur Folge, dass die AD-Abtastungen nicht mehr kontinuierlich zu einem festen Zeitpunkt statt fand (rot markiert), sondern die Abtastungen in zufälligen Zeitabschnitten erfolgten (grün markiert). Die Abtastungen wurden in einen 151 Byte großen Buffer geschrieben und alle 255 Millisekunden auf den LCD Screen angezeigt. Bild 1: AD-Wandlung Bild 2: Verzerrte Darstellung eines Sinus Signals im AVR-Synthesizer Bild 2: Richtige Darstellung eines Sinus Signals im AVR-Synthesizer Die Lösung Um die Unterbrechungen während der AD-Wandlung zu vermeiden, habe ich kurzum die AD-Wandler Funktion in die Interrupt Routine für die Soundausgabe implementiert. Diese Interrupt Routine hat die höchste Priorität und ist wegen der notwendigen Geschwindigkeit in Assembler geschrieben (siehe Code Beispiel). Am Anfang der ADC Routine wird die Timebase-Einstellung für das Scope berechnet. Danach folgt die Abfrage der Trigger-Einstellung fürs Scope (auto, off, Level) sowie das Schreiber der AD-Werte in den 151 Byte großen Buffer. Die AD-Werte im Buffer werden in einer anderen Timer-Routine alle 255 Millisekunden ausgelesen und auf den LCD-Screen geschrieben. //------------------------------------------------------------------------- // ADC (Scope Funktion) //------------------------------------------------------------------------- Scope_TimeBase: lds r18, timebase_reg ; load scope timebase_register lds r19, timebase_level ; set scope timebase_level clc adc r18,r19 sts timebase_reg, r18 brcc Osc1_Switch temp = 18 temp1 = 19 ; scope trigger function LDS temp, adc_trigger ; test adc_trigger CPI temp, 99 ; if adc_trigger = 99 cancel adc convert BREQ Osc1_Switch ; and jump to osc1 calc CPI temp, 1 ; test adc_trigger BREQ adc_conv ; if adc_trigger = 1 run adc convert lds temp, adc_trigger_level ; test adc_trigger_level cpi temp, 0 ; if adc_trigger_level = 0 run adc convert brne Osc1_Switch ; if not than cancel adc convert adc_conv: ; buffer function LDI ZL, lo8(adc_buffer) ; load buffer start_Adr LDI ZH, hi8(adc_buffer) LDS temp, (adc_wr_pointer) ; set adr_pointer for buffer ADD ZL, temp LDI temp, 0 ADC ZH, temp lds temp,ADCA_CH0RES ; load adc value ldi temp1,255 ; sync phase for screen plot sub temp1,temp ST Z, temp1 ; and store to buffer LDS temp, adc_wr_pointer ; inc buffer_adr inc temp CPI temp, 151 ; if buffer_adr < 151 BRNE adc_loop ; than jump to adc_loop LDI temp, 99 ; set adc_trigger = 99 sts adc_trigger, temp ; ldi temp, 0 ; load 0 for adc_wr_pointer adc_loop: sts adc_wr_pointer, temp ; set buffer adr_wr_pointer lds temp, ADCA_CH0_CTRL ori temp, (1<<ADC_CH_START_bp) ; start new ad converting sts ADCA_CH0_CTRL, temp //------------------------------------------------------------------------- // Osc1 switch //------------------------------------------------------------------------- Osc1_Switch: Gruß Rolf
  6. Hallo zusammen.. Es hat sich wieder was getan in meinem Synthesizer. Die Envelope Pages haben eine Realtime-Anzeiger für den Verlauf der Hüllkurve (ADSR) erhalten. Die Anzeige (kleines schwarzes Fenster) befindet sich oben Rechts und ist mit Env gekennzeichnet. Wird zB eine Noten Taste am Keyboard gedrückt, erscheint der Verlauf der ADSR-Hüllkurve vom AMP Env in Echtzeit in dem kleinen schwarzen Fenster. Bild 1: Hüllkurvenverlauf Bild 2: Modulations Matrix Die Modulations Matrix ist fast fertig. Mit "Source" wird der Modulator zB LFO1 ausgewählt. Mit "Destin." (Destination) das Modulations Ziel zB Osc1. Mit "Depth" wird die Modulationhöhe eingestellt. Um eine bessere Übersicht über die zur Zeit aktiven Modulatoren zu haben, habe ich diese mit einem Stern Symbol gekennzeichnet. Nicht aktive Mudulatoren haben keinen Stern. Die Verknüpfung der Modulatoren mit dem Ziel erfolgt immer additativ. Wenn zB LFO1 und LFO3 auf das gleiche Modulationziel zB Osc1 geschaltet werden, wirkt die Summe beider Modulationssignale auf den Modulationseingang von Osc1. Der Synthesizer besitzt jetzt außer dem AMP Env und Filter Env noch zwei weitere freie Envelope Generatoren (Env3+4). Diese besitzen eine eigene Menü-Page mit den gleichen Parametereinstellungen wie der AMP Env und Filter Env und sind für Modulationszwecke vorgesehen. Gruß Rolf
  7. Noch rechtzeitig zu Halloween ein paar Geistersounds aus meinem AVR Synthesizer. Dank der Modulation Matrix sind ein paar irre Sounds entstanden. Viel Spaß beim anhören. https://soundcloud.com/rolfdegen/halloween-sound Gruß Rolf
  8. PWM and BitCrushing Mode in my DIY Synth "WAVE 1" Now i have in my synth intergrated FM modulation , ring modulation and pulse width modulation ( 0-100 %) for all waveforms. Furthermore, a Bitcrush function has been added (bit – reduction ) . Thus, the bit resolution of the DAC outputs can be set for both oscillators 1- 12bit . A sound example I have uploaded to Soundcload ( see below). Bitcrushing 2Bit Sounddemo from 0:15: https://soundcloud.com/rolfdegen/demosounds-from-my-diy-synth My DIY Synth Project: http://www.cczwei-forum.de/cc2/thread.php?postid=83588#post83588
  9. Hallöchen.. Wie gesagt, die Ressourcen des XMega Prozessors (Xmega128AU) in meinem DIY Synth sind sehr knapp. Man vergisst schnell, das es sich nur um eine 8Bit CPU handelt, die sehr viele 16Bit und 32Bit Berechnungen für die Audioausgabe und Filtersteuerung durchführen muss. Nebenbei muss auch noch das Display, die Encoder, Tasten und die SD-Card bedient werden. In meinem nächsten Synthesizer Projekt werde ich vermutlich auf einen leistungsstärkeren Prozessor umsteigen, so das auch mehrere Stimmen möglich sind. Die ganzen Erfahrungen und Erkenntnisse aus meinem ersten Synthesizer Projekt kann ich dann leichter und schneller in dem neuen Projekt umsetzen. Habe jetzt für beide Oszillatoren eine FM-Modulation, Ring-Modulation und eine Pulsweitenmodulation (0-100%) für alle Wellenformen integriert. Ferner ist ein Bitcrush-Funktion (Bit-Reduzierung) hinzugekommen. Damit kann die Bitauflösung der DAC Ausgänge für beider Oszillatoren von 1-12Bit eingestellt werden. Ein Soundbeispiel habe ich auf Soundcload hochgeladen (siehe unten). PWM-Funktion in meinem Synth Bitcrushing 12Bit Bitcrushing 2Bit Soundbeispiel ab 0:15: Bitcrushing 2Bit Gruß Rolf
  10. Hallo Mein Synthesizer hat 2 Digitale Oszillatoren, 2DAC-Ausgänge, 2 VCA's und 2 VCF's, 3 LFO's, 2 Env's für VCF und VCA. Ferner ist eine Oszilloskopfunktion intergriert. Die zwei Filter können Parallel oder in Serie geschaltet werden. Das bedeutet ein Filter für den Linken Audiokanal (DAC1) und ein Filter für den Rechten Audiokanal (DAC2). Durch die zwei DOC's kann der Synth auch 2stimmig polyphon gespielt werden. Osc1 und Osc2 besitzen eine interne Lautstärke- und Panoramafunktion. Ferner ist es möglich die beiden Filter in Serie zu schalten zB als 24dB Hoch- oder Tiefpass. Dafür wird der Eingang von Filter2 auf den Ausgang von Filter1 geschaltet. Der Ausgang von Filter2 geht dann parallel auf den Eingang von VCA1 und VCA2. Eine Erweiterung auf mehr als zwei Stimmen ist mit dem verwendeten 8Bit Mikrocontroller (ATXmega128AU) kaum durchfürbar, da die noch freien Resoucen für andere Funktionen wzB VCA- und Filteransteuerung, LFO's, ENV's, Displayansteurerung und Encoder Abfrage benötigt werden. Das alles muß quasi zeitgleich erfolgen. Einen externer Audioeingang ist geplant sowie das laden und abspielen von Wellenformen aus einem 1MByte großen SDRAM.
  11. My Project: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878&page=17
  12. Hallo Freunde der elektronischen Musik.. Ich bin mit der Konstruktion des MultiFilter mehr als zufrieden und die ersten selbst programmierten Sounds haben auch schon ihren Platz bzw Soundnr. auf der SD Karte gefunden. Mich interessierte am MultiFilter auch die Frequenzgänge bei verschiedenen Filter-Einstellungen. Am besten testet man das mit einem Rauschgenerator der weißes Rauschen erzeugt und einer FFT Analyse (englisch Fast Fourier Transform). Das Ganze hört sich komplizierter an als es ist. Das Audio Programm Audacity (Freeware) hat alles was man dazu benötigt. Das Weiße Rauschen erzeugt man im Menüpunkt "Erzeugen". Anschließend kann das Weiße Rauschen über die Soundkarte und den Filtereingang wiedergegeben werden und gleichzeitig über den Filterausgang am Audioeingang der Soundkarte wieder aufgenommen werden. Um eine FFT Analyse zu starten, klickt man dann auf den Menüpunkt "Analyse" und startet die Frequenzanalyse. Für den Filtertest hatte ich zuerst meinen Digitalen Rauschgenerator im AVR Synth benutzt. Dieser liefert Aufgrund der niedrigen Samplerate von 40KHz aber kein Weißes Rauschen (Konstante Amplituden im ganzen Frequenzbereich) sonder nur ein farbiges Rauschen (Verringerung der Amplituden mit steigender Frequenz/ siehe Bild 2). Auf die Schnelle habe ich dann einen kleinen Rauschgenerator mit einem Transistor und Operationsverstärker zusammen gelötet um meine Messung durchzuführen (siehe Bild 1). Das Ergebnis seht ihr unten. Bild 1: Analoger Rauschgenerator Bild 2: FFT Analyse Digitaler Rauschgenerator im AVR Syntheziser Bilder: FFT Analyse verschiedener Filtereinstellungen im AVR-Synthesizer Gruß Rolf
  13. Hallo ich schon wieder Habe Gestern Abend die Routinen für das Abspeichern von neuen Sounds fertig gestellt. Heute konnte ich dann einige Demosound für den neuen MultiFilter in meinem AVR Synthesizer programmieren. Demo Sound MultiFilter Hier noch ein Youtube Video von Dr Dieter Doepfer auf der Namm Show 2013. Dr. Doepfer verkauft neue Module u.a. den A132-1 zweifacher linear VCA with high-end VCA-Baustein (SSM2164) oder den A-171-2 Voltage Controlled Slew Processor/Generator. Das ist ein Multifunktionsmodul zum Erzeugen und Bearbeiten von Steuerspannungen und Audiosignalen nach Art eines Funktionsgenerators. LFO, Hüllkurvengenerator, Slew Limiter... die Möglichkeiten sind vielfältig. Dr Dieter Doepfer auf der Namm Show 2013 Gruß Rolf
  14. rolfdegen

    FilterMatrix 12

    FilterMatrix for my DIY Synth "WAVE 1" Project: http://www.cczwei-forum.de/cc2/thread.php?postid=83319#post83319
  15. rolfdegen

    TransFilter 12

    TransFilter for my DIY Synth "WAVE 1" Project: http://www.cczwei-forum.de/cc2/thread.php?postid=83319#post83319
  16. Hallo Ihr Lieben.. Der Sommer neigt sich so langsam dem Ende entgegen und hier in Wuppertal ist es gerade mal 15 Grad warm. Ich vermisse den Sommer, obwohl ich nicht in Urlaub fahren konnte. Aber das Ganze hat auch seine positiven Seiten und so bastel ich mal wieder fleißig an meinem Synth herum. Der Stereo Filter ist jetzt fertig und zusammen mit der umschaltbaren Filter Matrix ist daraus ein interessantes Klangstellwerk geworden. Jeder Filter verfügt über separate Einstellung für: Cutoff, Resonanz, Filter FM und VCA. Folgende Filterkombinationen sind einstellbar: 2pol LP (stereo) 2pol HP (stereo) 2pol BP (stereo) 4pol LP (mono) 4pol HP (mono) 2pol LP + 2pol HP (mono) 2pol LP + 2pol BP (mono) 2pol HP + 2pol BP (mono) Bild 1: TransFilter Channel 1 Bild 2: FilterMatrix In kürze stell ich für euch auf Youtube ein paar Demo Sounds zur Verfügung. Bis dahin lieben Gruß. Rolf
  17. My Project Site: http://www.cczwei-forum.de/cc2/thread.php?postid=83245#post83245
  18. Hallöchen.. Hier meine Filter Demo mit zwei Kanälen Was noch fehlt ist die Auswahl von verschiedenen Filterkombinationen zB. LP+LP zu einem 4pol LP Filter mit 24dB pro Oktave (mono) oder HP+HP, LP+HP oder BP+BP.
  19. Hallöchen.. Habe mit großartiger Unterstützung von Andre (tubeohm.com) nun einen neuen Audio-Filter für meinen Synth gebaut. Dieser ist noch nicht ganz fertig. Der zweite Kanal fehlt leider noch. Im Vergleich zum alten Filter mit den SSM2044 IC klingt der neue Filter im Bass- und Hochtonbereich sehr ausgewogen. Auf Youtube gibts eine neue Filter Demo. Zur Zeit noch einkanalig. An dem 2.Kanal wird noch gearbeitet. Der Multi Filter bestehend aus LP/BP/HP/FM besitzt eine Flankensteilheit von 12dB. Die Sounds kommen direkt vom AVR Synthi. Es werden keine Effektgeräte benutzt. Youtube Filter Demo Viel Spaß beim anhören. Lieben Gruß Rolf
  20. Das warten auf die Bauteile habe ich genutzt und ein wenig mit den Soundparametern in meinem Synth herumgespielt. Herausgekommen sind zB. ein toller Orgel-Sound wie ich finde und einiges mehr.. https://soundcloud.com/rolfdegen/organ-and-more-from-my-diy Viel Spass beim anhören und schönen Gruß. Rolf Eine Frage an die Admins: Warum geht die Soundcload Funktion nicht mehr ?
  21. Hallöchen.. Kleine Änderung im Plan. Der Andre von TubeOhm.com hat mir netterweise einen Filterentwurf zur Verfügung gestellt. Bauteile habe ich bei Reichelt schon bestellt und sollten Anfang der Woche bei mir sein. Freu mich schon aufs zusammenlöten und ausprobieren. Bis dahin wünsche ich euch ein schönes Wochenende. Gruß Rolf
  22. Ja das ist das gleiche Filter-Konzept wie im Shruth Synthesizer. Ich will jetzt erst einmal einen SMR4 Filter aus dem Ambika-Synth von Oliver zusammenlöten und damit ein wenig experimentieren. Es handelt sich hierbei um einen 4pol LowPass Filter. Die Schaltung will ich später etwas abändern, so das eventuell auch Low- und Bandpass Funktionen möglich werden. Zusätzlich soll es eine Frequenzmodulation der Filter-Cutoff geben. Dafür wird der Oszillatorausgang mit dem Steuereingang für die Filter-Cutoff verbunden. Bild: SMR4 Filter im Ambika Synthesizer von Oliver Gillert
  23. Hallöchen.. Nach einer kleineren Lötaktion auf meinem Synthesizer Mainboard sitzen die beiden SSM2044 Filter IC jetzt in Fassungen. Das Vertauschen beider Filter Chips gegeneinander hat meine Vermutung bestätigt, das ein Filter Chip defekt ist, weil das störende Plop-Geräusch jetzt auf dem anderen Audiokanal zu hören war. Da ich sowieso vorhabe die beiden Filterschaltung durch eine andere zu ersetzen, stellt das kein größeres Problem für mich dar. Einen neuen Filter Chip werde ich mir nicht mehr kaufen. Bild: Filter IC's SSM2044 in Fassungen In Bezug auf eine neue Filterschaltung für meinen Synthesizer hatte ich Heute ein sehr interessantes und langes Telefonat mit Andre Laska geführt. Andre (übrigens ein sehr netter Mensch ) habe ich im mutable intruments forum kennengelernt. Er hat denLadder-Filter für den Shruthi- und Ambika-Synthesizer von Oliver Gillert entwickelt. Gleichzeitig ist er der Betreiber der Website tubeohm.com und beschäftigt sich u.a. mit der Entwicklung von VSTI-Synthesizern. Wir haben sehr lange über viele Dinge in der analogen Filtertechnik geredet. In den nächsten Tage werde ich versuchen, einige Vorschläge von Andre für eine neue Filterschaltung in meinem Synthesizer umzusetzen. Bis dahin lieben Gruß und noch schöne Sommertage Rolf
  24. Hallöchen.. Höre gerade chillige Musik und hab gute Laune. Falls es jemanden interessiert "1.FM Chillout Lounge Radio" und "Antenne Bayer Chillout" sind so meine Favoriten Ich höre die Sender gern beim programmieren. Dann bekommt man noch mehr Ansporn und Lust wenn man geile Synth-Klänge hört. In Win8 gibts dafür ne tolle App namens "Audials Radio". Auf Youtube habe ich noch ein hoch interessantes Video über den "ROCKET" Synthesizer von der Firma Waldorf gefunden. Dort diskutieren Musiker und Techniker über den kleinen ROCKET. Man erfährt so einiges über den kleinen Winzling zB was an Technik in ihm steckt und was er so alles kann. Bild: Der kleine "ROCKET" Um die Wartezeit auf das SRAM aus China zu überbrücken, programmiere ich momentan die VCA-Page in meinem AVR-Synthesizer. Oszillator1+2 und der Noise-Generator bekommen endlich Lautstärke- und Panorama-Funktionen. Ein Teil dieser Funktionen ist in C geschrieben und ein anderer in Assembler. Ist leider noch nicht ganz fertig, aber ich mach gleich mal ein Foto um zu zeigen, wies hinterher auf dem Display aussehen wird. Die VCA-Page in meinem Synth ist jetzt fertig (siehe Bilder). Mit der Taste "Function" kann man auf der VCA-Page zwischen den Einstellungen für die Lautstärke und Balance umschalten. Die rechteckigen Symbole für Osc und Noise werden entsprechend der Balance-Einstellung wie bei einem analogen Fader nach oben oder unten verschoben. VCA Page mit Osc- und Noise-Volume VCA Page mit Osc- und Noise-Balance Softwaretechnisch ware es nicht ganz leicht (zumindes für mich ) die Volume- und Balance-Funktionen für Oszillator und Rauschgenerator umzusetzen. Ein Teil der Funktionen (Berechnung Lautstärkeverhältnis Linker und Rechter Audiokanal) wurde in der Menüsteuerung, die komplett in C geschrieben ist, umgesetzt (siehe C-Code). Ein anderer Teil dieser Funktion wurde in die Assembler Routinen für die Soundausgabe integriert (siehe unten). Abfrage der Encoder für Volume and Balance in der Menüsteuerung // osc1 level if (enc2_status == 1) // 1= encoder value change / 0= not change { int8_t balance_temp; balance_temp = osc1_balance *2; osc1_value = enc2_value; lcd_moveto_xy(23,12);print_8bit_numbers2(osc1_value,0); // print osc1 level if (balance_temp == 0) { osc1_value1 = osc1_value; osc1_value2 = osc1_value1; } if (balance_temp > 0) { osc1_value2 = 127*osc1_value/127; osc1_value1 = ((127 - balance_temp) *osc1_value/127); } if (balance_temp < 0) { uint8_t temp_balance1; temp_balance1 = balance_temp* -1; // make unsigned osc1_value2 = ((127 - temp_balance1 + 1) *osc1_value/127); osc1_value1 = 127*osc1_value/127; } } // change osc1 balance if (enc2_status == 1) // 1= encoder value change / 0= not change { if (enc2_value >= 64) { osc1_balance = enc2_value -64; } else { osc1_balance = 64- enc2_value; osc1_balance = osc1_balance* -1; } int8_t balance_temp; balance_temp = osc1_balance * 2; uint8_t sym_pos; if (balance_temp == 0) { osc1_value1 = osc1_value; osc1_value2 = osc1_value; } if (balance_temp > 0) { osc1_value2 = (127*(osc1_value)/127); osc1_value1 = ((127 - balance_temp) *(osc1_value)/127); } if (balance_temp < 0) { uint8_t temp_balance1; temp_balance1 = balance_temp* -1; osc1_value2 = ((127 - temp_balance1 + 1) *(osc1_value)/127); osc1_value1 = (127*(osc1_value)/127); } } Assembler-Routine für Volume und Balance //----------------------------------------------------------------------- // save osc1+2 values // osc1_temp = 20 osc2_temp = 21 mov osc1_temp, chanalA_0 mov osc2_temp, chanalB_0 //----------------------------------------------------------------------- // osc1 level // LDS R18, osc1_value1 MUL R18, osc1_temp ; mul R18*temp_osc1 result in R0+R1 MOVW R18, R0 ; result in r0/r1 mov to r18/r19 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // set osc1 value to chanal_A mov chanalA_0,R18 mov chanalA_1,R19 //----------------------------------------------------------------------- // osc1 balance // LDS R18, osc1_value2 MUL R18, osc1_temp MOVW R18, R0 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // set osc1 balance value to chanal_B mov chanalB_0,R18 mov chanalB_1,R19 //----------------------------------------------------------------------- // osc2 level // LDS R18, osc2_value1 MUL R18, osc2_temp ; mul R18+R19 result in R0+R1 MOVW R18, R0 ; move result to r18+r19 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // set osc2 value to chanal_A ADD chanalA_0,R18 ADC chanalA_1,R19 //----------------------------------------------------------------------- // osc2 balance // LDS R18, osc2_value2 MUL R18, osc2_temp MOVW R18, R0 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // set oc2 balance to chanal_B ADD chanalB_0,R18 ADC chanalB_1,R19 //=============================================================== // noise generator //=============================================================== noise_gen: LDS PhaseA0, noise+0 ; load noise register LDS PhaseA1, noise+1 ; LDS PhaseA2, noise+2 ; BST PhaseA0, 4 ; Bit 4 (0:4) laden BLD R30, 0 ; BST PhaseA2, 7 ; Bit 23 (2:7) laden BLD R31, 0 ; EOR R30, R31 ; XOR der beiden Bits ROR R30 ; in Carry shiften ROL PhaseA0 ; Buffer links schieben mit Carry ROL PhaseA1 ; ROL PhaseA2 ; STS noise+0, PhaseA0 ; save noise register STS noise+1, PhaseA1 ; STS noise+2, PhaseA2 ; // set noise level left and balance temp_noise = 20 ; temp-register R20 MOV temp_noise, PhaseA1 ; save noise to R20 LDS R18, noise_value1 MUL R18, temp_noise ; mul R18+R19 result in R0+R1 MOVW R18, R0 ; move result to r18+r19 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // add noise chanal_A ADD chanalA_0,R18 ADC chanalA_1,R19 // set noise lefel right and balance LDS R18, noise_value2 MOV R19, temp_noise ; load noise MUL R18, R19 MOVW R18, R0 // div 127 ANDI R18, 0xF0 ; clr Low-Nibble from R18 SWAP R18 ; SWAP High-Nibble to Low-Nibble LSR R18 ; 3x shift right LSR R18 LSR R18 LSL R19 ; R19 1x shift left ADD R18, R19 ; ADD R18+R19 // add noise chanal_B ADD chanalB_0,R18 ADC chanalB_1,R19 //----------------------------------------------------------------------- // Chanal Output chan_out: // convert Chanal_A to 12Bit LSL chanalA_0 ROL chanalA_1 LSL chanalA_0 ROL chanalA_1 LSL chanalA_0 ROL chanalA_1 // convert Chanal_B to 12Bit LSL chanalB_0 ROL chanalB_1 LSL chanalB_0 ROL chanalB_1 LSL chanalB_0 ROL chanalB_1 // send chanal_A value to DACA STS 0x0318, chanalA_0 ; 2 L-Byte to DAC-Register DACAL STS 0x0319, chanalA_1 ; 2 H-Byte to DAC Register DACAH // send chanal_B value to DACB STS 0x0338, chanalB_0 ; 2 L-Byte to DAC-Register DACBL STS 0x0339, chanalB_1 ; 2 H-Byte to DAC Register DAcBH Für Verbesserungsvorschläge bin ich sehr empfänglich Besonders in der Assembler-Routine. Vielleicht kann man die in Bezug auf Geschwindigkeit noch etwas optimieren. Lieben Gruß Rolf Hallo zusammen.. Ich habe gerade festgestellt, das einer meiner beiden Filter IC's SS2044 in meinem Synthesizer nicht richtig funktioniert. Am Filter-Ausgang ist ein kleiner Gleichspannungsoffset vorhanden. Dieser ändert sich mit der Höhe der Cutoff-Steuerspannung am CV-Eingang (Pin 13) des Filter-IC's (siehe Bild1+2). Ein Entkopplungskondensator am Audioeingang und Audioausgang des Filters (Pin 1+3) hat nicht geholfen. Auch der Offsetabgleich mit einem Trimmer (P2) am Filter IC Pin 15 hatte keinen Erfolg. Da der nachgeschaltete VCA das Filtersignal zusätzlich verstärkt, treten bei der Ansteuertung des Filters über den Filter-Enveloop hörbare Plop-Geräusche auf. Das macht sich besonders bei schnellen Enveloop-Kurven bemerkbar. Der zweite Filter-Kanal ist identisch aufgebaut und hat keinen Gleichspannungsoffset am Ausgang. Vermutlich ist das erste Filter-IC defekt, da ich alle Bauteile und die Verdrahtung am Filter-IC mehrfach überprüft habe und keinen Fehler feststellen konnte. Bild 1: Filter-Kanal A mit Gleichspannungsoffset am Ausgang (Pin 3) Bild 2: Filter-Kanal B ohne Gleichspannungsoffset Bild 3: Schaltung eines Filter-Kanals im AVR-Synthesizer Der verwendete Filterbaustein SSM2044 wird leider nicht mehr hergestellt und ist nur noch über ebay ab einen Preis von 12 Euro zu bekommen . Aus diesem Grund überlege ich, ob es für die Zukunft und für einen Nachbau nicht besser wäre, die Filterschaltung, bestehend aus zwei Kanälen, mit anderen Bauteilen komplett neu zu gestalte. Ein sehr interessantes Filter-Konzept zum Nachbau hat die deutsche Firma tubeohm.com auf ihrer Website vorgestellt. Der sogenannte "Ladder Filter" ist zwar für den Shruthi- und Ambika-Synthesizer von Mutable Instrument entwickelt worden, aber vielleicht mit ein paar Änderungen in der Schaltung auch für meinen Synthesizer nutzbar. Auf der Website von Mutable Instruments gibt es auch noch andere Filter-Schaltungen die nicht weniger interessant sind. Dort findet man auch Klangbeispiele von den verschiedenen Filterschaltungen. Youtube: "Ladder Filter" Im Moment weis ich noch nicht so recht was ich machen soll. Aber fürs Erste werde ich den bequemen Weg gehen und mir einen neuen SSM2044 über ebay kaufen
  25. Hallo Für den Xmega-Prozessor in meinem Synthesizer plane ich noch eine Speichererweiterung von 512KByte SRAM. Das SRAM gibt es als Breakout Board auf eBay schon ab 7,99 US $. Dann hätte ich die Möglichkeit, beim Systemstart die Soundparameter und großen Wellenform Dateien von der SDCard in das SRAM zu laden. Angebunden wird das SRAM an den EBI-Bus (Port H-K) des Xmegas. Dadurch kann ich wesentlich schneller auf Wellenform Daten und Soundparameter zugreifen als über die SDCard. Die SDCARD dient dann lediglich als externer Datenspeicher. Bild 1: IS62WV51216BLL SRAM Board Ich habe gerade festgestellt, das auf dem bestellten SRAM-Board ein 16Bit SRAM sitzt und nicht wie gedacht ein 8Bit Typ. Das freut mich doch sehr, da es insgesamt 1MByte Speicherplatz sind. Wow.. Die Adressierung mit dem Xmega ist allerdings etwas tricki. Um das SRAM zu adressieren sind zwei Stück 8-BIT D-LATCH Typ 74HC573 für die Bereitstellung der höheren Adressleitungen von A8-A18 notwendig. Zusätzlich ist für die vollen 16Bit Nutzung des SRAMs eine freie Adressleitungen (zB A19) notwendig, die auf den "LB" Anschluss (LowerByte) und über einen Inverter an "UB" Anschluss SRAM zu legen ist. Bild 2: SRAM IS62WV51216BLL-55TLI Bild 3: Xmega EBI-Interface Freu mich schon aufs Ram. Wird wohl etwas dauern.. weil kommt aus China. Mit dem großen SRAM kann ich endlich alle Wafe-Dateien laden und durch den Synth jagen Gruß Rolf
×
×
  • Create New...