rolfdegen

AVR-Synthesizer "WAVE 1"

367 posts in this topic

Hallöchen..

Auf Heise.de habe ich einen sehr interessanten Artikel gelesen. Thema des Artikel ist 'Synthesizer im Eigenbau'. Darin werden vier bekannte DIY Synthesizer vorgestellt wzB der Shruthi, MeeBlip, Rockit und Nebulophone.

DIY Synthesizer
DIY_SYNTH.jpg

Link zum Artikel: http://www.heise.de/make/artikel/Synthes...au-3036913.html

Link zu den Klangbeispielen: http://www.heise.de/make/inhalt/2013/01/086

Ich denke ich werde über die Weihnachtstage mal meinen Raspberry Pi2 anwerfen und ein paar Musikalische Dinge ausprobieren und darüber berichten. Bis dahin viel Spaß beim lesen.

Lieben Grüße aus Wuppertal. Rolf 
 

Share this post


Link to post
Share on other sites

Hoh hoh hoh.. Bald ist Weihnachten und die Leute kaufen wie verrückt. Ich auch großes Grinsen 

Zum DE:GENERATOR:
Hab die 1.Menü Seite jetzt komplett überarbeitet. Zu jedem Sound Programm werden jetzt die Datei Größe und Wellenform (Sample-File oder Wellenform) angezeigt.
Das laden eines Sound Programms funktioniert jetzt doppelt so schnell wie vorher. 

Damit man beim Suchen eines Sounds in anderen Sound Bänken die Orientierung nicht verliert, wird das aktuelle (geladene) Sound Programm grau markiert und unterm MiniScope nochmal angezeigt.

Bild: Menüseite 'Sound Program'
Picture%2B5.jpg

Gruß Rolf 
 

Edited by rolfdegen

Share this post


Link to post
Share on other sites

Hallöchen..

Die Zeit rast dahin und man hat das Gefühl, nicht mehr viel Zeit zu haben, für die Dinge die man noch machen will. So gehts mir im Moment.

Am DE:GENERATOR gibt es einige Änderungen. Um die Bedienung zu vereinfachen sind jetzt 8 Taster vorhanden. Zusätzlich gibts auf dem Front Panel zwei Potis. Diese können für Modulationszwecke frei programmiert werden. Damit das Ganze noch etwas bunter wird, gibts für die Kontrolle der LFO's jetzt drei LED-Lampen. Geplant ist noch die Beleuchtung der DATA Encoder mit blauen LED's.

DE:GENERATOR
IMG_20151222_091948.jpg

Front Panel
Pannel.jpg

Lieben Gruß und schöne Weihnachten. Rolf 

Share this post


Link to post
Share on other sites

Ho ho ho.. Ich wünsch euch allen ein schönes und gemütliches Weihnachtsfest.

Ich habe testweise mal einen Encoder mit den blauen LED's bestückt. Wenn jetzt noch die Löcher in der Frontplatte etwas größer gemacht werden, so das Knopf das Loch nur knapp abdeckt, sollte etwas blaues Licht an den Seiten austreten. Hier mal zwei Pics..

LED Beleuchtung für Encoder
IMG_20151223_214004.jpg
IMG_20151223_214107.jpg

Gruß Rolf 

Share this post


Link to post
Share on other sites

So.. die "Weihnachstbeleuchtung" ist jetzt komplett ebueb 

LED Beleuchtung der Encoder
IMG_20151227_125557.jpg
IMG_20151227_123442.jpg


Jetzt wird noch ein wenig an der Soundengine gearbeitet um die Bedienung zu verbessern.


Gruß Rolf 

Share this post


Link to post
Share on other sites

Was ich zur Zeit mache..

Ich arbeite noch ein wenig an der Loop-Funktion.
Loop.jpg

Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallo zusammen..

Ich hoffe Ihr seit alle gut ins neue Jahr gerutscht und habt keinen Kater bekommen. Wenn ich an die Bowle denke... man die war so lecker holy-willi 

