Jump to content

AVR-Synthesizer "WAVE 1"


rolfdegen
 Share

Recommended Posts

Hallöchen..

Es tut mir leid wenn ich zur Zeit wenig schreibe. Aber wir stecken mitten in der Vorbereitung für die
Superbooth Messe in Berlin. Andre hat für unseren
Prototyp auf die Schnelle ein Gehäuse aus Plexiglas und Holzseitenteile gebaut. Es ist noch nicht
ganz fertig, aber sieht doch schon gut aus wie ich finde.

Das Gehäuse
P1060137.JPG
Großes Bild

P1060136.JPG
Großes Bild

Die Superbooth 17 findet vom 20 - 22.April in Berlin im FEZ (Kinder-, Jugend- und Familienzentrum)
statt. Insgesammt 167 Aussteller sollen dort sein geschockt Hab mal gekuckt wer da noch so da ist zB die
Firma Kurzweil, Yamaha, Steinberg, Nativ Instruments, Roland, Moog Music, Ableton, Doepfer uvm
Wer uns besuchen möchte findet uns am Stand 0503 von Sonic Potions im 2.OG (siehe Bild).

Superbooth 17
Superbooth.JPG
Großes Bild

Gruß Rolf 

Link to comment
Share on other sites

Link to comment
Share on other sites

Hallo Rolf,

das neue UI Design des Sequencer-Arppeggiator ist dir wirklich sehr gut gelungen.
Sehr viel übersichtlicher als die vorige Version.

Eine Kleinigkeit die ich evtl noch ändern würde, ist die Bezeichnung des Notenwerts H.
Die Bezeichnungen aller anderen Parameter des User Interface sind in englischer Sprache, daher würde ich an deiner Stelle auch bei der Bezeichnung der Notenwerte auf den englischen/internationalen Standard zurückgreifen.
Hier würde ich an deiner Stelle aus dem H ein B machen.
Das gleiche gilt dann auch für den "deutschen" Notenwert B, der internatonal als Bb geschrieben wird.

 

Beste Grüße
Thomasch

Edited by Thomasch
Link to comment
Share on other sites

  • 11 months later...

Danke. Wir sind jetzt in der Endphase. Zur Zeit wird ein neues Panelboard mit einem besseren TFT-Display entwickelt und ein Gehäuse gebaut. Das Neue TFT Display ist kontrasstärker und hat eine gleichmäßig beleuchtete Hintergrundfläche.

Altes TFT Display im DE-GENERATOR
Picture%2B6.jpg

Neues TFT Display im DE-GENERATOR
Picture%2B5.jpg

Gruß Rolf 
 

Link to comment
Share on other sites

Hallo liebe Mitleser..
Mein guter Freund Thomas Margolf aus Holland hat mir heute einen Bootloader für den DE-GENERATOR
geschickt. Damit ist es jetzt möglich, die Firmware für den DE-GENERATOR über die SD Karte zu
flashen. Allerdings gibts noch Probleme mit älteren 4GB Karten von SandDisk. Mal schaun woran es
noch liegt.. Hab mal ein kleines Video gedreht ums zu zeigen. Auf der SD Karte befindet sich die Firmware.
Für's flashen muss beim Einschalten die "LOAD" Taste gedrückt und gehalten werden. Ist das Firmware
File vorhanden und ok, dann fangen die Led's an zu blinken. War der Flashvorgang erfolgreich blinkt kurz
die 1.LFO LED. Sollte ein Fehler aufgetreten sein, wird das mit dem Aufleuchten der 3.LFO Led signalisiert.
Eine Textausgabe über das TFT-Display passte leider nicht mehr in den 8 KByte großen Bootsektor.

Youtube: https://youtu.be/X90Xk2eUY2o

Gruß Rolf 
 

Hallöchen..
Hab mal wieder etwas Geld von der Bank abgehoben und in meinen Arbeitsplatz investiert. Ein schöner großer 32" Monitor von BENQ (BENQ PD3200Q) mit 2560 x 1440 Pixel Auflösung und Höhenverstellung war auf der Wunschliste. Was mir bei der Auswahl eines Monitors besonders wichtig war, ist ein Augenschonendes Arbeiten. Der BENQ PD3200Q hat für diesen Zweck einige Technologien integriert. Die Flicker-free Technik verhindert das Flimmern des Displays. Das ermöglicht stundenlanges Arbeiten ohne müde oder brennende Augen. Zusätzlich hat der Monotor eine Low-Blue-Light Funktion. Diese Technologie filtert schädliches blaues Licht heraus um die Irritationen der Augen zu verringern. 

BENQ PD3200Q
20171029_194430.jpg

Link: http://www.benq.de/product/monitor/pd3200q/

Gruß Rolf 

 

Hallo..
Hier zur Abwechslung mal was lustiges. Hier macht kein Oszillator die Töne sondern eine Reihe von alten FloppyDisk Laufwerken, Festplatten und Scannern. Echt ideenreich wie ich finde ebueb 

