Jump to content

rolfdegen

Members
  • Posts

    457
  • Joined

  • Last visited

  • Days Won

    14

Everything posted by rolfdegen

  1. Hallo MIDIbox Newbie In meinem DIY-Synth verwende ich fünf Drehgeber (ALPS STEC12E) für die Menüsteuerung und Dateneingabe. Die Abfrage der Drehgeber (Encoder) erfolgt in meinem Source-Code über einen Timer-Interrupt jede 1msec. Die Encoder-Daten von -128 bis +127 werden in Variablen "enc1_delta" zwischengespeichert und im Hauptprogramm ausgewertet. Zusätzlich ist noch eine dynamische Drehbeschleunigung integriert. Vielleicht hilft dir der Code für dein Projekt. Hier der C-Code (ATXmega) für einen einen Drehgeber: //------------------------------------------------------------------------- // PORT-PIN Defination Encoder // #define enc1_PHASEA (PORTE.IN & 1<<PIN0) // an Pinbelegung anpassen #define enc1_PHASEB (PORTE.IN & 1<<PIN1) // an Pinbelegung anpassen // init Port Encoder_1 PORTE.DIR &= ~(1<<PIN0); // init Port-Direction to IN PORTE.DIR &= ~(1<<PIN1); PORTE.PIN0CTRL = 0x38; // set Port Pullup PORTE.PIN1CTRL = 0x38; volatile int8_t enc1_delta = 0; // -128 ... 127 uint8_t enc1_dynamic = 3; const int8_t table[16] PROGMEM = {0,0,-1,0,0,0,0,1,1,0,0,0,0,-1,0,0}; //************************************************************************* // Timer 3 interrupt (priority low) 1msec // encoder-polling //************************************************************************* // values for enc-dynamic #define ENCODER_ACCEL_TOP 1536 #define ENCODER_ACCEL_INC 96 #define ENCODER_ACCEL_DEC 1 ISR(TCE1_OVF_vect ) { int8_t new_x, diff_x; // read encoder 1 ----------------------------------------------------- static int8_t last_1; static int8_t last_1temp; static int16_t Enc1Accel; // slowing (Entschleunigung) Enc1Accel -= ENCODER_ACCEL_DEC; // wird hier zuviel subtrahiert, if (Enc1Accel & 0b1000000000000000) // wird EncAccel negativ, und Enc1Accel = 0; // read enc pin and convert gray to binary new_x = 0; last_1 = (last_1 << 2) & 0x0F; if (enc1_PHASEA) last_1 |=2; if (enc1_PHASEB) last_1 |=3; new_x += pgm_read_byte(&table[last_1]); // difference last - new diff_x = last_1temp - new_x; // difference last - new last_1temp = new_x; // save new to last if (diff_x > 0) { // direction if (last_1 > 0) enc1_delta -= 1+(Enc1Accel >> 6); // diff_1: xxxxxx11 else enc1_delta += 1+(Enc1Accel >> 6); // diff_1: xxxxxx01 // acceleration (Beschleunigung) if (Enc1Accel <= (ENCODER_ACCEL_TOP - enc1_dynamic)) Enc1Accel += enc1_dynamic; } //------------------------------------------------------------------------- // get encoder value // int8_t encode1_read(void) // read four step encoders { int8_t val; cli(); // atomarer Variablenzugriff val = enc1_delta; enc1_delta = 0; sei(); return val; } Grüße Rolf
  2. My DIY Synth Project: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878
  3. Hallo again.. ich schon wieder Damit man einen kleinen Eindruck gewinnt, wie der Synthesizer später einmal aussehen wird, hab ich mal eine Fotomontage gemacht. Ist mir nicht so gut gelungen, bin aber auch kein "gut bezahlter" Grafiker Bild: Synthesizer "WAVE 1" Anmerkung: Auf dem Display ist das Wort "Oktave" noch in Deutsch geschrieben. Ist in der neuen Software Version aber schon berichtigt. Dat is aber och ne Problem mit dem Denglisch in unserer Sprache Das LED-Backlight fürs DOG-Display gibts auch in anderen Farben zB. grün-gelb, amber, weiß (verwende ich) oder RGB. Gruß Rolf
  4. Hallöchen.. In Bezug auf eine Anfrage bei der Firma Schaefer AG, ob es möglich sei, meine Frontplatte von dem BOPLA Gehäuse zu fräsen, teilte mir die Firma mit, das sie schon öfters solche Gehäuse bearbeitet hat. Aktuelles Frontplatten Designe vom Synthesizer Gruß Rolf
  5. Hallo Nasrudin Danke für deine guten Tips. Ich denke das dein Vorschlag mit einer 2.Frontplatte der beste und kostengünstigste Weg ist, zumal das Ganze auch noch beschriftet werden soll. Die Befestigung des Bedienpanels unter der Frontplatte muß ich dann aber ändern. Sonst ist der Abstand von Display zur Frontplatte zu groß und die Encoder-Knöpfe haben keinen Abstand mehr zur Frontplatte (sie Zeichnung). Näher betrachtet sieht das Ganze dann so aus: (vielen Dank an Wolfgang für die Zeichnung) Gruß Rolf
  6. Hallo Nasrudin Das Gehäuse ist von der Firma Bobla und kostet bei Reichelt ca. 36,- € (Größe: 181x68x200). Das gibts es auch in anderen Größen. Mal schaun wer mir jetzt den speziellen Gehäusedeckel fräsen kann. Da das GLCD-Displays mit LED-Hintergrundbeleuchtung (EA DOGXL160-7) eine Gesammthöhe von nur 6.4mm hat und die anderen Bauteile noch kleiner sind, kann die Platine später einfach unter den Gehäusedeckel geschraubt werden (siehe Zeichnung). Link Gehäuse: http://www.reichelt.de/Bopla-Ecoline-Alubos-Topline-Gehaeuse/ATPH-1865-200/3/index.html?;ACTION=3;LA=446;ARTICLE=126237;GROUPID=5194;artnr=ATPH+1865-200 Link Pultgehäuse: http://www.tme.eu/de/katalog/pultgehause_100626/ Gruß Rolf
  7. My Project: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878
  8. My Project: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878
  9. Einen wunderschönen, sonnigen und guten Montag Morgen wünsch ich Euch allen Hier ein paar Bildchen von meinem Synth-Gehäuse. Bin gerade dabei das Frontpanel für die Frontplatte zu löten. Aber sieht schon nicht schlecht aus find ich.. AVR-Synthesizer Gehäuse Gruß Rolf
  10. Hallo Im CC2-Forum wird gerade über das Thema "Modulation" in meinem AVR-Synthesizer diskutiert. Wenn Interesse besteht hier der Link: http://www.cczwei-forum.de/cc2/thread.php?postid=82444#post82444 Gruß Rolf
  11. Hier noch eine kleine Kostprobe :no: http://soundcloud.com/rolfdegen/avr-synthesizer-demosounds
  12. Hallo Hab ein wenig mit Cubase LE6 und den Einstellungen an meinem AVR-Synthesizer rumgespielt. Die Sequenz stammt ursprünglich von Wolfgang. Durch Zufall und wie das eigentlich immer so ist, sind die Noten etwas verrutscht und es ist etwas neues daraus entstanden. Hier das Original von Wolfgang und seinem Shruthi-Synthesizer. Zusätlich ist noch ein Effektgerät nachgeschaltet. http://www.wiesolator.de/data/topics/Musik/Musik-Equipment/_downloads/Shruti-Box.mp3 Und hier meine Version mit dem AVR-Synth ohne Effektgerät. Der Stereosound kommt direkt aus dem Synthesizer. http://soundcloud.com/rolfdegen/avr-synthesizer-melody-1 http://soundcloud.com/rolfdegen/avr-synthesizer-demosounds Viel Spass beim anhören Gruß Rolf
  13. Mein Titelbild zeigt einen kleinen Ausschnitt vom Innenleben meines Synthesizers.

  14. Hallöchen.. Ich bin jetzt beim Thema "Digitale Signalverarbeitung" angelangt. In der Modulation Matrix werden die digitalen Signale von den LFO's und Enveloop Generatoren mit den Steuersignalen für VCF, VCA und dem Ausgangssignal der beiden DAC's verknüpft und berechnet. Bei einem 8Bitter , wzB dem Xmega128A1 in meinem Synthesizer, darf und kann man in Bezug auf die Digitale Signalverabeitung nichts großes erwarten. Die Berechnungen würden zu viel Prozessorresourcen in Anspruch nehmen und für die eigentliche Aufgaben würde keine Leistung mehr übrig sein. Fließkommaberechnungen oder Fast -Fourier-Analysen, wie sie in der Digitalen Signalverarbeitung oft vorkommen, sind nur mit leistungsstarken Prozessoren wzB Digitalen-Signal-Prozessoren (DSP) in Echzeit realisierbar. Ein XMega hat dafür andere Vorzüge wzB eine Vielzahl von Peripherie-Bausteinen: 12Bit AD/DA-Wandler, Timer und eine Menge IO-Ports. Aber zum Thema "Digitale Signalverarbeitung". Im AVR-Synth werden weder Fließkommaberechnungen noch Filterberechnungen durchgeführt. In den Meisten Fällen reichen einfache 8Bit und 16Bit Multiplikationen, Divisionen oder Additionen aus, um eine Signalberechnung durchzuführen. Ein kleines Beispiel in C um die Lautstärke (Volume) eines digitalen Audiosignals (Input) von 0-100 zu ändern: Output = Input * Volume / 100 Das gleiche Beispiel in Assembler nur mit einer Änderung für eine schnellere Binär-Rechnung. Die Lautstärke hat einen Wert von 0-127 anstatt 0-100. Das Beispiel stammt aus meinem AVR-Synth. Die Einstellung erfolgt mit einem Drehgeber (Encoder) von 0-127. // Register Definition Volume = 18 ; R20 Volume Input = 19 ; R19 Input Output0 = 20 ; R20 Output Low-Byte Output1 = 21 ; R21 Output High-Byte // Berechnung MUL Input, Volume ; Input * Volume MOVW Output0, R0 ; Multiplikationsergebnis nach Output0+1 LSR Output1 ; div 127 ROR Output0 LSR Output1 ROR Output0 LSR Output1 ROR Output0 LSR Output1 ROR Output0 LSR Output1 ROR Output0 LSR Output1 ROR Output0 LSR Output1 ROR Output0 ; Ergebnis in Output0 Die Division durch 127 könnte man noch beschleunigen wie im folgenden Beispiel Für eine Panorama-Funktion im AVR-Synth habe ich das folgende Programm entwickelt. Dabei wird ein geregelter Anteil (PanMix) von KanalA zu KanalB gemischt und umgekehrt. Hörbarer Effekt ist eine sich verkleinernde Stereo-Breite bis hin zu einem monophonem Klangbild (siehe Demosound). //----------------------------------------------------------------------- // PanMix ChanalB temp0_chanalB = 21 ; temp-register for ChanalB temp1_chanalB = 22 MOV temp0_chanalB, chanalB_0 ; save ChanalB in temp-register MOV temp1_chanalB, chanalB_1 ; // Mul: chanalA * pan_mix LDS R18, pan_mix MOV R19, chanalA_0 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 // ChanalB + ChanalA ADD chanalB_0, R18 ADC chanalB_1, chanalA_1 //----------------------------------------------------------------------- // PanMix ChanalA // Mul: chanalB * pan_mix LDS R18, pan_mix MOV R19, temp0_chanalB 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 // ChanalA + ChanalB ADD chanalA_0, R18 ADC chanalA_1, temp1_chanalB //----------------------------------------------------------------------- // Chanal Output // convert ChanalA to 12Bit LSL chanalA_0 ROL chanalA_1 LSL chanalA_0 ROL chanalA_1 LSL chanalA_0 ROL chanalA_1 // convert ChanalB to 12Bit LSL chanalB_0 ROL chanalB_1 LSL chanalB_0 ROL chanalB_1 LSL chanalB_0 ROL chanalB_1 // send chanalA value to DACA STS 0x0338, chanalA_0 ; 2 L-Byte to DAC-Register DACAL STS 0x0339, chanalA_1 ; 2 H-Byte to DAC Register DACAH // send chanalB value to DACB STS 0x0318, chanalB_0 ; 2 L-Byte to DAC-Register DACBL STS 0x0319, chanalB_1 ; 2 H-Byte to DAC Register DACBH PanMix Demosoud http://soundcloud.com/rolfdegen/avr-synth-panmix Hier noch ein anderer Demosound in dem der PanMix noch etwas deutlicher zu hören ist. http://soundcloud.com/rolfdegen/panmix-02 Gruß Rolf
  15. Hallo Here is my new Modulation-Matrix of AVR-Synth “WAVE 1†You can select a modulation-source with encoder on left site and see the depth-values of destinations on the right site. The depth-value can modify with anather encoder. It still lacks some destination, for examble Pan, FM and noise generator. Geetings Rolf My Project-Site: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878 My Youtube-Canal: http://www.youtube.com/user/rolfdegen1806
  16. Hallo ihr da.. Hab mal wieder etwas an meinem Synth gebastelt bzw programmiert und herausgekommen ist eine neue Menü-Seite für die Modulation-Matrix (Bild 1). Links kann man eine Modulations-Quelle zB LFO1 auswählen und Rechts sieht man dann die Modulations Ziele für LFO1 mit den eingestellten Depth-Werten. Da es sich beim "WAVE 1" um einen "Echten" Stereo Synthesizer handelt, gibt es für den linken und rechten Kanal getrennte Modulations-Ziele zB VCF1 und VCF2. Einige Modulations-Ziele wzB PAN, FM and Noisgenerator fehlen allerdings noch. Bild 1: Modulations-Matrix im AVR-Synthesizer Gruß Rolf
  17. Hallo Hier das ganze LFO-Programm vom AVR-Synthi. Ich gebe zu, die Töne bzw Klänge sind nicht unbedingt jedermanns Geschmack Aber im Video sieht man hoffentlich die ganzen Modulationsmöglichkeiten. Es fehlt natürlich noch eine gute Modulationsmatrix, in der man die Modulationsquellen und deren Ziele flexibel verknüpfen kann. Das wird aber kommen.. Die Modulationsmatrix ersetzt quasi die typischen Patch-Kabel von einem Analogen Modul-Synthesizer. Im Moment sind die drei LFO's fest mit mit DCO, VCF und VCA verknüpft. So.. jetzt aber viel Spaß beim anhören.. PS: In der 2.Hälfte wird's richtig interessant :smile: Gruß Rolf
  18. mmm.. Fließkommaberechungen. Das werde ich meinem Xmega nicht antun. Vielleicht werde ich das zu einem späteren Zeitpunkt mal anteste. Im Vordergrund steht ja die Entwicklung eines Synthesizers und kein eigenständiges AVR-Oszilloskop.Vielleicht kann man später daraus ein separates Projekt entwickeln. Ich habe noch etwas an der Scope-Funktion gearbeitet. Jetzt gibt es zusätzlich eine automatische Trigger-Funktion und ein Single sweep für einmalige Vorgänge (siehe Video). Gruß Rolf
  19. Hallo Thorsten Danke für die Hilfe. Klingt wieder nach viel Mathematik. Leider nicht mein Lieblingsfach und für meinen kleinen 8Bitter vielleicht ein zu großes Hinderniss. Aber mal schaun ob ich es richtig verstehe.. Meine Wellenform besteht aus 151 8Bit Samples, die im Ram des Xmegas warten und auf den LCD-Screen wollen. Meine Rechnung wäre jetzt diese.. // Eingangssignal quadrieren sample1 * sample1 = q_sample1 und jetzt filter.. aber wie
  20. Wellenform Darstellung auf LCD-Screen Hallo ihr Lieben Ich hoffe euch gehts gut. Ich habe die ganzen Feiertage genutzt um am Synth weiter zu programmieren. Zur Zeit arbeite ich noch an der Scope-Funktion vom Synth und habe ein kleines Problem was die Wellenform Darstellen auf dem LCD-Screen betrifft. Ich möchte auf der Scope-Page im AVR-Synth eine Funktion programmieren, die eine aufgenommenen Wellenform nicht als Wave sonder als Hüllkurve auf dem LCD-Screen darstellt. Scope-Funktionen wzB TimeBase und Trigger-Level funktionieren bereits prächtig. Die Trigger-Funktion konnte ich mit dem Analog Comparator im Xmega ohne zusätzlichen Portpin lösen. Im Xmega kann man dafür den zweiten-Eingang des Komparators auf die intern skalierbare Versorgungsspannung (VCC) legen. Um mein Darstellungsproblem etwas zu verdeutlichen, habe ich ein Video auf Youtube hochgeladen. Vielleicht habt ihr ja einen kleinen Tip für mich. Ich danke euch schon einmal im Voraus für die Hilfe. Gruß Rolf
  21. This is a MiniScope-Funktion in my DY-Synthesizer "WAVE 1" My Project-Site: http://www.cczwei-forum.de/cc2/thread.php?threadid=5878 My Youtube-Videos:
  22. Hallo Ich habe Heute Morgen "mal eben auf die schnelle) eine Mini-Scope Funktion auf der Oscillator-Page implimentiert. Das ganze sieht jetzt so aus: Mini-Scope Funktion in AVR-Synthesizer "WAVE-1" Gruß Rolf
  23. Hallo zusammen.. Meine Demo-Filmchen für den AVR-Synth hatte ich in der Vergangenheit immer mit meinem Nexus Smartphone aufgenommen und auf Youtube hochgeladen. Aber das Smartphone ist mir letzte Woche auf den Fliesenboden gefallen und in viele Einzelteile zersprungen. Reparatur zu teuer bzw unmöglich. Da ich im Moment etwas knapp bei Kasse bin, habe ich mir wieder ein kleines weißes Galaxy Ace Smartphone zugelegt. Das hatte ich mir vor zwei Jahren schon einmal gekauft und war recht begeistert. Gut.. kleine Abstriche muss man natürlich bei der Geschwindigkeit machen. Das Galaxy Ace hat nur einen 832MHz Prozessor mit einem CPU Kern, das Nexus einen DuoCore mit 1.2GHz. Aber leider macht die eingebaute Videocam im Galaxy Ace wegen ihrer geringen Auflösung von 640x480 Pixeln leider keine guten Aufnahmen. So hab ich mir als Alternative eine Logitech HD Webcam C525 gekauft und war überrascht, wie gut die Qualität einer Aufnahmen war. Im Vergleich zu meinem riesigen Smartphone passt die kleine neue Webcam viel besser auf mein kleines Stativ und kippt nicht immer um. Youtube-Video: Scope-Funktion im AVR-Synth Da ich gerade an einer Scope-Funktion für den AVR-Synth "bastle" habe ich mal schnell ein Video davon gemacht. Die Scope-Funktion bekommt später eine eigene Menü-Seite im AVR-Synth. Im Moment funktioniert sie sobald eine Taste auf dem Keyboard gedrückt wird. Meine Idee ist es, im Osc-Menü oben rechts ein kleines Mini-Fenster anzuordnen, in dem das Audiosignal vom Ausgang angezeigt wird. So kann man direkt sehen welchen Einfluss die ausgewählte Oszillator-Wellenform auf das Ausgangssignal hat. Gruß Rolf
  24. Hallo Zur Zeit programmiere ich an neuen Grafik-Routinen für mein DOGXL160 Display. Für die Filterfunktion möchte ich ein kleines Oszilloskop programmieren, das die Wellenform des Audioausgangs vom Synth anzeigt. Somit sind die Wertänderungen von Cutoff und Resonanz nicht nur hörbar sonder auch sichtbar. Das Youtube-Video zeigt die Wellenform-Grafik noch in der alte und langsame Variante auf einem eDIP160W-7 Display an. Filterfunktion auf dem AVR-Synthesizer: Wer nähers über das DOGXL160 Display und seine Programmierung wissen will, der schaut bitte hier: http://www.mikrocontroller.net/topic/144500#new Gruß Rolf
  25. Hallo und guten Abend zusammen... Je später der Abend um so interessanter die Beiträge, hoffe ich zumindest Ich habe noch ein wenig an den Einstellungen für die Filtersteuerung im AVR-Synth programmiert. Folgende Filterfunktion stehen zur Zeit zur Verfühgung: ADSR, Cutoff, Resonanz und Env Amount. Keytracking "KTrack" ist zur Zeit noch nicht imlementiert. Die Veränderung des Resonanz-Parameter wird jetzt auch grafisch in der Filterkurve angezeigt. Besten dank an Wolfgang alias Wiesolator aus dem CC2-Frum für die Midi-Sequenz die mein Synth in dem Youtube-Video spielt. Youtube-Video: Filterfunktion im AVR-Synth Gruß Rolf
×
×
  • Create New...