Mein Kollege Andre war in den letzten Tagen auch sehr fleißig und hat die ersten Platinen und Gehäuse Entwürfe gezeichnet. Wegen der besseren Abstimmung untereinander,
habe ich beschlossen, die ganzen Schaltpläne von Eagle nach Target 3001 zu importieren. Andre entwirft mit Target 3001 dann die Platinen für den DE:GENERATOR.
Target 3001 gibts auch als Freeware von distrelec mit der Einschränkung auf maximal 700 Pins. Hier der Link: http://www.distrelec.de/de/cad-freeware/...ice_cadfreeware


Gehäuse Entwurf DE:GENERATOR
DE-GENERATOR%2BBETA%2BGUI3.bmp
Mit der Platzierung der LFO-LED's über dem Display bin ich noch nicht ganz einverstanden. Ich finde die Position rechts neben dem 4.Encoder besser.
Auch der Namen "Transwave" für eine gemeinsame Produktlinie muss noch diskutiert werden.


PCB Layout DE:GENERATOR
Degenerator-Layout3%2B%25281%2529.bmp

Gruß Rolf 

Share this post


Link to post
Share on other sites
1 hour ago, rolfdegen said:

Mein Kollege Andre war in den letzten Tagen auch sehr fleißig und hat die ersten Platinen und Gehäuse Entwürfe gezeichnet. Wegen der besseren Abstimmung untereinander,
habe ich beschlossen, die ganzen Schaltpläne von Eagle nach Target 3001 zu importieren. Andre entwirft mit Target 3001 dann die Platinen für den DE:GENERATOR.
Target 3001 gibts auch als Freeware von distrelec mit der Einschränkung auf maximal 700 Pins. Hier der Link: http://www.distrelec.de/de/cad-freeware/...ice_cadfreeware

Ein professionelles Tool ganz ohne Einschränkungen und zum Nulltarif is KICAD, zu finden unter http://kicad-pcb.org/download/

KICAD ist für so gut wie alle relevanten Betriebssysteme verfügbar. Beispiele für MIDIbox Platinen die mit KICAD entstanden sind finden sich im Wiki.

Viele Grüße

ilmenator

Share this post


Link to post
Share on other sites

Hallo ilmenator

Danke für den Tip. Andre hat die 3.Beta vom Gehäuse Designe gemacht.

DE:GENERATOR Case Designe Beta3
Case_Beta3.jpg

Gruß Rolf 

Share this post


Link to post
Share on other sites

Case Designe Beta4
Case_Beta4.jpg 

Gruß Rolf

Share this post


Link to post
Share on other sites

Hallöchen..

So ein Digi Scope ist doch eine feine Sache wie ich finde. Es hilft doch sehr bei der Fehlersuche ebueb 

Die Tage hatte ich ein Problem mit einem Encoder. Bei der Dateneingabe hatte ich öffters Zahlensprünge. Ich dachte zuerst an ein Problem in meiner Software, weil diese immer wieder weiterentwickelt und geändert wird. Aber Test brachten mich nicht weiter. Die Encoder und Tasten werden im DE-GENERATOR alle 500msec abgefragt. Das ist auch für eine schnelle Umdrehung der Encoder schnell genug. Das Problem musste also an der Hardware liegen. Hab dann mein Digi Scope "angeschmissen" und mal an die Kontakte des Encoders angeschlossen. Und siehe da.. viele nette Impulsefolgen und noch viel mehr. Das auf dem Bildschirm sah so gar nicht nach einem Gray-Code von einem Encoder aus. Die beste Software kann dieses Prellen nicht beseitigen.

Ich hab dann einen neuen Encoder eingelötet und alles funktioniert jetzt fehlerfrei.

Signalverlauf am alten Encoder. Man sieht deutlich wie die Signalflanken prellen
Encoder_Alt.jpg