The Floppotron in concert: Sweet Dreams
Flopy.JPG
Youtube: https://www.youtube.com/watch?v=oGfkPCZYfFw

Gruß Rolf 

 

Einen kleiner Ausschnitt an Dingen, die ich in den vergangenen Wochen am DE-GENERATOR programmiert habe:

Build 3.37 05.08.2017
- Externen Midi-Clock implementiert

Build 3.38 30.08.2017
- Sequencer Funktion integriert

Build 3.39 09.09.2017
- Osc Mode im Osc-Mneü jetzt über Enc3 einstellbar
- Fehler bei der Berrechnung und Anzeige für freies Sample Ram beseitigt
- Share Mode (SHA) für Osc2 implementiert. Ist die Funktion im Osc2 Mneü eingeschaltet, dann teilt sich Osc2 den gleichen Sample mit Osc1. Interessant für Phasing oder andere Effekte
- CPU Last wird nur auf der System Page angezeigt
- Scope Funktion ist zwecks CPU Entlastung jetzt abschaltbar
- Interpolations Routine in den Oszillatoren wurde optimiert (schneller)

Build 3.40 24.09.2017
- Osc Wave- und Sample Mode optimiert
- CPU Last Anzeige entfernt
- Temperaturanzeige entfernt
- Scope Page entfernt

Build 3.41 29.09.2017
- Beim Laden eines neuen Patchs wird der Transpose Wert für die Noten im Sequencer jetzt auf null gesetzt. 
- Die Sample Recording Function ist bei Auswahl von Page 12 jetzt immer ei...aden eines neuen Patch wurde die Wellenform im CPU Ram nicht aktuallisiert.
- Einige Fehler beseitigt 

Build 3.42 03.10.2017
- Sequencerstart jetzt über die Funktion "PLAY" einstellbar. Im "KEY" Mode startet und stopt der Sequencer mit der "SEQ" Taste am DE-GENERATOR. Im "Note" Mode startet der Sequencer mit einer Keyboard Taste und stopt beim loslassen.

Build 3.50 22.10.2017
- Bootloader integriert

Build 3.52 31.10.2012
Sampel-Page: 
- Rec-Led Status auf der Sample-Page integriert. 25% Led-Licht: Aufnahme wartet auf Threshold Level oder Midi_Note Event. 100% Led-Licht bei aktivierter Aufnahme
- Im Sample Rec-Mode "Note" ist der Aufnahmestart oder Ende über Midi-Note möglich.

Sequencer Page:
- Im Sequencer PLay_Mode "NOTE" startet und stop der Sequencer über eine Midi_Not
- Transponieren funktioniert jetzt in allen beiden Sequencer Play_Modes
- Bei der Auswahl eines Steps werden jetzt alle Step-Paramter aktualisiert
- Die Step-Auswahl ist jetzt über Encoder 3 möglich



Sequencer Pages
20171101_160444.jpg

20171101_160420.jpg
Der Rote Punkt markiert den laufenden Step. H den Haltewert für die Note. Der dunkelgraue
Balken die Lautstärke der Note

Gruß Rolf 

 

Hallöchen..
Wärend ich auf meine Lieblings-Pizza warte (ist von Dr.Otker und brauch im Backofen immer 10min) schreib ich mal schnell diesen Beitrag ebueb 

Eigentlich ist es nur ein Hinweis auf mein neues Youtube Video. Hab mal neue Sounds und Sequencen aufgenommen. Sind einige verrückte Sachen dabei. Wünsch euch viel Spaß beim anhören.

Long Expression
Degenerator_04.jpg

Youtube: https://youtu.be/P-mxpUMQ2e8

Gruß Rolf 

 

Ach.. hätt ich doch mehr Geld. Dann würde ich mir diesen Synthesizer kaufen.


Modal Electronics 001
Modal001.JPG

Der Modal 001 ist ein 2 stimmiger, bi-timbraler Synthesizer mit analoger / digitaler “Hybrid” Klang-Architektur. Pro Stimme gibt es 2 Oszillatoren und 2 Sub-Oszillatoren, mischbar im Mixer mit (Over)Drive Funktion. Wie im DE-GENERATOR sind die Oszillatoren NCOs (Numerically Controlled Oscillators) mit hoher Auflösung und hoher Stabilität. Der zur Auswahl stehende Wellenform-Satz pro Oszillator umfasst 56 Wellenformen ( im DE-GENERATOR sind es 128 + 20 Shapes ), die natürlich per Steuerspannung zu durchlaufen sind. Das VCF ist ein 24dB/Okt 4-Pol Transistor Filter mit Morphing-Möglichkeit (“Slope Control”) hin zur BandPass- und 1dB/Okt Filter Charakteristik. Zwei LFOs, mit MIDI-Sync-Möglichkeit. Zwei ADSR Hüllkurven für VCF und VCA. Eine Modulations-Matrix mit 6 simultane Modulationsquellen und 8 bzw. 9 Modulationsziele. Step-Sequenzer: 32 Steps mit 12 Spuren bzw. Paramater-Modulationen gleichzeitig. MIDI-Synchronisation sowie Live-Transponierung über das Keyboard möglich. Programmspeicher mit Platz für 100 x 100 Sounds. 3-Oktaven FATAR Tastatur mit Velocity und Aftertouch. Ein farbiges 4,3-Zoll TFT Display für die Programmierung. 4 CV Inputs und 4 CV Outputs und zwei Audio-Eingänge u.v.m. Preis um die 1850,- €. Wow..

Link: http://www.modalelectronics.com/modal-001/


Modal Electronics Waveforms
Modal001-18.jpg

Klangbeispiele: https://www.youtube.com/watch?v=EQjL8VeugA0

Gruß Rolf 

 

Mein Weihnachtsgeschenk an mich:


Korg Monologue silver
Korgmono1.JPG
Korgmono2.JPG

Somit besteht zukünftig meine Synthesizer Sammlung aus einem Shruthi, einem DE-GENERATOR und einem Korg Monologue.

Hier noch ein paar Soundtracks vom DE-GENERATOR. Künstler an den Drehknöpfen war Andre von TubeOhm Augenzwinkern 

ZU den Soundtracks: https://soundcloud.com/rolf-degen/de-generator-13

Gruß Rolf 
 

Mein Weihnachtsgeschenk ist Gestern angekommen. Der KORG MONOLOGUE in silber. Hab ihn direkt ausprobiert. Hier mein Ergebnis:

DE-GENERATOR & KORG MONOLOGUE IN CONCERT
MonoDegen.jpg

Youtube: https://youtu.be/xYaBt2WhCow

Gruß Rolf 

 

KORG MONOLOGUE inside

Hab mal meinen KORG MONOLOGUE aufgeschraubt um zu schaun, was unter der Haube steckt smile 
Insgesammt arbeiten drei ARM MCU's auf den Platinen. Eine ist für die Keyboardabfrage zuständig.
Die Zweite MCU für die beiden Oszillatoren und Filterparameter und diverse andere Sachen.
Die Dritte MCU sitzt auf dem Panelboard und ist für die Abfrage der Potis und Schalter zuständig,
sowie für die Ansteuerung des kleinen TFT Displays.

PS: Wenn ich mir das überlege, dann ist es schon eine Wunder, was die ATMEL MCU mit ihren 32MHz im DEGENERATOR alles leistet ebueb 

Mainboard
20171224_092040.jpg
20171224_091820.jpg
Link: https://scontent-frt3-1.xx.fbcdn.net/v/t...455&oe=5ACA211D

Panelboard
20171224_091908.jpg

Link: https://scontent-frt3-1.xx.fbcdn.net/v/t...f60&oe=5ABEEE6A

Gruß Rolf 

 

KORG MONOLOGUE

Aufbau
MonoBlock.JPG
Großes Bild: https://scontent-frt3-1.xx.fbcdn.net/v/t...7cd&oe=5AC7D7BF

Bedienung
MonoPanel.JPG
Großes Bild: https://scontent-frt3-1.xx.fbcdn.net/v/t...637&oe=5AF87191

Rückseite
MonoBack.JPG
Großes Bild: https://scontent-frt3-1.xx.fbcdn.net/v/t...301&oe=5AF94698 
 

 

Hallo zusammen..

Hab ein wenig an der Soundengine im DE-GENERATOR gewerkelt und einen VOWEL Sound implementiert.

VOWEL Sound parameter auf der Oszillator Page
20171228_104845.jpg

Sound: https://soundcloud.com/rolf-degen/vowel-...om-de-generator