Signalverlauf am neuen Encoder ohne prellen
Encoder_Neu.jpg

Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallöchen..

Ich hab den externen Audio-Eingang im DE-GENERATOR etwas abgeändert. Man hat jetzt die Möglichkeit das Stereosignal am Eingang als Summensignal zu sampeln. Ferner ist das Eingangssignal auch auf die Filtereingänge geschalten. Für die MiniScope-Funktion wird der Stereoausgang auf den gleichen ADC-Eingang geschaltet. Das spart Bauteile und Platz auf der Platine.

Stereo Eingang im DE-Generator
Audio_Input.JPG


Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallo Rolf

Wenn du R89 mit jeweils 10k auf die Multiplexereingänge X1 & X2 verschiebst, fällt nur eine geringe Spannung über dem Multiplexer ab, da der Multiplexerausgang bzw. der(-) Eingang von IC15b nahezu auf 0V. Dies kommt der Signalqualität deiner Einganssingnale zu Gute.

Gruss

Jo

Edited by nlate

Share this post


Link to post
Share on other sites

Hallo zusammen..

Damit das Sampeln von Audio-Signalen noch etwas störungsfreier funktioniert, habe ich den ADC-Eingang im Xmega Prozessor als Differenzial-Eingang beschaltet. Der ADC im Xmega Prozessor sampelt mit 12Bit und einer Abtastrate von 44.1KHz. Intern wird der 12Bit Wert dann auf 8Bit herunter gerechnet und ins 1MByte große Sample-Ram geschrieben. Der Operationsverstärker IC 15c+15d erzeugen aus dem Audio-Signal ein Differenzsignal für den ADC-Eingang.

ADC im Xmega128A1: http://www.atmel.com/images/atmel-8032-u...ote_avr1300.pdf



Bild: ADC mit Differenzial-Eingang
Audio_IN_1.2.JPG


Initialisierung des ADC im Xmega128A1 Prozessor

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
// intit ADCA 12Bit (Sample Input)
// 8Bit / differencial mode / ext.VRef 2.5V PortA0 / Prescaler 64 / positive Input PortA3 / negative Input PortA1
    ADCA.CTRLB ADC_RESOLUTION_12BIT_gc ADC_FREERUN_bm;
    ADCA.REFCTRL ADC_REFSEL_AREFA_gc;        
    ADCA.PRESCALER ADC_PRESCALER_DIV64_gc;
    ADCA.CH0.CTRL ADC_CH_INPUTMODE_DIFF_gc;
    ADCA.CH0.MUXCTRL |= ADC_CH_MUXPOS_PIN3_gc ADC_CH_MUXNEG_PIN1_gc;
    ADCA.INTFLAGS 0x00;
    ADCA.CTRLA ADC_ENABLE_bm;        // ADC enabled



Gruß Rolf 

Share this post


Link to post
Share on other sites
On 17.1.2016 at 5:45 PM, nlate said:

Hallo Rolf

Wenn du R89 mit jeweils 10k auf die Multiplexereingänge X1 & X2 verschiebst, fällt nur eine geringe Spannung über dem Multiplexer ab, da der Multiplexerausgang bzw. der(-) Eingang von IC15b nahezu auf 0V. Dies kommt der Signalqualität deiner Einganssingnale zu Gute.

Gruss

Jo

Hi Jo

Danke für deinen Tip. Werde es mal ausprobieren.

Gruß Rolf

Share this post


Link to post
Share on other sites

Hallöchen..

Im DE:GENERATOR habe ich für die Sample Aufnahme eine Noise Shaper Function integriert. Der ADC-Eingang arbeitet mit einer Auflösung von 12 Bit. Für die weitere Bearbeitung werden die Samples im DE:GENERATOR auf 8Bit herunter gerechnet. Beim normalen Herunterrechnen von 12 auf 8Bit (4* rechts Shiften) entsteht bei leisen Signalen ein sehr störendes pumpartiges Rauschen. Der Noise Shaper verschiebt dieses Rauschen in einen höheren Frequenzbereich, so dass unser Ohr das Rauschen als weniger störend wahrnimmt.