Ich habe den Shruthi code für die Soundengine im DE-GENERATOR etwas angepasst

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
//*************************************************************************
// OscRender: VOWEL
//*************************************************************************
void OscRender_Vowel(uint8_t osc_nr)
{
    uint8_t block_size 40;
    uint8_t parameter;
    uint8_t *buffer;
    uint8_t ix 0;
    
    if (osc_nr == 0)
    {
        parameter Osc.prm[0];
        if (Voice.buffer_nr == 0)
        {
            buffer Voice.Buffer2a;
        }
        else {buffer Voice.Buffer1a;}
    }
    else
    {
        parameter Osc.prm[1];
        if (Voice.buffer_nr == 0)
        {
            buffer Voice.Buffer2b;
        }
        else {buffer Voice.Buffer1b;}
    }
    
    Osc.vw_update = (Osc.vw_update 1) & 3;
    if (!Osc.vw_update) {
        uint8_t offset_1 U8ShiftRight4(parameter);
        offset_1 U8U8Mul(offset_17);
        uint8_t offset_2 offset_1 7;
        uint8_t balance parameter 15;
    
    // Interpolate formant frequencies.
    for (uint8_t i 03; ++i) {
        Osc.vw_formant_increment[i] = U8U4MixU12(
        pgm_read_byte (&(wav_res_vowel_data[offset_1 i])),
        pgm_read_byte (&(wav_res_vowel_data[offset_2 i])),balance);
        Osc.vw_formant_increment[i] <<= 3;
    }
    
    // Interpolate formant amplitudes.
    for (uint8_t i 04; ++i) {
        uint8_t amplitude_a pgm_read_byte (&(wav_res_vowel_data[offset_1 i]));
        uint8_t amplitude_b pgm_read_byte (&(wav_res_vowel_data[offset_2 i]));
        Osc.vw_formant_amplitude[i] = U8U4MixU8(amplitude_a,amplitude_bbalance);
    }
    }    
  
    // sample loop --------------------------------------------------------
    do
    {
        Osc.phase[osc_nr] += Osc.phase_increment[osc_nr];
        
        uint16_t phase_integral Osc.phase[osc_nr] >> 8;
        uint16_t phase_increment_integral Osc.phase_increment[osc_nr] >> 8;
        int8_t result 0;
        
        for (uint8_t i 03; ++i) {
            Osc.vw_formant_phase[i] += Osc.vw_formant_increment[i];
            result += pgm_read_byte (&((== wav_res_formant_square wav_res_formant_sine)
            [(((Osc.vw_formant_phase[i] >> 8) & 0xf0) | Osc.vw_formant_amplitude[i])]));
        }
        result S8U8MulShift8(result, ~ (phase_integral >> 8));
        phase_integral += phase_increment_integral;
        int16_t phase_noise = (int8_t)(Noise.data_rng_state << 8) * 1;// (int8_t)Osc.noise_modulation;
        if (phase_integral phase_noise phase_increment_integral) {
            Osc.vw_formant_phase[0] = 0;
            Osc.vw_formant_phase[1] = 0;
            Osc.vw_formant_phase[2] = 0;
        }
        uint8_t x S16ClipS8(result) + 128;
        
        // write sample in sound-buffer
        buffer[ix++] = x;
        buffer[ix++] = x;
        block_size--;        
        
    } while (--block_size);

}



Gruß Rolf 

 

Mutable Shruthi & KORG Monologue & DE-GENERATOR in concert

Soundcloud.JPG
Link: https://soundcloud.com/rolf-degen/shruth...ogue-in-concert

Viel Spaß beim anhören. Gruß Rolf 

 

DE-GENERATOR Build 3.61
- Scope Darstellung: Auflösung wurde von 150 auf 64 Pixel reduziert. Dadurch wird die Systemlast verringert. Zeitbasis passt sich jetzt automatisch an Audiofrequenz an. 
- Fehler in Ringmodulation auf der Oszillator Page beseitigt 
- Vowel Sound implementiert (Shape: VOW)
- SoundBuffer Größe von 40 auf 128 erhöt. Menüdarstellung und Bedienung wird dadurch etwas schneller und flüssiger
- Für eine geringere Systemlast wurden einige Funktionen in der Soundengine verbessert.
- Berechnung der Notenfrequenz verbessert. Tabellenwerte jetzt 16Bit

DE-GENERATOR.JPG

Gruß Rolf 

 

Mein neuer "Workplace" und einen Platz für die leckeren Kekse gibts auch noch ebueb 

NewWorkplace.jpg

Gruß Rolf 

 

 

Link to comment
Share on other sites

Der singende DE-GENERATOR

Singing.JPG

Link: https://soundcloud.com/rolf-degen/singing-de-generator

Parametereinstellungen
Osc1: Vowel
Osc2: Vowel -7 semitones
Env1: CUTOFF + Osc1+2 vowel parameter
Env2: VCA
LFO1: Osc1+2 fine tune
Portamento: 14
Delay: Time 114 / Feedback 79 / Volume 127 

 

I love vowel sounds ebueb 

SC_vowelyy.JPG

Link: https://soundcloud.com/rolf-degen/vowelyy 

 

DE-GENERATOR with Midi Control Change

MIDI-Control-Change-Meldungen werden verwendet, um eine Vielzahl von Funktionen in einem Synthesizer fern zu steuern.

MidiCC.JPG

Youtube: https://youtu.be/bueQeDujiEI 

 

Bald ist der Synthi fertig. Gibt immer noch kleine Bugs die beseitigt werden müssen oder beseitigt wurden. Hier ein kleiner Auszug von den letzten Bugs..