Programmcode

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:
//*************************************************************************
// Test noise-sharping 12Bit 44.1KHz 
//*************************************************************************
ISR(TCC0_OVF_vect)
{
    
    // Noise Shaper function
    int16_t sample_x ADCA_CH0RES;
    int16_t sample_16 sample_x 12;
    sample_16 += quant_error;
    if (sample_16 < -32768){sample_16 32768;}
    else if (sample_16 32767){sample_16 32767;}
    int8_t sample_8 sample_16 >> 8;
    quant_error sample_16 - ((int16_t)(sample_8) << 8);
    
    /* convert 12Bit into 8Bit
    uint16_t sample_16 = ADCA_CH0RES;
    uint8_t sample_8 = sample_16 >> 4;
    */

    // DAC out
    DACA.CH0DATAH sample_8;
    DACB.CH0DATAH sample_8;

}



Um das zu demonstrieren habe ich ein paar Klangbeispiele aufgenommen. Jeweils ohne und mit der Noise Shaper Funktion. Am deutlichsten hört man es bei Sound 3+4. Ohne Noise Shaper versinkt das Piano quasi im 8Bit Rauschen.

Sound 1: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing
Sound 2: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing
Sound 3: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing
Sound 4: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing
Sound 5: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing
Sound 6: https://drive.google.com/file/d/0BxbpDqw...iew?usp=sharing

Gruß Rolf 

Share this post


Link to post
Share on other sites

Von Andre gibts eine neue Beta fürs Gehäuse

Gehäuse Entwurf Beta15 ebueb 
GUI%2BTEIL%2B1BETA15.bmp

Gruß Rolf 

Edited by rolfdegen

Share this post


Link to post
Share on other sites

Hallo zusammen..

Der Schaltplan für das Frontpanel ist jetzt fertig. Insgesamt gibt es jetzt 13 Tasten, fünf Drehimpulsgeber und 3 Potis. Für die indirekte Beleuchtung der Drehimpulsgeber und Potis sorgen 32 LED's. Für spezielle Statusinformationen wzB Midi-Empfang und laufende LFO gibt es noch zusätzliche rote LED's. Die LED-Farbe kann aber bei der Bausatzbestellung selber ausgewählt werden.

Das LCD-Display wird über einen 8Bit breiten Datenbus vom Xmega Prozessor angesteuert. Mit dem Latch IC1a werden die oberen Adress- und Datenleitungen DB8-DB15 für das LCD erzeugt. Die LED-Hintergrundbeleuchtung liegt über R67 1.5 Ohm direkt an der Versorgungsspannung von +3.3 Volt.

Die Drehimpulsgeber und Tasten werden mit Hilfe eines Schieberigster IC3a, IC4a und IC5a über die SPI-Schnittstelle am Xmega Prozessor abgefragt. Über die gleiche SPI-Schnittstelle steuert das Schieberegister IC6a die roten Status LED's an.

Pot1+2 sind über zwei ADC-Eingänge am XMega verbunden und werden jede Millisekunde abgefragt. In der Modulationsmatrix kann diesen Potis ein oder auch mehrere Modulationsziele zugewiesen werden. Das Volum-Poti ist ein Stereo-Poti und steuert die Lautstärke am Audioausgang. 

Schaltplan Frontpanel
PanelBoard.jpg

Schaltplan Prozessor Board
CPU_Board_321.jpg

Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallöchen..

Andre hat den ersten Entwurf für die Prozessor-Platine gemacht. Da die Platine mit einigen SMD-Bauteile bestückt ist und wir den Kunden diese Lötarbeit nicht zumuten wollen, werden wir diese selber löten und getestet ausliefern.