Build 3.61
- Scope Darstellung geändert. Auflösung wurde von 150 auf 64 Pixel reduziert. Dadurch Systemlast verringert. Zeitbasis passt sich jetzt automatisch an Audiofrequenz an. 
- Fehler in Ringmodulation auf der Oszillator Page beseitigt 
- Vowel Sound implementiert (Shape: VOW)
- SoundBuffer Größe von 40 auf 128 erhöt. Menüdarstellung und Bedienung wird dadurch etwas schneller und flüssiger
- Für eine geringere Systemlast wurden einige Funktionen in der Soundengine verbessert.
- Berechnung der Notenfrequenz verbessert. Tabellenwerte jetzt 16Bit
- Oscillator Page: Tune -1 / +1 semitones
- Modmatrix: Osc pitch jetzt -16 / +16 semitones 
- Modmatrix: LFO-LEDs leuchten jetzt auch wenn LFO als Ziel ausgewält wird und Amount <>0 ist
- Portamento Funktion auf der System Page integriert
- Systempage: Osc_Pitch von -2 / +2 Oktaven und Tune -1 / 1+ Semitones wird nur im EEPROM gespeichert

Build 3.61a
- Auswahl von Shape "VOW" (Vowel) auf Osc Page funktioniert jetzt...unt -1 / +1 Semitones
- Modmatrix: Pitchbend ~ Osc1 oder Osc2 fine, Amount -1 / +1 Semitones
- Modmatrix: LFO1 ~ Osc1+2, Amount -4 / +4 Semitones
- Modmatrix: LFO1 ~ Osc1 oder Osc2, Amount -16 / +16 Semitones
- Modmatrix: LFO1 ~ Osc1 fine, Amount -1 / +1 Semitones
- Modmatrix: LFO1 ~ Osc1 oder Osc2 fine, Amount -1 / +1 Semitones
- Fx_Delay: Panorama hinzugefügt
- System Page: Midi CC on/off hinzugefügt
- Sequencer: Start/Stop Problem bei großen Hold-Werten (> 100) beseitigt. 
- Modmatrix: Filter Balance hinzugefügt

Build 3.63d 28.02.2018
- Modmatrix: LFO Modulationsstärke angepasst

Build 3.63e 01.03.2018
- Osc: Parameter "RING" für Ringmodulation verstärkt

Build 3.63f 03.03.2018
- Modulationsmatrix: geänderte Amount für Osc Pitch - 16 / + 16 Semitones
- Modulationsmatrix: geänderte Amount für Osc fine - 2 / + 2 Semitones
- Modulationsmatrix: Modwheel Amount Wert vergrößert (von 127 auf 255)
- Osc-Page: Osc-Sync für alles Wellenformen außer Samples[

Gruß Rolf 

 

Hallo ihr Lieben..
Hier gehts mal nicht um den DEGENERATOR (das Ende naht großes Grinsen ), sondern um eine sehr schöne und interessante Web-Seite, in der es um Synthesizer Selbstbau und den Nachbau eines Mini-Moog Synthis geht.

https://www.subroutine.info/

DIY.JPG

Gruß Rolf 

 

Es wurde Zeit für etwas Neues..

Ich meine natürlich nicht meinen DEGENERATOR, sondern ein neues und gemütliches Arbeitszimmer
(siehe Bilder). Zuerst sollte es nur ein neuer Büroschrank werden um den ganzen Elektronik-Müll, der
sich seit Jahren angesammelt hat, zu verstauen. Als ich dann aber durch die Schwedischen Einkaufs-
hallen in Wuppertal wanderte und die "Ungeahnten Möglichkeiten" sah, dann überkam mich die Lust
auf mehr.

So wurde es dann doch noch ein großer Eckschreibtisch mit Rollcontainer samt Bürostuhl und kleiner
Komode. Als ich dann endlich gehen wollte, viel mir noch ein gemütlicher Ohrensessel auf, der für
Gäste oder für Entspannung dienen soll. Mein Budget für das Arbeitszimmer war zwar erschöpft,
aber ein kleiner Notbookständer für meine zwei Synthesizer habe ich dann auch noch bestellt. 

Das alte Arbeitszimmer, bestehend aus einem Wohnzimmertisch, einem Küchentisch als Lötecke, zwei
Regalen, einem Sideboard und einem Sofa, habe ich mit Hilfe meines netten Nachbarn auf den Sperr-
müll gestellt. So war denn ausreichend Platz für den großen Eckschreibtisch mit Lötecke und Büro-
schrank mit zwei Regalen.

Bilder:
20180325_015715.jpg
https://lh3.googleusercontent.com/-837IB...0325_015715.jpg

20180325_014416.jpg
https://lh3.googleusercontent.com/-ZAYuX...0325_014416.jpg

Ach was soll ich sagen.. Jetzt ist es richtig schön gemütlich und das arbeiten macht doppelt Spaß ebueb 

Grüße aus Wuppertal. Rolf 

 

DEGENERATOR Firmware/Buglist

Build 3.63f 03.03.2018 
- Modulationsmatrix: geänderte Amount für Osc Pitch - 16 / + 16 Semitones
- Modulationsmatrix: geänderte Amount für Osc fine - 2 / + 2 Semitones
- Modulationsmatrix: Modwheel Amount Wert vergrößert (von 127 auf 255)
- Osc-Page: Osc-Sync für alles Wellenformen außer Samples

Build 3.63g 11.03.2018 
- Init Sound: Osc1:SAW / Mod. ENV1~Cutoff +33 / Mod. ENV2~VCA +63 / Mod. PitchBend~Osc1+2 Pitch +8 / Mod. MWheel = LFO1~Osc1+2 fine +32
- Polling time für Midi buffer auf 250us verringert. 
- Midi overflow symbol [!] in der Überschriftleiste integriert

Build 3.64 11.03.2018 
- Modmatrix: Mit der Taste "MOD-MAT" kann jetzt von Slot 1-6 auf Slot 7-12 gewechselt werden
- Wird die Taste "CANCEL" länger als 3sec gedrückt, werden im DEGENERATOR alle Noten ausgeschaltet (Panic-Funktion)

Build 3.64a 22.03.2018 
- Draw sample curve on osc-page if new sample recording
- Sample Editor: MUTE/CUT/LOOP/REV/SEC/SECL funktioniert jetzt 

 

Neues Panelboard für den DEGENERATOR

Andre von TubeOhm instruments hat ein neues Panelboard für den DEGENERATOR entwickelt.
Die Änderungen bestehen im wesentlichen aus einem anderem TFT Display und zusätzlichen Leucht-
dioden für die beiden Taster "REC" und "SEQ". Falls die Leuchtaster nicht mehr lieferbar sind, werden
die zwei LED's als Ersatz neben den beiden Tastern bestückt. Auf meinen Wunsch ist dann noch eine
Midi-LED imlementiert worden.

DEGENERATOR Panelboard
Panelboard%2B02.JPG
Link: https://plus.google.com/photos/photo/114...rDm9O8ygE&hl=de

Panelboard.JPG
Link: https://plus.google.com/photos/photo/114...536338626?hl=de


Bis zum nächsten mal. Schöne Ostergrüße aus Wuppertal holy-willi 

Edited by rolfdegen
Link to comment
Share on other sites

 

Es gibt ein neues Firmware Update für den DEGENERATOR

Build 3.64b 01.04.2018
- DMA Transfer mit Double-Buffer Funktion für Audio-Daten implementiert. Spart Prozessor Ressourcen
- Fast 16Bit Noisegenerator implementiert. Spart Prozessor-Ressourcen

Ich habe mich am Osterwochenende endlich mal hingesetzt und mich mit der DMA-Funktion im ATXmega128 beschäftigt. Die DMA-Funktion hatte ich immer vernachlässigt, da ich dachte, das sie mir nicht viel an Prozessor-Ressourcen einsparen würde. Aber wer's nicht wagt, der wird's nicht erfahren oder so.. ebueb 

Gesagt getan. Jetzt war nur zu überlegen, wie der DMA am effektivsten eingesetzt werden kann. Im DEGENERATOR existieren u.a. zwei Double-Buffer für die Audio-Ausgabe. Ich habe mir überlegt, dass die DMA-Funktion hier die größte Einsparung und Entlastung für den Prozessor einbringen könnte. Ferner bringt der ATXmega128 insgesamt 4 DMA Kanäle mit Double-Buffer Funktion mit. Wobei allerdings zwei DMA-Kanäle für eine Double-Buffer zusammengeschaltet werden müssen. Dies kann man dann idealer Weise für die beide Audio-Kanäle verwenden.

DMA-Controller
Der DMA-Controller (Direct Memory Access) ermöglicht das Übertragen von Daten zwischen Speicher und Peripheriegeräten ohne große Prozessorauslastung. Während der DMA-Controller Daten von einem Speicherbereich zu einem anderen Bereich kopiert, kann die CPU andere Aufgaben wzB. Tastenabfrage oder Textausgabe auf einem LC-Display ausführen.

Link: DMA Funktion im Xmega 


Bild: Datenübertragung mit CPU
DMA_01.gif
DMA_02.gif

Initialisierung des DMA-Kontrollers im DEGENERATOR

//*************************************************************************
// DMA init
//*************************************************************************
void dma_init(void){
    DMA.CTRL = DMA_CH_ENABLE_bm | DMA_DBUFMODE_CH01CH23_gc; // set Double Buffer and enabled
    
    // DMA Channel 0 (Audio-Buffer A)    
    DMA.CH0.ADDRCTRL = DMA_CH_SRCRELOAD_TRANSACTION_gc | DMA_CH_SRCDIR_INC_gc
    | DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
    DMA.CH0.TRIGSRC = DMA_CH_TRIGSRC_DACB_CH0_gc; // DACB CH0 is trigger Quelle
    DMA.CH0.DESTADDR0 = (((uint32_t)(&DACB.CH0DATAH))>>0*8) & 0xFF;
    DMA.CH0.DESTADDR1 = (((uint32_t)(&DACB.CH0DATAH))>>1*8) & 0xFF;
    DMA.CH0.DESTADDR2 = (((uint32_t)(&DACB.CH0DATAH))>>2*8) & 0xFF;
    DMA.CH0.TRFCNT = 128;
    DMA.CH0.SRCADDR0 = (((uint32_t)(&Voice.Buffer_A))>>0*8) & 0xFF;
    DMA.CH0.SRCADDR1 = (((uint32_t)(&Voice.Buffer_A))>>1*8) & 0xFF;
    DMA.CH0.SRCADDR2 = (((uint32_t)(&Voice.Buffer_A))>>2*8) & 0xFF;
    DMA.CH0.CTRLA = 0xA4;   // Aktivieren, Wiederholen, 1 Byte, Single
    
    // DMA Channel 1 (Audio-Buffer B)
    DMA.CH1.ADDRCTRL = DMA_CH_SRCRELOAD_TRANSACTION_gc | DMA_CH_SRCDIR_INC_gc
    | DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
    DMA.CH1.TRIGSRC = DMA_CH_TRIGSRC_DACB_CH0_gc; // DACB CH0 is trigger Quelle
    DMA.CH1.DESTADDR0 = (((uint32_t)(&DACB.CH0DATAH))>>0*8) & 0xFF;
    DMA.CH1.DESTADDR1 = (((uint32_t)(&DACB.CH0DATAH))>>1*8) & 0xFF;
    DMA.CH1.DESTADDR2 = (((uint32_t)(&DACB.CH0DATAH))>>2*8) & 0xFF;
    DMA.CH1.TRFCNT = 128;
    DMA.CH1.SRCADDR0 = (((uint32_t)(&Voice.Buffer_B))>>0*8) & 0xFF;
    DMA.CH1.SRCADDR1 = (((uint32_t)(&Voice.Buffer_B))>>1*8) & 0xFF;
    DMA.CH1.SRCADDR2 = (((uint32_t)(&Voice.Buffer_B))>>2*8) & 0xFF;
    DMA.CH1.CTRLA = 0xA4;   // Aktivieren, Wiederholen, 1 Byte, Single
    
    // DMA Channel 2 (Audio-Buffer C)
    DMA.CH2.ADDRCTRL = DMA_CH_SRCRELOAD_TRANSACTION_gc | DMA_CH_SRCDIR_INC_gc
    | DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
    DMA.CH2.TRIGSRC = DMA_CH_TRIGSRC_DACA_CH0_gc; // DACA CH0 is trigger Quelle
    DMA.CH2.DESTADDR0 = (((uint32_t)(&DACA.CH0DATAH))>>0*8) & 0xFF;
    DMA.CH2.DESTADDR1 = (((uint32_t)(&DACA.CH0DATAH))>>1*8) & 0xFF;
    DMA.CH2.DESTADDR2 = (((uint32_t)(&DACA.CH0DATAH))>>2*8) & 0xFF;
    DMA.CH2.TRFCNT = 128;
    DMA.CH2.SRCADDR0 = (((uint32_t)(&Voice.Buffer_C))>>0*8) & 0xFF;
    DMA.CH2.SRCADDR1 = (((uint32_t)(&Voice.Buffer_C))>>1*8) & 0xFF;
    DMA.CH2.SRCADDR2 = (((uint32_t)(&Voice.Buffer_C))>>2*8) & 0xFF;
    DMA.CH2.CTRLA = 0xA4;   // Aktivieren, Wiederholen, 1 Byte, Single
    
    // DMA Channel 3 (Audio-Buffer D)
    DMA.CH3.ADDRCTRL = DMA_CH_SRCRELOAD_TRANSACTION_gc | DMA_CH_SRCDIR_INC_gc
    | DMA_CH_DESTRELOAD_BURST_gc | DMA_CH_DESTDIR_INC_gc;
    DMA.CH3.TRIGSRC = DMA_CH_TRIGSRC_DACA_CH0_gc; // DACA CH0 is trigger Quelle
    DMA.CH3.DESTADDR0 = (((uint32_t)(&DACA.CH0DATAH))>>0*8) & 0xFF;
    DMA.CH3.DESTADDR1 = (((uint32_t)(&DACA.CH0DATAH))>>1*8) & 0xFF;
    DMA.CH3.DESTADDR2 = (((uint32_t)(&DACA.CH0DATAH))>>2*8) & 0xFF;
    DMA.CH3.TRFCNT = 128;
    DMA.CH3.SRCADDR0 = (((uint32_t)(&Voice.Buffer_D))>>0*8) & 0xFF;
    DMA.CH3.SRCADDR1 = (((uint32_t)(&Voice.Buffer_D))>>1*8) & 0xFF;
    DMA.CH3.SRCADDR2 = (((uint32_t)(&Voice.Buffer_D))>>2*8) & 0xFF;
    DMA.CH3.CTRLA = 0xA4;   // Aktivieren, Wiederholen, 1 Byte, Single
}


//*************************************************************************
// Timer0 Interrupt: DAC Task 40KHz/25usec
//*************************************************************************
ISR(TCC0_OVF_vect)
{    
    // DMA Interrupt ------------------------------------------------------
    
    // if Channel Transaction Complete Interrupt Flag set
    if (DMA.INTFLAGS & DMA_CH0TRNIF_bm)
    {
        // set buffer_nr
        Voice.buffer_nr = 0;
        
        // set buffer_fill interrupt
        TCE1.INTCTRLA = 0b00000010;
        
        // clear DMA Interrupt (set one)
        DMA.INTFLAGS |= DMA_CH0TRNIF_bm;
    }
    else if (DMA.INTFLAGS & DMA_CH1TRNIF_bm)
    {
        // set buffer_nr
        Voice.buffer_nr = 1;
        
        // set buffer_fill interrupt
        TCE1.INTCTRLA = 0b00000010;
        
        // clear DMA Interrupt (set one)
        DMA.INTFLAGS |= DMA_CH1TRNIF_bm;
    }

....

Ferner habe ich den 16Bit Noise-Generator überarbeitet. Dieser ist jetzt als Inline Assembler Code vorhanden und etwas kürzer im Code und in der Berechnungszeit. Er benötigt jetzt nur noch 512ns (16 Taktzyklen).
Hierbei habe ich aus Zeitgründen auf die Übergabe der Ergebniswerte in der Funktion verzichtet und die Werte direkt in die Ausgabe-Variablen RNG_8 und RNG_16 geschrieben.

Fast Noisegenerator

uint16_t RNG_16;
uint8_t RNG_8;

static inline Noise8(void) {
    asm volatile (
    "lds r30, RNG_16+0" "\n\t"
    "lds r31, RNG_16+1" "\n\t"
    "lsr r31" "\n\t"
    "ror r30" "\n\t"
    "brsh xxor" "\n\t"
    "ldi r17, 0xb4" "\n\t"
    "xxor: eor r31, r17" "\n\t"
    "sts RNG_8, r30" "\n\t"
    "sts RNG_16+0, r30" "\n\t"
    "sts RNG_16+1, r31" "\n\t"
    ::: "r17", "memory"
    );
}

 

Grüße aus Wuppertal. Rolf

Edited by rolfdegen
Link to comment
Share on other sites

  • 1 month later...

Hallo Rolf.
Mir gefällt dein Synth recht gut. Schade, daß er nur monophon spielbar ist.
Soundmäßig deckt dein Synth nen Haufen Sounds ab, daß man sie nur monophon nutzen kann schränkt den Nutzen allerdings grob auf Bass- und Lead Sounds ein. (Es mag Ausnahmen geben)

Hast du schon Pläne für  einen DeGenerator 2 mit polyphoner/multitimbraler Soundengine und Einzelausgängen?

Link to comment
Share on other sites

  • 2 months later...

Digitale Filterfunktion im DE-GENERATOR

Der Waveform Editor im DE-GENERATOR besitzt eine digitale Filterfunktionen. Einstellbar sind Lowpass, Highpass, Bandpass und Bandstop (Notch). Der digitale Filter funktioniert nach dem Prinzip des Infinite-Impulse-Response-Filter (abgekürzt IIR-Filter) und arbeitet mit Rückkopplung das dem Verhalten eines analogen Filters entspricht.


Original
DSC00046.JPG

Lowpass
DSC00045.JPG

Highpass
DSC00047.JPG

Bandpass
DSC00048.JPG

Bandstop (Notch)
DSC00049.JPG

Im allgemeinen sind digitaler Filter sehr rechenintensiv und in Mikrocontroller Anwendungen kaum einsetzbar. Da ich im DE-GENERATOR aber keinen laufenden Audiostream berechnen muss, sondern nur einen einzelnen Wellenformzyklus, ist die Berechnen nicht zeitkritisch. Durch die Filterfunktionen können Wellenformen aus der User-Wellenform-Bank oder selbst gezeichnete Wellenformen zusätzlich verändert werden und abgespeichert werden (siehe Video).


Video: Waveform Editor
WaveformEditor.JPG
Link: https://youtu.be/iSvIDtJT3ZQ

Gruß Rolf 

Link to comment
Share on other sites

Hallöchen..

Es gibt noch Änderungen im Waveform Editor. Zum einen wurd das Clipping in der VOL Funktion geändert und funktioniert jetzt richtig. Und zum anderen wurde eine Random Funktion (RND) integriert. Die RND Funktion erzeugt eine neue Wellenform aus zwei zufällig ausgewählten Wellenformhälften in der aktuellen USER-Wellenform-Bank. Damit sind über 16.000 neue Wellenformen möglich.

Video Link: 

Gruß Rolf

Edited by rolfdegen
Text edit
Link to comment
Share on other sites

  • 7 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...