Prozessor Board im DE-GENERATOR

CPU_Board.jpg

Share this post


Link to post
Share on other sites

Hallo ihr Lieben!

Da die Entwicklung der Platinen noch etwas andauert, habe ich die Zeit genutzt und an der Verbesserung der Menüoberfläche gearbeitet. Damit man die Menüseiten besser unterscheiden kann, haben diese jetzt farbige Frames, die nach Funktionsgruppen sortiert sind. So haben zum Beispiel die Menüseiten für den Oszillator alle einen blauen Frame und die LFO's einen grünen Frame.

Menu.JPG


Die Menüseite für den Filter wurde auch überarbeitet. Entsprechend der eingestellten Filterfunktion wird der Frequenzverlauf und die Resonanz als grafische Filterkurve dargestellt. Ein kleines Scope Fenster auf der rechten Seite zeigt die Wellenform des Filterausganges in Echtzeit an.

Picture%2B19.jpg

Das MiniScope hat jetzt eine bessere Triggerfunktion erhalten. Der Triggerlevel kann jetzt auch auf negative Amplitudenwerte eingestellt werden. Auf der linken Seite zeigt ein kleiner gelber Pfeil auf den eingestellten Pegel. Wird der Triggerlevel auf 0 eingestellt, ist die Triggerfunktion ausgeschaltet.

Als nächstes steht die Oszillator Engine auf dem Programm. Ich will das Bedienkonzept etwas vereinfachen. Dadurch wird die ganze Sachen dann etwas überschaubarer.

Bis zum nächten Post und ein schönes Wochenende.

Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallöchen..

Andre hat das CPU-Board jetzt fertig entwickelt. Ich muss es jetzt auf Fehler überprüfen und wenn alles gut ist werden diese Woche die ersten Platinen in China bestellt. Bin gespannt..

Die zwei Pfostenleisten K3 und K4 verbinden das CPU-Board über zwei Flachbandkabel mit dem Bedienpanel für die LCD-Anzeige, Tasten und Encoder. Die restlichen Pfostenleisten sind mit dem Motherboard verbunden und zuständig für Stromversorgung, Audio- und Steuerleitungen. Die zwei 8 poligen Pfostenleisten auf der linken Seite des CPU-Boards sogen für einen sicheren und festen Halt des SD Karte Buchse.

DE-GENERATOR CPU-Board
CPU_Board_final_a.JPG

CPU_Board_final_b.JPG

CPU_Board_final_c.JPG

Gruß Rolf 

Share this post


Link to post
Share on other sites

Hallo.. ich schon wieder Augenzwinkern 

Montags ist eben immer viel los und auch bei mir in der Entwicklungswerkstatt.

Um den DE-GENERATOR in seiner "unbegrenzten" Möglichkeit der Klangerzeugung noch zu steigern, können jetzt die 128 festen Wellenformen als Wellenform Bank von der SD Karte geladen werden. Insgesamt besteht dann die Möglichkeit auf 128*100 Waveforms und 128*100 Sample-Files zu zugreifen . Eine Wellenform Bank besteht aus 128 einzelnen 256 Byte großen Wellenformen. Diese können zB am PC mit einem Audioeditor (Audacity) hergestellt und auf die SD Karte kopiert werden. Im Oszillator Menu kann dann der Benutzer auf die verschiedenen Wellenform Bänke und Sample-File Bänke zugreifen. Eine Editierung der Wellenform Bank ist im DE-GENERATOR momentan noch nicht vorgesehen.

Mit dem Mode Schalter kann zwischen der Auswahl von Wellenform oder Sample-File umgeschaltet werden.

Auswahl von Waveforms
IMG_20160229_151838.jpg
IMG_20160229_151910.jpg

Auswahl von Sample-Files
IMG_20160229_152957.jpg


Gruß Rolf

Share this post


Link to post
Share on other sites

Hallöchen. Was ich zur Zeit mache.. nix Augenzwinkern 

Das war gelogen. Ich arbeite zur Zeit an ein paar Midi-Routinen für den DE:GENERATOR. Bei einer Routine handelt es sich um eine kleine Midi Noten Verwaltung (NoteStack).

Der NoteStack macht folgendes: Wenn ich eine Midi Note spiele, wird die Noten Nummer auf Platz 1 im NoteStack gespeichert und der Ton vom Synthesizer gespielt. Lasse ich die Taste wieder los, so wird die Note im NoteStack gelöscht und der Ton wird ausgeschaltet. Simpel.. 

Jetzt drücken wir aber zwei Noten. Fast passiert: Zuerst wird die 1.Note auf Platz 1 im NoteStack gespeichert und der Ton gespielt. Danach wird die 2.Note auf Platz 2 im NoteStack gespeichert und der Ton für die 2.Note gespielt. Damit befinden sich jetzt zwei Noten im NoteStack. Die 1.Note auf Platz 1 und die 2.Note auf Platz 2. Lasse ich jetzt die 2.Note los, so wird im Stack die 2.Note auf Platz 2 gelöscht und der Ton für die 1.Note gespielt.

Änliches passiert wenn die 1.Note losgelassen wird und die 2.Note noch gespielt wird. Dadurch wird dann die 1.Note auf Platz 1 im NoteStack gelöscht und die 2.Note auf Platz 1 verschoben. Der Ton für die 2.Note wird ohne Unterbrechung weiter gespielt. Insgesamt können 16 Noten im NoteStack verwaltet werden.


NoteStack Schema
NoteStack_01.jpg

C-Code Beispiel

uint8_t NoteStack_pool[10];
uint8_t NoteStack_ptr = 0;
uint8_t NoteStack_size = 10;

//-------------------------------------------------------------------------
// NoteOn
//-------------------------------------------------------------------------
void midi_NoteOn(void)
{
    uint8_t midi_note_temp = midi_data[0];                        // load midi_note
    
        if (NoteStack_ptr < NoteStack_size)
        {
            midi_note = midi_note_temp;
            NoteStack_pool[NoteStack_ptr] = midi_note;        // write current note into notestack_pool
            NoteStack_ptr++;
            midi_sync_flag = 1;                                // start envelopes
        }        
}


//-------------------------------------------------------------------------
// NoteOff
//-------------------------------------------------------------------------
void midi_NoteOff(void)
{
    // load current note
    uint8_t midi_note_temp = midi_data[0];
    uint8_t last;
    
    // search current note into notestack_pool
    for (uint8_t i = 0; i < NoteStack_size; i++)
    {
        if (NoteStack_pool[i] == midi_note_temp)
        {
            // clear current note into notestack_pool
            NoteStack_pool[i] = 0xFF;
            NoteStack_ptr--;
            last = i;
            
            // sort notes into notestack_pool
            for (last; last < NoteStack_size;last++)
            {
                NoteStack_pool[last] = NoteStack_pool[last+1];
            }
            
            // playing previous note
            if (NoteStack_ptr > 0)
            {
                last = NoteStack_ptr-1;
                midi_note = NoteStack_pool[last];
                frequency_tune();
            }
            else
            {
                // stop envelope if no note into notestack_pool
                midi_gate_flag = 0;
            }
            break;
        }
    }        
}

Gruß Rolf

1 person likes this

Share this post


Link to post
Share on other sites

Hallöchen..

Heute sind die CPU Platinen für den DE:GENERATOR aus China eingetroffen. Wir haben insgesamt 10 Stück bestellt. Jetzt gehts ans SMD löten. Bin gespannt ob wir's hinbekommen.

CPU Platinen für den DE.GENERATOR
P1050566%2B%255B23506%255D.JPG

P1050567%2B%255B23505%255D.JPG

Gruß Rolf 

Edited by rolfdegen

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now